static GameRoom()
        {
            KeyboardButton [][] def = new KeyboardButton[2][];
            def[0]        = new KeyboardButton[] { str_players, str_conf };
            def[1]        = new KeyboardButton[] { str_exit, str_id };
            markupDefault = new ReplyKeyboardMarkup(def, true);

            KeyboardButton [][] adm = new KeyboardButton[3][];
            adm[0]      = new KeyboardButton[] { str_newgame };
            adm[1]      = new KeyboardButton[] { str_conf };
            adm[2]      = new KeyboardButton[] { str_exit, str_id, str_players };
            markupAdmin = new ReplyKeyboardMarkup(adm, true);

            markupList = new ReplyKeyboardMarkup(
                new KeyboardButton[] { str_list, str_back }, true
                );

            markupBack = new ReplyKeyboardMarkup(
                new KeyboardButton[] { str_back }, true
                );

            markupShowMe = new ReplyKeyboardMarkup(
                new KeyboardButton[] { str_showme }, true
                );

            markupShowRemaining = new ReplyKeyboardMarkup(
                new KeyboardButton[] { str_remaining }, true
                );

            markupHide = new ReplyKeyboardHide()
            {
                HideKeyboard = true
            };
        }
Exemple #2
0
        public async Task SendMessageAsync_WithKeyboardHide_SuccesfullyHideKeyboard()
        {
            var          apiClient    = ConstructClient();
            const string messageText  = "SendMessageAsync_WithKeyboardHide_SuccesfullyHideKeyboard";
            var          tempKeyboard = new ReplyKeyboardHide()
            {
                HideKeyboard = true
            };

            var message = await apiClient.SendMessageAsync(TestChatId, messageText, null, null, tempKeyboard);

            Assert.That(message.Text, Is.EqualTo(messageText));
        }
Exemple #3
0
        public async static Task <string> SendMessage(long chatId, string text, KeyboardButton[] menue = null, InlineKeyboardButton[][] inlineButtons = null, bool defaultKeyboard = false, bool hideKeyboard = false)
        {
            //make api token async
            var api = createAsync();

            if (menue != null) //if menue not null means when send message to client show specific menue to user
            {
                var replyMarkup = CreateKeyboardButton(menue);
                var result      = await api.SendTextMessageAsync(chatId, text, false, false, 0, replyMarkup);

                return("success");
            }
            if (defaultKeyboard)
            {
                var btn = new KeyboardButton[]
                {
                    new KeyboardButton {
                        Text = "تنظیمات ⚙️"
                    }, new KeyboardButton {
                        Text = "راهنما 💬"
                    } /*, new KeyboardButton {Text = "منوی اصلی 🔰" }*/, new KeyboardButton {
                        Text = "ایجاد پست 🖌"
                    }
                };

                ReplyKeyboardMarkup rkb = CreateKeyboardButton(btn);
                var result = await api.SendTextMessageAsync(chatId, text, false, false, 0, rkb);

                return("success");
            }
            if (inlineButtons != null)
            {
                InlineKeyboardMarkup inline = new InlineKeyboardMarkup(inlineButtons);
                var result = await api.SendTextMessageAsync(chatId, text, false, false, 0, inline);
            }
            if (hideKeyboard)
            {
                ReplyKeyboardHide replyKeboardHide = new ReplyKeyboardHide();
                var reply = await api.SendTextMessageAsync(chatId, text, false, false, 0, replyMarkup : replyKeboardHide);
            }
            else
            {
                var x = await api.SendTextMessageAsync(chatId, text);
            }
            return("success");
        }
Exemple #4
0
 internal static void Send(string message, long id, bool clearKeyboard = false, ReplyKeyboardMarkup customMenu = null)
 {
     //message = message.Replace("`",@"\`");
     if (clearKeyboard)
     {
         var menu = new ReplyKeyboardHide {
             HideKeyboard = true
         };
         Api.SendTextMessage(id, message, replyMarkup: menu, disableWebPagePreview: true);
     }
     else if (customMenu != null)
     {
         Api.SendTextMessage(id, message, replyMarkup: customMenu, disableWebPagePreview: true);
     }
     else
     {
         Api.SendTextMessage(id, message, disableWebPagePreview: true);
     }
 }
Exemple #5
0
 internal static async Task <Telegram.Bot.Types.Message> Send(string message, long id, bool clearKeyboard = false, InlineKeyboardMarkup customMenu = null, Werewolf game = null)
 {
     MessagesSent++;
     //message = message.Replace("`",@"\`");
     if (clearKeyboard)
     {
         var menu = new ReplyKeyboardHide {
             HideKeyboard = true
         };
         return(await Bot.SendTextMessage(id, message, replyMarkup : menu, disableWebPagePreview : true, parseMode : ParseMode.Html));
     }
     else if (customMenu != null)
     {
         return(await Bot.SendTextMessage(id, message, replyMarkup : customMenu, disableWebPagePreview : true, parseMode : ParseMode.Html));
     }
     else
     {
         return(await Bot.SendTextMessage(id, message, disableWebPagePreview : true, parseMode : ParseMode.Html));
     }
 }
Exemple #6
0
        private static bool waitingForRoomId; //flag to recieve answer

        static Menu()
        {
            playerRoom = new Dictionary <long, int>();
            rooms      = new Dictionary <int, GameRoom>();

            waitingForRoomId = false;

            var menu = new KeyboardButton[2][];

            menu[0]    = new KeyboardButton[] { str_newroom };
            menu[1]    = new KeyboardButton[] { str_joinroom };
            markupMenu = new ReplyKeyboardMarkup(menu, true);

            markupCancel = new ReplyKeyboardMarkup(
                new KeyboardButton[] { str_cancel }, true
                );

            markupHide = new ReplyKeyboardHide {
                HideKeyboard = true
            };
        }
Exemple #7
0
 internal static void Send(string message, long id, bool clearKeyboard = false, ReplyKeyboardMarkup customMenu = null)
 {
     //message = message.Replace("`",@"\`");
     if (clearKeyboard)
     {
         var menu = new ReplyKeyboardHide { HideKeyboard = true };
         Api.SendTextMessage(id, message, replyMarkup: menu, disableWebPagePreview: true);
     }
     else if (customMenu != null)
     {
         Api.SendTextMessage(id, message, replyMarkup: customMenu, disableWebPagePreview: true);
     }
     else
     {
         Api.SendTextMessage(id, message, disableWebPagePreview: true);
     }
 }
Exemple #8
0
Fichier : Main.cs Projet : y2k/Bot
        public async void bw_DoWork(string key)
        {
            List <User> availablePlayers = new List <User>();

            try
            {
                var Bot = new Telegram.Bot.TelegramBotClient(key);
                await users.Init(Bot);

                //IHero.bot = Bot;
                await Bot.SetWebhookAsync("");

                //Bot.SetWebhook("");
                int offset = 0;
                timer = new Timer(x => AddSecondToTime(null, null), null, 0, 1000);
                while (true)
                {
                    availablePlayers.RemoveAll(x => x.status != User.Status.Searching);
                    ActiveGames.RemoveAll(x => !x.isWorking);

                    while (availablePlayers.Count >= 2)
                    {
                        var firstPlayer  = availablePlayers[0];
                        var secondPlayer = availablePlayers[1];

                        ActiveGames.Add(new Game(firstPlayer, secondPlayer, Bot));
                        var keyboard1 = new ReplyKeyboardMarkup();
                        keyboard1.Keyboard = new Telegram.Bot.Types.KeyboardButton[][]
                        {
                            new Telegram.Bot.Types.KeyboardButton[]
                            {
                                new Telegram.Bot.Types.KeyboardButton(firstPlayer.lang.YesMessage),
                                new Telegram.Bot.Types.KeyboardButton(firstPlayer.lang.NoMessage)
                            }
                        };
                        keyboard1.ResizeKeyboard  = true;
                        keyboard1.OneTimeKeyboard = true;

                        var keyboard2 = new ReplyKeyboardMarkup();
                        keyboard2.Keyboard = new Telegram.Bot.Types.KeyboardButton[][]
                        {
                            new Telegram.Bot.Types.KeyboardButton[]
                            {
                                new Telegram.Bot.Types.KeyboardButton(secondPlayer.lang.YesMessage),
                                new Telegram.Bot.Types.KeyboardButton(secondPlayer.lang.NoMessage)
                            }
                        };
                        keyboard2.ResizeKeyboard  = true;
                        keyboard2.OneTimeKeyboard = true;

                        string user1_msg = firstPlayer.lang.GameFounded + "\n" + firstPlayer.lang.AcceptGameQuestion;
                        string user2_msg = secondPlayer.lang.GameFounded + "\n" + secondPlayer.lang.AcceptGameQuestion;

                        await firstPlayer.Sender.SendAsync(lang => user1_msg, keyboard1);

                        await secondPlayer.Sender.SendAsync(lang => user2_msg, keyboard2);

                        try
                        {
                            availablePlayers.RemoveRange(0, 2);
                        }
                        catch (System.ArgumentOutOfRangeException ex)
                        {
                            Console.WriteLine(ex);
                        }
                    }

                    var updates = await Bot.GetUpdatesAsync(offset);

                    foreach (var update in updates.Where(x => x.Message != null && x.Message.Type == Telegram.Bot.Types.Enums.MessageType.TextMessage))
                    {
                        var message = update.Message;

                        if (!users.Contains(message.Chat.Id))
                        {
                            await users.AddUser(message.Chat.Id);
                        }

                        User _usr = users.getUserByID(message.Chat.Id);

                        if (_usr.Sender == null)
                        {
                            _usr.InitSender(Bot);
                        }

                        if (_usr.status == User.Status.Default)
                        {
                            if (message.Text == "/start")
                            {
                                await _usr.Sender.SendAsync(lang => "Welcome to DotA Text!\n/language - Change language\n/instruction - Get instruction");
                            }
                            else if (message.Text == "/language")
                            {
                                var keyboard = new ReplyKeyboardMarkup();
                                keyboard.Keyboard = new Telegram.Bot.Types.KeyboardButton[][]
                                {
                                    new Telegram.Bot.Types.KeyboardButton[]
                                    {
                                        new Telegram.Bot.Types.KeyboardButton("English"),
                                        new Telegram.Bot.Types.KeyboardButton("Русский")
                                    }
                                };
                                keyboard.ResizeKeyboard  = true;
                                keyboard.OneTimeKeyboard = true;

                                _usr.status = User.Status.LanguageChanging;

                                await _usr.Sender.SendAsync(lang => lang.ChangeLanguage, keyboard);
                            }
                            else if (message.Text == "/profile")
                            {
                                if (_usr.net_status == User.NetworkStatus.Online)
                                {
                                    await _usr.Sender.SendAsync(lang => _usr.GetStatisctisMessage());
                                }
                                else
                                {
                                    await _usr.Sender.SendAsync(lang => lang.ErrorByStatusOffline);
                                }
                            }
                            else if (message.Text == "/online")
                            {
                                if (_usr.Name != "")
                                {
                                    _usr.net_status = User.NetworkStatus.Online;
                                    await _usr.Sender.SendAsync(lang => lang.SetOnlineStatus);
                                }
                                else
                                {
                                    _usr.status = User.Status.SettingNickname;
                                    await _usr.Sender.SendAsync(lang => lang.NeedToHaveNickname);

                                    await _usr.Sender.SendAsync(lang => $"{lang.NeedToSetNickname}:");
                                }
                            }
                            else if (message.Text == "/offline")
                            {
                                _usr.net_status = User.NetworkStatus.Offline;
                                await _usr.Sender.SendAsync(lang => lang.SetOfflineStatus);
                            }
                            else if (message.Text == "/netstatus")
                            {
                                string msg;
                                if (_usr.net_status == User.NetworkStatus.Online)
                                {
                                    msg = _usr.lang.GetOnlineStatus;
                                }
                                else
                                {
                                    msg = _usr.lang.GetOfflineStatus;
                                }
                                await _usr.Sender.SendAsync(lang => msg);
                            }
                            else if (message.Text == "/instruction")
                            {
                                _usr.lang.instruction.SetLanguage(_usr.lang.lang);
                                var    text        = _usr.lang.instruction;
                                string message_one = text.step1_Describe + "\n\n" + text.step2_AboutNetMode + "\n\n" + text.step3_AboutLanguage + "\n\n";
                                message_one += text.step4_AboutBattle + "\n\n" + text.step5_AboutHeroes;
                                string message_two = text.step6_AboutAbilities + "\n\n" + text.step7_AboutBuffstAndModifiers + "\n\n" + text.step8_AboutDonate + "\n\n" + text.step9_AboutDeveloper + "\n\n" + text.step10_TheEnd;
                                await _usr.Sender.SendAsync(lang => message_one);

                                await _usr.Sender.SendAsync(lang => message_two);
                            }
                            else if (message.Text == "/donate")
                            {
                                await _usr.Sender.SendAsync(lang => lang.Donate);
                            }
                            else if (message.Text == "/startgame")
                            {
                                if (_usr.net_status == User.NetworkStatus.Online)
                                {
                                    _usr.status = User.Status.Searching;
                                    availablePlayers.Add(_usr);
                                    await _usr.Sender.SendAsync(lang => lang.SearchingModeNotify);
                                }
                                else
                                {
                                    await _usr.Sender.SendAsync(lang => lang.ErrorByStatusOffline);
                                }
                            }
                            else if (message.Text == "/stopsearching")
                            {
                                await _usr.Sender.SendAsync(lang => lang.SeachingModeErrorNotStarted);
                            }
                            else if (message.Text == "/delete")
                            {
                                _usr.status = User.Status.DeletingAccount;
                                var kb = new ReplyKeyboardMarkup(new[] {
                                    new[]
                                    {
                                        new Telegram.Bot.Types.KeyboardButton(_usr.lang.YesMessage),
                                        new Telegram.Bot.Types.KeyboardButton(_usr.lang.NoMessage)
                                    }
                                }, true, true);
                                await _usr.Sender.SendAsync(lang => lang.ConfirmQuestion, kb);
                            }
                            else if (message.IsCommand("[ADMIN] Set rating:") && message.Chat.Id == Users.AdminID)
                            {
                                int    rating = 0;
                                string res    = System.Text.RegularExpressions.Regex.Match(message.Text, @"\d+").Value;
                                if (int.TryParse(res, out rating))
                                {
                                    rating = int.Parse(res);
                                }
                                Console.WriteLine($"Parse {rating}");
                                User find_user = null;

                                string name = System.Text.RegularExpressions.Regex.Match(
                                    message.Text, @"\{(.*)\}").Groups[1].ToString();

                                if (name != "")
                                {
                                    find_user = users.GetUserByName(name);

                                    if (find_user != null && rating > 0)
                                    {
                                        find_user.rate = rating;
                                        await find_user.SaveToFile();

                                        await _usr.Sender.SendAsync(lang => lang.GetMessageAdminCommandSuccesful(
                                                                        $"{message.Text} : {find_user.ID}"));
                                    }
                                }
                            }
                            else if (message.IsCommand("[ADMIN] Send to all:") && message.Chat.Id == Users.AdminID)
                            {
                                string res = System.Text.RegularExpressions.Regex.Match(message.Text, "\"(.*)\"")
                                             .Groups[1].ToString();
                                if (res != "")
                                {
                                    var list = users.GetUserList();
                                    for (int i = 0; i < list.Count; i++)
                                    {
                                        User user = list.Values.ElementAt(i);
                                        try
                                        {
                                            await user.Sender.SendAsync(lang => res);
                                        }
                                        catch (Telegram.Bot.Exceptions.ApiRequestException ex)
                                        {
                                            Console.WriteLine(ex.Message);
                                            list.Remove(user.ID);
                                        }
                                    }
                                    await _usr.Sender.SendAsync(lang => lang.GetMessageAdminCommandSuccesful(message.Text));
                                }
                            }
                            else if (message.IsCommand("[ADMIN] Get list of names") && message.Chat.Id ==
                                     Users.AdminID)
                            {
                                string msg = $"{_usr.lang.List}:\n{string.Join("\n", users.GetNames())}\n";
                                await _usr.Sender.SendAsync(lang => msg);
                            }
                            else if (message.IsCommand("[ADMIN] Send to one:") && message.Chat.Id == Users.AdminID)
                            {
                                string name = Regex.Match(message.Text, @"\{(.*)\}").Groups[1].ToString();
                                string text = Regex.Match(message.Text, "\"(.*)\"").Groups[1].ToString();

                                long id = 0;
                                id = users.GetIdByName(name);

                                if (id != -1)
                                {
                                    if (text != "")
                                    {
                                        try
                                        {
                                            await users.getUserByID(id)?.Sender.SendAsync(lang => text);
                                        }
                                        catch (Telegram.Bot.Exceptions.ApiRequestException ex)
                                        {
                                            Console.WriteLine(ex.Message);
                                            users.GetUserList().Remove(id);
                                        }
                                        await _usr.Sender.SendAsync(lang => lang.GetMessageAdminCommandSuccesful(message.Text));
                                    }
                                }
                            }
                            else if (message.IsCommand("[ADMIN] Get profile of user:"******"\{(.*)\}").Groups[1].ToString();
                                if (name != "")
                                {
                                    if (users.GetUserByName(name) != null)
                                    {
                                        await _usr.Sender.SendAsync(lang => users.GetUserByName(name)
                                                                    ?.GetStatisctisMessage());

                                        await _usr.Sender.SendAsync(lang => lang.GetMessageAdminCommandSuccesful(message.Text));
                                    }
                                }
                            }
                            else if (message.IsCommand("[ADMIN] Delete user:"******"\{(.*)\}").Groups[1].ToString();
                                if (name != "")
                                {
                                    if (users.GetUserByName(name) != null)
                                    {
                                        await users.DeleteUser(users.GetUserByName(name).ID);

                                        await _usr.Sender.SendAsync(lang => lang.GetMessageAdminCommandSuccesful(message.Text));
                                    }
                                }
                            }
                            else
                            {
                                if (await CheckHeroView(_usr, message.Text))
                                {
                                }
                                else
                                {
                                    await _usr.Sender.SendAsync(lang => lang.HelloMessage);
                                }
                            }
                        }
                        else if (_usr.status == User.Status.LanguageChanging)
                        {
                            if (message.IsCommand("english") || message.IsCommand("русский"))
                            {
                                _usr.status = User.Status.Default;
                                if (message.IsCommand("english"))
                                {
                                    _usr.LanguageSet(User.Text.Language.English);
                                }
                                else if (message.IsCommand("русский"))
                                {
                                    _usr.LanguageSet(User.Text.Language.Russian);
                                }
                                var hide_keyboard = new ReplyKeyboardHide();
                                await _usr.SaveToFile();

                                await _usr.Sender.SendAsync(lang => lang.ChangedLanguage, hide_keyboard);
                            }
                        }
                        else if (_usr.status == User.Status.Picking)
                        {
                            await CheckHeroView(_usr, message.Text);

                            if (message.Text == "/stopsearching")
                            {
                                GetActiveGame(_usr.ActiveGameID).GetController(message.Chat.Id)?.LeaveConfirming();
                            }
                            else if (message.IsCommand(">"))
                            {
                                var kb = GetActiveGame(_usr.ActiveGameID)?.GetController(message.Chat.Id)?.GetKeyboardNextPage();
                                await _usr.Sender.SendAsync(lang => ".", kb);

                                Console.WriteLine(">");
                            }
                            else if (message.IsCommand("<"))
                            {
                                var kb = GetActiveGame(_usr.ActiveGameID)?.GetController(message.Chat.Id).GetKeyboardPrevPage();
                                await _usr.Sender.SendAsync(lang => ".", kb);

                                Console.WriteLine("<");
                            }
                            else
                            {
                                var hero = Game.hero_list.SingleOrDefault(x => message.IsCommand(x.Name));
                                if (hero != null)
                                {
                                    GetActiveGame(_usr.ActiveGameID)?.GetController(message.Chat.Id)?.PickHero(hero);
                                }
                            }
                        }
                        else if (_usr.status == User.Status.Picked)
                        {
                            await CheckHeroView(_usr, message.Text);

                            if (message.Text == "/stopsearching")
                            {
                                GetActiveGame(_usr.ActiveGameID).GetController(message.Chat.Id)?.LeaveConfirming();
                            }
                            else
                            {
                                await _usr.Sender.SendAsync(lang => lang.ErrorPickingIncorrectCommand);
                            }
                        }
                        else if (_usr.status == User.Status.Attacking)
                        {
                            await CheckHeroView(_usr, message.Text);
                            await CheckLeave(_usr, GetActiveGame(_usr.ActiveGameID), message.Text);

                            if (message.IsDigits(message.Text))
                            {
                                await GetActiveGame(_usr.ActiveGameID)?.GetController(_usr.ID)?.UseAbility(
                                    Convert.ToInt32(message.Text));
                            }
                            else
                            {
                                await _usr.Sender.SendAsync(lang => lang.IncorrectSelection);
                            }
                        }
                        else if (_usr.status == User.Status.Excepting)
                        {
                            await CheckLeave(_usr, GetActiveGame(_usr.ActiveGameID), message.Text);
                            await CheckHeroView(_usr, message.Text);

                            if (message.Text == "/report")
                            {
                                GetActiveGame(_usr.ActiveGameID)?.GetController(message.Chat.Id)?.CheckInactive();
                            }
                        }
                        else if (_usr.status == User.Status.Searching)
                        {
                            await CheckHeroView(_usr, message.Text);

                            if (message.Text == "/stopsearching")
                            {
                                availablePlayers.Remove(availablePlayers.Find(x => x.ID == _usr.ID));
                                _usr.status = User.Status.Default;
                                await _usr.Sender.SendAsync(lang => lang.SearchingModeStopped);
                            }
                            else
                            {
                                await _usr.Sender.SendAsync(lang => lang.ErrorSearchingIncorrectCommand);
                            }
                        }
                        else if (_usr.status == User.Status.GameConfirming)
                        {
                            if (message.IsCommand(_usr.lang.YesMessage) || message.IsCommand(_usr.lang.NoMessage))
                            {
                                bool isConfirm = message.IsCommand(_usr.lang.YesMessage);
                                GetActiveGame(_usr.ActiveGameID)?.GetController(message.Chat.Id)?.ConfirmGame(isConfirm);
                            }
                        }
                        else if (_usr.status == User.Status.WaitingForRespond)
                        {
                            if (message.Text == "/stopsearching")
                            {
                                await GetActiveGame(_usr.ActiveGameID)?.GetController(message.Chat.Id)?.LeaveConfirming();
                            }
                            else
                            {
                                await _usr.Sender.SendAsync(lang => lang.ErrorPickingIncorrectCommand);
                            }
                        }
                        else if (_usr.status == User.Status.DeletingAccount)
                        {
                            if (message.IsCommand(_usr.lang.YesMessage) || message.IsCommand(_usr.lang.NoMessage))
                            {
                                var h_kb = new ReplyKeyboardHide();
                                if (message.IsCommand(_usr.lang.YesMessage))
                                {
                                    await _usr.Sender.SendAsync(lang => lang.AccountWasDeletedString, h_kb);

                                    await users.DeleteUser(message.Chat.Id);
                                }
                                else
                                {
                                    _usr.status = User.Status.Default;
                                    await _usr.Sender.SendAsync(lang => lang.YouCanceledTheActionString, h_kb);
                                }
                            }
                        }
                        else if (_usr.status == User.Status.SettingNickname)
                        {
                            if (users.NicknameExists(message.Text))
                            {
                                await _usr.Sender.SendAsync(lang => lang.NickNameIsAlreadyExists);
                            }
                            else if (message.Text.Length > 10)
                            {
                                await _usr.Sender.SendAsync(lang => lang.LengthOfNicknameError);
                            }
                            else
                            {
                                _usr.Name   = message.Text;
                                _usr.status = User.Status.Default;
                                await _usr.SaveToFile();

                                await _usr.Sender.SendAsync(lang => lang.NickNameSet);
                            }
                        }
                        else
                        {
                            var hide_keyboard = new ReplyKeyboardHide();
                            _usr.status = User.Status.Default;
                            await _usr.Sender.SendAsync(lang => lang.StatusUndefinedError, hide_keyboard);
                        }

                        offset = update.Id + 1;
                    }

                    //return;
                }
            }
            catch (Telegram.Bot.Exceptions.ApiRequestException ex)
            {
                Console.WriteLine(ex.Message);
            }
        }