Esempio n. 1
0
        public async Task Price()
        {
            await Context.Channel.DeleteMessageAsync(Context.Message);

            var routing = FarmRoomManager.GetRoomRouting();

            var room = routing.GetRoom(Context.Channel);

            if (DateTime.Now < room.Cash.NextMinimalPriceMessageDate)
            {
                await Context.Channel.SendMessageAsync($"Команда заблокирована до {room.Cash.NextMinimalPriceMessageDate}");

                return;
            }

            if (room.LastMinimalPrice == 0)
            {
                await Context.Channel.SendMessageAsync("Бот ещё не совершил мониторинг цен");
            }
            else
            {
                room.Cash.NextMinimalPriceMessageDate = DateTime.Now.AddDays(7);
                lock (room.Cash)
                {
                    FarmRoomManager.GetRoomRouting().SaveCashRooms();
                }
                await Context.Channel.SendMessageAsync($"Текущая ствака {room.LastMinimalPrice}");
            }
        }
Esempio n. 2
0
        public async Task farmRoomInfo()
        {
            await Context.Channel.DeleteMessageAsync(Context.Message);

            var           routing = FarmRoomManager.GetRoomRouting();
            StringBuilder builder = new StringBuilder();

            var count = 0;

            foreach (var room in routing.Rooms)
            {
                count++;

                builder.AppendLine($"**{room.Name}**");
                builder.AppendLine($"Баланс {room.Balance}");
                builder.AppendLine($"Минимальная ставка {room.Cash.MinLos}");
                builder.AppendLine($"---------------------");

                if (count > 10)
                {
                    await Context.Channel.SendMessageAsync(builder.ToString());

                    count = 0;
                    builder.Clear();
                }
            }
        }
Esempio n. 3
0
        public async Task Disable()
        {
            await Context.Channel.DeleteMessageAsync(Context.Message);

            var routing = FarmRoomManager.GetRoomRouting();

            var room = routing.GetRoom(Context.Channel);

            room.RemoveClient(Context.User.Id);
        }
Esempio n. 4
0
        public async Task Wipe()
        {
            await Context.Channel.DeleteMessageAsync(Context.Message);

            var routing = FarmRoomManager.GetRoomRouting();

            var room = routing.GetRoom(Context.Channel);

            room.RemoveAll();
        }
Esempio n. 5
0
        public async Task Update(int value)
        {
            await Context.Channel.DeleteMessageAsync(Context.Message);

            var routing = FarmRoomManager.GetRoomRouting();

            var room = routing.GetRoom(Context.Channel);

            room.UpdateMinutes = value;
            await room.SendBalanceMessage();
        }
Esempio n. 6
0
        public async Task Cancel(string orderId)
        {
            var routing  = FarmRoomManager.GetRoomRouting();
            var room     = routing.GetRoom(Context.Channel);
            var curOrder = room.Orders.FirstOrDefault(_ => _.OrderId.Contains(orderId));

            if (curOrder != null)
            {
                curOrder.IsCansel = true;
                await Context.Channel.DeleteMessageAsync(curOrder.OrderMessageId);

                room.Orders.Remove(curOrder);
            }
        }
Esempio n. 7
0
        public async Task Gold(int value)
        {
            await Context.Channel.DeleteMessageAsync(Context.Message);

            var routing = FarmRoomManager.GetRoomRouting();

            var room   = routing.GetRoom(Context.Channel);
            var client = room.GetClient(Context.User);

            client.SetGoldAmount(value);
            room.UpdateBalance();

            await room.SendBalanceMessage();
        }
Esempio n. 8
0
        public async Task Minimal(decimal value, string channelName)
        {
            await Context.Channel.DeleteMessageAsync(Context.Message);

            var routing = FarmRoomManager.GetRoomRouting();
            var room    = routing.Rooms.FirstOrDefault(_ => _.Name.ToLower().Contains(channelName.ToLower()));

            if (room == null)
            {
                await Context.Channel.SendMessageAsync($"Сервер {channelName} не был найден");
            }
            else
            {
                var embed = room.SetMinLos(value);
                await Context.Channel.SendMessageAsync("", false, embed);
            }
        }
Esempio n. 9
0
        public async Task Set(int gold, [Remainder] string username)
        {
            await Context.Channel.DeleteMessageAsync(Context.Message);

            var routing      = FarmRoomManager.GetRoomRouting();
            var room         = routing.GetRoom(Context.Channel);
            var selectClient = room.Cash.Clinets.FirstOrDefault(_ => _.Name.ToLower().Contains(username.ToLower()));

            if (selectClient == null)
            {
                await Context.User.SendMessageAsync($"Пользователь с ником {username} не найден");
            }
            else
            {
                selectClient.SetGoldAmount(gold);
                room.UpdateBalance();
                await room.SendBalanceMessage();
            }
        }
Esempio n. 10
0
        public async Task Create(int gold, string name)
        {
            await Context.Channel.DeleteMessageAsync(Context.Message);

            var users = await Context.Channel.GetUsersAsync().FlattenAsync();

            var addedUser = users.FirstOrDefault(_ => _.Username.ToLower().Contains(name.ToLower()));

            if (addedUser != null)
            {
                var routing = FarmRoomManager.GetRoomRouting();
                var room    = routing.GetRoom(Context.Channel);
                var client  = room.GetClient(addedUser);

                client.SetGoldAmount(gold);
                room.UpdateBalance();

                await room.SendBalanceMessage();
            }
        }
Esempio n. 11
0
        public async Task Minimal()
        {
            await Context.Channel.DeleteMessageAsync(Context.Message);

            var embed = new EmbedBuilder();

            embed.WithTitle("Минимальные ставки");
            var rooms = FarmRoomManager.GetRoomRouting().Rooms;

            foreach (var room in rooms)
            {
                try
                {
                    embed.AddField(room.Name, room.MinLos, false);
                }
                catch
                {
                }
            }

            await Context.Channel.SendMessageAsync("", false, embed.Build());
        }
Esempio n. 12
0
        public async Task Order(int value)
        {
            await Context.Channel.DeleteMessageAsync(Context.Message);

            var routing = FarmRoomManager.GetRoomRouting();

            var room = routing.GetRoom(Context.Channel);

            G2gOrder order = new G2gOrder()
            {
                Buyer   = "Udenlo",
                Amount  = value,
                OrderId = "№4170194",
                Server  = "Benediction [US] Alliance"
            };

            room.AddOrder(order);

            Emoji react   = new Emoji("💰");
            var   message = await Context.Channel.SendMessageAsync("", false, order.GetOrderEmbed());

            await message.AddReactionAsync(react);
        }
Esempio n. 13
0
        private async Task HandleReactionAddedAsync(
            Cacheable <IUserMessage, ulong> arg1,
            ISocketMessageChannel arg2,
            SocketReaction arg3)
        {
            var manager = FarmRoomManager.GetRoomRouting();
            var room    = manager.GetRoom(arg2);
            var user    = room.Cash.Clinets.FirstOrDefault(_ => _.Id == arg3.UserId);

            if (arg3.Emote.ToString() != "💰" || user == null)
            {
                return;
            }
            ;

            var lMessage = await arg1.GetOrDownloadAsync();

            var orderId = lMessage.Embeds.FirstOrDefault()
                          .Fields.FirstOrDefault(_ => _.Name == "Order")
                          .Value;
            var curOrder = room.Orders.FirstOrDefault(_ => _.OrderId.Contains(orderId));

            if (curOrder == null && curOrder?.Performer != null)
            {
                Console.WriteLine($"{DateTime.Now}: Order adoption canceled \n" +
                                  $"Order performer alredy exist");
                return;
            }

            curOrder.SetPerformer(user);
            lMessage.ModifyAsync(msg => msg.Embed = curOrder.GetOrderEmbed()).Wait();
            Thread.Sleep(2000);
            await lMessage.RemoveAllReactionsAsync();

            OrderWatchManager.AddOperation(new AcceptOrder(curOrder));
        }
Esempio n. 14
0
        private async Task AsyncStart(IWebDriver driver)
        {
            _driver = driver;

            if (driver.Url != _url)
            {
                Update();
            }

            if (_lastWatchTime.ElapsedMilliseconds > 60000)
            {
                Update();
            }
            else
            {
                Thread.Sleep(1000);
            }

            IWebElement currentOrder = null;
            FarmRoom    currentRoom  = null;

            try
            {
                //Open new order
                var newOrders = driver.FindElements(By.ClassName("sales-history__table-row-unread"));

                //Check for room exist
                var root = FarmRoomManager.GetRoomRouting();

                foreach (var el in newOrders)
                {
                    foreach (var room in root.Rooms)
                    {
                        var formatedLabel = Regex
                                            .Replace(el.FindElement(By.ClassName("sales-history__product-name"))
                                                     .Text.ToLower(), "[’']", "");

                        if (formatedLabel.Contains(room.Server) &&
                            formatedLabel.Contains(room.Fraction) &&
                            room.IsOperationAllowed == true &&
                            room.Balance != 0)
                        {
                            currentOrder = el;
                            currentRoom  = room;

                            goto RoomExist;
                        }
                        ;
                    }
                }

                return;

RoomExist:

                OrderFound?.Invoke(currentRoom);
                var operationLink = currentOrder.FindElement(By.ClassName("sales-history__product-id"));
                operationLink.Click();

                //View order details
                var btn = driver.WaitElement(By.ClassName("progress_gr"));
                Thread.Sleep(1000);
                btn.Click();
                Thread.Sleep(1000);

                try
                {
                    var orderServer = driver.WaitElement(By.XPath(BuildXpathString("Server"))).Text;
                    driver.WaitElement(By.XPath("//a[contains(@class, 'progress_gr') and contains(text(), 'Start Trading')]"))
                    .Click();

                    //Parse order info

                    var fraction      = driver.WaitElement(By.XPath(BuildXpathString("Faction"))).Text;
                    var buyer         = driver.WaitElement(By.XPath(BuildXpathString("Character Name"))).Text;
                    var OrderNumberEl = driver.WaitElement(By.CssSelector(".trade__order__top-num"));
                    var amount        = int.Parse(driver
                                                  .WaitElement(By.XPath("//td[@class = 'sales-history__table-quantity' and contains(@data-th, 'QTY.')]"))
                                                  .Text.Replace(",", ""));

                    var orderNumber = Regex.Match(OrderNumberEl.Text, @"SOLD ORDER №\d*").Value.Replace("SOLD ORDER", "");

                    string BuildXpathString(string fieldName)
                    {
                        return($"//span[contains(@class, 'game-info__title') and contains(text(), '{fieldName}')]/../span[contains(@class, 'game-info__info')]");
                    }


                    Thread.Sleep(1000);

                    //Create order in discord room
                    var titles  = driver.WaitElement(By.ClassName("purchase-title")).Text.Split('>');
                    var myOrder = new Model.G2gOrder()
                    {
                        Buyer      = buyer,
                        OrderId    = orderNumber,
                        Amount     = amount,
                        Server     = $"{titles[1].FirstCharUp()} {titles[2].Replace("(GOLD)", "")}",
                        Fraction   = fraction,
                        OrderPage  = driver.Url,
                        RoomSender = currentRoom
                    };

                    currentRoom.AddOrder(myOrder);
                    currentRoom.SendOrderInChannle(myOrder);
                }
                catch (Exception ex)
                {
                    var admins = await GetAdmins();

                    if (admins != null)
                    {
                        foreach (var item in admins)
                        {
                            await item.SendMessageAsync($"Ошибка отправки ордера на :{currentRoom.Channel.Name}  (ex: {ex.Message})");
                        }
                    }

                    throw;
                }
            }
            catch (Exception ex)
            {
                var admins = await GetAdmins();

                if (admins != null)
                {
                    var servicesUser = admins.FirstOrDefault(_ => _.Username == "Hatab2010");

                    if (servicesUser != null)
                    {
                        await servicesUser.SendMessageAsync(ex.Message);
                    }
                }

                Console.WriteLine(ex);
            }

            async Task <IEnumerable <IUser> > GetAdmins()
            {
                if (currentRoom != null)
                {
                    var users = await currentRoom.Channel.GetUsersAsync().FlattenAsync();

                    return(users.Where(_ => (((IGuildUser)_)
                                             .GetPermissions((IGuildChannel)currentRoom.Channel))
                                       .ToList().Contains(ChannelPermission.ManageChannels) &&
                                       _.IsBot == false));
                }
                else
                {
                    return(null);
                }
            }
        }
Esempio n. 15
0
        private async Task OnReady()
        {
            var manager = FarmRoomManager.GetRoomRouting();

            manager.Load(_client);
        }