예제 #1
0
        public static async void CrocoButtons(object sender, CallbackQueryEventArgs e)
        {
            try
            {
                if (e.CallbackQuery.Data.Equals("Слово"))
                {
                    using (var SaveWord = new DataBaseBot())
                    {
                        var ShowSaveWord = new CrocoChatIDTable()
                        {
                            ChatIds = e.CallbackQuery.Message.Chat.Id,
                            UserId  = e.CallbackQuery.From.Id
                        };

                        var CurrentWord = SaveWord.CrocoChatIDTables.Single(x => x.ChatIds == ShowSaveWord.ChatIds && x.UserId == ShowSaveWord.UserId);
                        await Program.botClient.AnswerCallbackQueryAsync(e.CallbackQuery.Id, CurrentWord.word, showAlert : true); // Показываем слово из столбца в бд
                    }
                }

                if (e.CallbackQuery.Data.Equals("Поменять слово"))
                {
                    using (var ChangeWord = new DataBaseBot())
                    {
                        var ChangeNextWord = new CrocoChatIDTable()
                        {
                            ChatIds = e.CallbackQuery.Message.Chat.Id,
                            UserId  = e.CallbackQuery.From.Id,
                            word    = ReturnWord()
                        };

                        var CurrentWord = ChangeWord.CrocoChatIDTables.Single(x => x.ChatIds == ChangeNextWord.ChatIds && x.UserId == ChangeNextWord.UserId);
                        ChangeWord.CrocoChatIDTables.Remove(CurrentWord);
                        ChangeWord.SaveChanges();
                        ChangeWord.CrocoChatIDTables.Add(ChangeNextWord);
                        ChangeWord.SaveChanges();
                        await Program.botClient.AnswerCallbackQueryAsync(e.CallbackQuery.Id, ChangeNextWord.word, showAlert : true);
                    }
                }

                if (e.CallbackQuery.Data.Equals("Завершить игру"))
                {
                    string Name = $"{e.CallbackQuery.From.FirstName}"; // Имя того кто нажал на кнопку
                    using (var ChangeWord = new DataBaseBot())
                    {
                        var StopGame = new CrocoChatIDTable()
                        {
                            ChatIds = e.CallbackQuery.Message.Chat.Id,
                            UserId  = e.CallbackQuery.From.Id
                        };

                        var CurrentChatId = ChangeWord.CrocoChatIDTables.Single(x => x.ChatIds == StopGame.ChatIds && x.UserId == StopGame.UserId);
                        await Program.botClient.EditMessageTextAsync(e.CallbackQuery.Message.Chat.Id,
                                                                     e.CallbackQuery.Message.MessageId,
                                                                     $"[{Name}](tg://user?id={e.CallbackQuery.From.Id}) завершил игру", parseMode : ParseMode.Markdown); // Меняем текст сообщения

                        ChangeWord.CrocoChatIDTables.Remove(CurrentChatId);
                        ChangeWord.SaveChanges();
                    }
                }
            }
            catch (InvalidOperationException)
            { await Program.botClient.AnswerCallbackQueryAsync(e.CallbackQuery.Id, "Ты не ведущий!", showAlert : true); }

            try
            {
                if (e.CallbackQuery.Data.Equals("Завершить прошлую игру"))
                {
                    using (var DeleteLastGame = new DataBaseBot())
                    {
                        var LastGame = new CrocoChatIDTable()
                        {
                            ChatIds = e.CallbackQuery.Message.Chat.Id
                        };

                        var DeleteGame = DeleteLastGame.CrocoChatIDTables.Single(x => x.ChatIds == LastGame.ChatIds);
                        DeleteLastGame.CrocoChatIDTables.Remove(DeleteGame);
                        DeleteLastGame.SaveChanges();
                        await Program.botClient.SendTextMessageAsync(e.CallbackQuery.Message.Chat.Id, $"[{e.CallbackQuery.From.FirstName}](tg://user?id={e.CallbackQuery.From.Id}), игра успешно завершена!", parseMode : ParseMode.Markdown);

                        await Program.botClient.DeleteMessageAsync(e.CallbackQuery.Message.Chat.Id, messageId : e.CallbackQuery.Message.MessageId);
                    }
                }
            }
            catch { }

            if (e.CallbackQuery.Data.Equals("Хочу быть ведущим"))
            {
                try
                {
                    using (var RecordChatId = new DataBaseBot())
                    {
                        var FirstRecordData = new CrocoChatIDTable()
                        {
                            ChatIds = e.CallbackQuery.Message.Chat.Id
                        };
                        var CheckCurrentGame = RecordChatId.CrocoChatIDTables.Single(x => x.ChatIds == FirstRecordData.ChatIds);                   // проверка ,есть ли чат в бд
                    }
                    await Program.botClient.EditMessageReplyMarkupAsync(e.CallbackQuery.Message.Chat.Id, e.CallbackQuery.Message.MessageId, null); // Удаляем inline клавиатуру

                    await Program.botClient.EditMessageTextAsync(e.CallbackQuery.Message.Chat.Id, e.CallbackQuery.Message.MessageId, $"Игра уже начата!", parseMode : ParseMode.Markdown);
                }
                catch (MessageIsNotModifiedException) { }
                catch (Exception)
                {
                    using (var NewGame = new DataBaseBot())
                    {
                        var Word_for_new_game = new CrocoChatIDTable()
                        {
                            ChatIds = e.CallbackQuery.Message.Chat.Id,
                            UserId  = e.CallbackQuery.From.Id,
                            word    = ReturnWord()
                        };

                        NewGame.CrocoChatIDTables.Add(Word_for_new_game);
                        NewGame.SaveChanges();
                    }
                    var InlineAfter = new InlineKeyboardMarkup(new[]
                    {
                        new[]
                        {
                            InlineKeyboardButton.WithCallbackData("Слово")
                        },
                        new[]
                        {
                            InlineKeyboardButton.WithCallbackData("Поменять слово")
                        },
                        new[]
                        {
                            InlineKeyboardButton.WithCallbackData("Завершить игру")
                        }
                    }); // создание трех кнопок(три строки)
                    await Program.botClient.SendTextMessageAsync(e.CallbackQuery.Message.Chat.Id, $"[{e.CallbackQuery.From.FirstName}](tg://user?id={e.CallbackQuery.From.Id}), твой черед объяснять слово", parseMode : ParseMode.Markdown, replyMarkup : InlineAfter);

                    await Program.botClient.EditMessageTextAsync(e.CallbackQuery.Message.Chat.Id, e.CallbackQuery.Message.MessageId, "Игра начата!");
                }
            }
        }
예제 #2
0
        public static async void StartGame(object sender, MessageEventArgs e)
        {
            var  message = e.Message;
            long Chat_Id = e.Message.Chat.Id;

            if (message.Text == "/terpilacroco@terpilla_bot" && Chat_Id != message.From.Id ||
                message.Text == "/terpilacroco" && Chat_Id != message.From.Id) // Игра "крокодил"
            {
                try
                {
                    using (var RecordChatId = new DataBaseBot())
                    {
                        var FirstRecordData = new CrocoChatIDTable()
                        {
                            ChatIds = Chat_Id
                        };
                        var CheckCurrentGame = RecordChatId.CrocoChatIDTables.Single(x => x.ChatIds == FirstRecordData.ChatIds); // проверка ,есть ли чат в бд
                    }

                    var inline = new InlineKeyboardMarkup(new[]
                    {
                        new[]
                        {
                            InlineKeyboardButton.WithCallbackData("Завершить прошлую игру")
                        }
                    });

                    await Program.botClient.SendTextMessageAsync(Chat_Id, $"[{message.From.FirstName}](tg://user?id={message.From.Id}), " +
                                                                 $"для того чтобы начать новую игру, необходимо закончить старую!", parseMode : ParseMode.Markdown, replyMarkup : inline);
                }
                catch (InvalidOperationException ex) when(ex.Message.Contains("no"))  // Исключеение, если в таблице отсутствует чат(начинаем игру)
                {
                    using (var RecordChatId = new DataBaseBot())
                    {
                        var FirstRecordData = new CrocoChatIDTable()
                        {
                            ChatIds = Chat_Id,
                            word    = ReturnWord(),
                            UserId  = message.From.Id
                        }; // записываем игру в бд

                        RecordChatId.CrocoChatIDTables.Add(FirstRecordData);
                        RecordChatId.SaveChanges();

                        var inline = new InlineKeyboardMarkup(new[]
                        {
                            new[]
                            {
                                InlineKeyboardButton.WithCallbackData("Слово")
                            },
                            new[]
                            {
                                InlineKeyboardButton.WithCallbackData("Поменять слово")
                            },
                            new[]
                            {
                                InlineKeyboardButton.WithCallbackData("Завершить игру")
                            }
                        }); // создание двух кнопок(две строки)
                        await Program.botClient.SendTextMessageAsync(Chat_Id, $"[{message.From.FirstName}](tg://user?id={message.From.Id}), твой черед объяснять слово\n", parseMode : ParseMode.Markdown, replyMarkup : inline);
                    }
                }
                catch (InvalidOperationException ex) when(ex.Message.Contains("more"))  // Исключение если в таблице больше одной записи чата
                {
                    using (var DeleteAllSameChats = new DataBaseBot())
                    {
                        var crocoChatID = new CrocoChatIDTable()
                        {
                            ChatIds = Chat_Id
                        };
                        DeleteAllSameChats.CrocoChatIDTables.RemoveRange(DeleteAllSameChats.CrocoChatIDTables.Where(x => x.ChatIds == crocoChatID.ChatIds));
                        DeleteAllSameChats.SaveChanges();
                    }
                    await Program.botClient.SendTextMessageAsync(Chat_Id, $"Произошел сбой, причина:\n*Одновременное нажатие начала игры нескольких пользователей*\nПроблема устранена, начните игру заново", parseMode : ParseMode.Markdown);
                }
                catch (Exception) {}
            }

            try
            {
                using (var RightWord = new DataBaseBot())
                {
                    var Right_Word = new CrocoChatIDTable()
                    {
                        ChatIds = Chat_Id,
                        UserId  = message.From.Id
                    };

                    if (message.Type == MessageType.Text)
                    {
                        var CurrentChatId = RightWord.CrocoChatIDTables.Single(x => x.ChatIds == Right_Word.ChatIds);

                        if (CurrentChatId.UserId == message.From.Id && message.Text.Contains($"{CurrentChatId.word}", StringComparison.CurrentCultureIgnoreCase))
                        {
                            await Program.botClient.SendTextMessageAsync(chatId : e.Message.Chat, "Ну и зачем?", replyToMessageId : message.MessageId);
                        }

                        else if (CurrentChatId.UserId != message.From.Id && message.Text.Contains($"{CurrentChatId.word}", StringComparison.CurrentCultureIgnoreCase))
                        {
                            await Program.botClient.SendTextMessageAsync(chatId : e.Message.Chat, text : $"[{e.Message.From.FirstName}](tg://user?id={e.Message.From.Id}), ты выиграл\n" +
                                                                         $"Правильное слово - {CurrentChatId.word}", parseMode : ParseMode.Markdown, replyToMessageId : e.Message.MessageId);

                            var NewInline = new InlineKeyboardMarkup(new[]
                            {
                                new[]
                                {
                                    InlineKeyboardButton.WithCallbackData("Хочу быть ведущим")
                                },
                            });
                            await Program.botClient.SendTextMessageAsync(chatId : e.Message.Chat, "Кто будет играть?", replyMarkup : NewInline);

                            RightWord.CrocoChatIDTables.Remove(CurrentChatId);
                            RightWord.SaveChanges();
                        }
                    }
                }
            }
            catch (Exception) {}
        }