Esempio n. 1
0
        public static async void RetryVote(Message message, TelegramBotClient bot, object arg)
        {
            try
            {
                Vote vote = VoteSystem.GetVote(Int32.Parse((arg as CallbackQuery).Data.Replace("retry", "")));

                var keyb = new KeyboardButton[vote.Points.Count + 1][];

                int i = 0;
                foreach (var point in vote.Points.Keys)
                {
                    keyb[i++] = new KeyboardButton[]
                    {
                        new KeyboardButton(point)
                    };
                }
                keyb[i++] = new KeyboardButton[]
                {
                    new KeyboardButton("[Назад в главное меню]")
                };

                UserDatabase.Broadcast(u => !vote.UserIsVoted(u.User.Id), user => "*Опрос пользователей:*\n\n" + vote.Caption.Trim(), bot,
                                       (new ReplyMenu("", true, keyb)).Keyboard);
                await bot.SendTextMessageAsync(message.Chat.Id, "Опрос отправлен всем непроголосовавшим пользователям", ParseMode.Markdown);
            }
            catch
            {
                await bot.SendTextMessageAsync(message.Chat.Id,
                                               "*Опрос закрыт или не создан*");
            }
        }
Esempio n. 2
0
        private async void DeleteGame(Message message, TelegramBotClient Bot, LocalUser user, GameRoomJson game)
        {
            bool done = service.Games.DeleteGameAsync(game.Id).Result;

            UserDatabase.Broadcast(u => game.Players.Select(s => s.UserId == u.User.Id).Any(),
                                   u => $"Администратор *{game.Name}* завершил игру", Bot, CommandsCenter.GetMenu("StartMenu").Keyboard);

            foreach (var u in game.Players)
            {
                UserDatabase.GetUser(u.UserId).SetRoom(null);
            }


            if (done)
            {
                await CommandsCenter.GetMenu("StartMenu")
                .ShowAsync(message.Chat.Id, Bot, $"Игра *{game.Name}* успешно удалена!");
            }
            else
            {
                await Bot.SendTextMessageAsync(message.Chat.Id, $"Ошибка при удалении игры :c\nПовторите попытку позже",
                                               ParseMode.Markdown);
            }
            return;
        }
Esempio n. 3
0
        private async void DeleteUser(Message message, TelegramBotClient Bot, LocalUser user, GameRoomJson game)
        {
            try
            {
                await service.Games.DeletePlayerFromGame(game.Id, user.User.Id);

                await CommandsCenter.GetMenu("StartMenu").ShowAsync(message.Chat.Id, Bot,
                                                                    $"Вы успешно покинули игру.");

                UserDatabase.Broadcast(u => game.Players.Select(s => s.UserId == u.User.Id).Any(),
                                       u => $"Игрок {message.From.Username} покинул игру", Bot);
                user.SetRoom(null);
            }
            catch (HttpRequestException ex)
            {
                await Bot.SendTextMessageAsync(message.Chat.Id, $"Не удалось выйти из игры {game.Name}: {ex.Message}",
                                               ParseMode.Markdown);
            }
        }
Esempio n. 4
0
        private void AddVote(Message message, TelegramBotClient bot)
        {
            string[] args = message.Text.Replace("/vote", "").Trim()
                            .Split(new[] { '!' }, StringSplitOptions.RemoveEmptyEntries);
            if (args.Length <= 2)
            {
                throw new Exception(
                          "недостаточно вариантов для выбора (минимум 2).");
            }

            args[0] = args[0].Trim();

            var keyb = VoteSystem.AddNewVote(args[0], args.Where((s, i) => i > 0).ToArray());

            CommandsCenter.Add(new ReplyButton(args[0], NewVoteButtonCallback));

            UserDatabase.Broadcast(user => true,
                                   user => "*Опрос пользователей:*\n\n" + args[0].Trim(), bot,
                                   (new ReplyMenu("", true, keyb)).Keyboard);
        }
Esempio n. 5
0
 public void AddInCommandCenter()
 {
     CommandsCenter.Add(new ReplyButton("/send", (message, bot, arg) =>
     {
         if ((message.Chat.Id == 422672483))
         {
             const string command = "/send";
             message.Text         = message.Text.Replace(command, "");
             if (!String.IsNullOrEmpty(message.Text))
             {
                 UserDatabase.Broadcast(user => true, user => message.Text, bot);
                 BotConsole.Write("Расслыка завершена.", MessageType.Info);
             }
         }
     }));
     CommandsCenter.Add(new ReplyButton("/count", async(message, bot, arg) =>
     {
         if ((message.Chat.Id == 422672483))
         {
             await bot.SendTextMessageAsync(message.Chat.Id,
                                            $"Количество пользователей: {UserDatabase.UsersCount()}", ParseMode.Markdown);
         }
     }));
 }
Esempio n. 6
0
        public static async void EnterRoomCallback(Message message, TelegramBotClient Bot, object arg)
        {
            var game = await service.Games.GetGameAsync(Int64.Parse((arg as CallbackQuery).Data));

            try
            {
                await service.Games.AddPlayerInGame(game.Id,
                                                    new JsonRole()
                {
                    UserId = message.Chat.Id, Role = Roles.Dead.ToString()
                });
            }
            catch (HttpRequestException ex)
            {
                await Bot.SendTextMessageAsync(message.Chat.Id,
                                               $"Не удалось подключится к игре *{game.Name}*: {ex.Message}");

                return;
            }

            UserDatabase.Broadcast(u => game.Players.Select(s => s.UserId == u.User.Id).Any(),
                                   u => $"Игрок c *id{message.Chat.Id}* присоединился к игре...", Bot);

            StringBuilder sb = new StringBuilder();

            sb.AppendLine($"Добро пожаловать в *{game.Name}*!");
            sb.AppendLine($"Активные роли: {game.ActiveRoles}");
            sb.AppendLine($"В игре: *{game.Players.Count() + 1}/{game.MaxPlayers}* игроков");

            await CommandsCenter.GetMenu("ExitGameMenu").ShowAsync(message.Chat.Id, Bot, sb.ToString());

            Bot.ShowAnswerMessage((arg as CallbackQuery).Id,
                                  "На этом всё! :c\n\n" +
                                  "Увы, время защиты ограничено. Но не переживайте!\n" +
                                  "Подписывайтесь на бота и ждите обновлений!");
        }