public static async void StartEvent(object sender, MessageEventArgs e) { var message = e.Message; long Chat_Id = e.Message.Chat.Id; if (message.Text == "/start_event@terpilla_bot" || message.Text == "/start_event" && Chat_Id != message.From.Id) { using (var CheckGame = new DataBaseBot()) { var CurrentGame = new RollEventTable() { ChatIds = Chat_Id }; var stopInline = new InlineKeyboardMarkup(new[] { new[] { InlineKeyboardButton.WithCallbackData("Остановить розыгрыш ⛔️") } }); try { CheckGame.rollEventTables.Single(x => x.ChatIds == CurrentGame.ChatIds); // Проверка на наличие чата в бд await Program.botClient.SendTextMessageAsync(Chat_Id, "Для начала нового розыграша, завершите старый!", replyToMessageId : message.MessageId, replyMarkup : stopInline); } catch (InvalidOperationException ex) when(ex.Message.Contains("no")) { var inline = new InlineKeyboardMarkup(new[] { new[] { InlineKeyboardButton.WithCallbackData("Ролл 🎲"), InlineKeyboardButton.WithCallbackData("Остановить розыгрыш ⛔️") } }); await Program.botClient.SendTextMessageAsync(Chat_Id, $"Начало розыграша в чате *{message.Chat.Title}*", replyToMessageId : message.MessageId, parseMode : ParseMode.Markdown, replyMarkup : inline); } catch (InvalidOperationException ex) when(ex.Message.Contains("more")) { await Program.botClient.SendTextMessageAsync(Chat_Id, "Для начала нового розыграша, завершите старый!", replyToMessageId : message.MessageId, replyMarkup : stopInline); } } } }
public static async void RollButtons(object sender, CallbackQueryEventArgs e) { if (e.CallbackQuery.Data == ("Ролл 🎲")) { using (var RollGame = new DataBaseBot()) { Random cube = new Random(); RollEventTable UserData = new RollEventTable() { FirstName = e.CallbackQuery.From.FirstName, UserId = e.CallbackQuery.From.Id, ChatIds = e.CallbackQuery.Message.Chat.Id, Results = cube.Next(1, 100) }; try { var CheckCurrentUserId = RollGame.rollEventTables.Single(x => x.ChatIds == UserData.ChatIds && x.UserId == UserData.UserId); // проверка ,есть ли чат и пользователь в бд await Program.botClient.AnswerCallbackQueryAsync(e.CallbackQuery.Id, "Ты уже бросал😜", showAlert : true); } catch (InvalidOperationException ex) when(ex.Message.Contains("no")) // Если в бд нет пользователя { RollGame.rollEventTables.Add(UserData); RollGame.SaveChanges(); var sort = RollGame.rollEventTables.AsNoTracking().OrderByDescending(x => x.Results).Select(x => new { x.FirstName, x.Results, x.ChatIds }).Where(x => x.ChatIds == e.CallbackQuery.Message.Chat.Id); var sb = new StringBuilder(); var sb2 = new StringBuilder(); int i = 1; foreach (var a in sort) { if (i == 1) { sb.Append($"🥇 {a.FirstName}: {a.Results}\n"); } if (i == 2) { sb.Append($"🥈 {a.FirstName}: {a.Results}\n"); } if (i == 3) { sb.Append($"🥉 {a.FirstName}: {a.Results}\n"); } else if (i > 3) { sb2.Append($"{a.FirstName}: {a.Results}\n"); } i++; } var inline = new InlineKeyboardMarkup(new[] { new[] { InlineKeyboardButton.WithCallbackData("Ролл 🎲"), InlineKeyboardButton.WithCallbackData("Остановить розыгрыш ⛔️") } }); await Program.botClient.EditMessageTextAsync(e.CallbackQuery.Message.Chat.Id, messageId : e.CallbackQuery.Message.MessageId, text : $"Результаты розыграша!\n\nПобедители:\n{sb}\nОстальные участники:\n{sb2}", replyMarkup : inline); } catch (InvalidOperationException ex) when(ex.Message.Contains("more")) { RollGame.rollEventTables.RemoveRange(RollGame.rollEventTables.Where(x => x.ChatIds == UserData.ChatIds && x.UserId == UserData.UserId)); RollGame.SaveChanges(); } } } if (e.CallbackQuery.Data == ("Остановить розыгрыш ⛔️")) { using (var DeleteAllLines = new DataBaseBot()) { var StopGame = new RollEventTable() { ChatIds = e.CallbackQuery.Message.Chat.Id }; var sort = DeleteAllLines.rollEventTables.AsNoTracking().OrderByDescending(x => x.Results).Select(x => new { x.FirstName, x.Results, x.ChatIds }).Where(x => x.ChatIds == e.CallbackQuery.Message.Chat.Id); var sb = new StringBuilder(); var sb2 = new StringBuilder(); int i = 1; foreach (var a in sort) { if (i == 1) { sb.Append($"🥇 {a.FirstName}: {a.Results}\n"); } if (i == 2) { sb.Append($"🥈 {a.FirstName}: {a.Results}\n"); } if (i == 3) { sb.Append($"🥉 {a.FirstName}: {a.Results}\n"); } else if (i > 3) { sb2.Append($"{a.FirstName}: {a.Results}\n"); } i++; } DeleteAllLines.rollEventTables.RemoveRange(DeleteAllLines.rollEventTables.Where(x => x.ChatIds == StopGame.ChatIds)); DeleteAllLines.SaveChanges(); await Program.botClient.EditMessageTextAsync(e.CallbackQuery.Message.Chat.Id, messageId : e.CallbackQuery.Message.MessageId, text : $"Победители:\n{sb}\nОстальные участники:\n{sb2}\n*Розыгрыш окончен*!\n\n", parseMode : ParseMode.Markdown); } } }
public static async void RestrictsMedia(object sender, MessageEventArgs e) { var message = e.Message; long Chat_Id = e.Message.Chat.Id; if (message.Type == MessageType.Sticker) { using (var restrictSticker = new DataBaseBot()) { var stiker = new RestrictMediaTable() { MediaId = message.Sticker.FileUniqueId, // уникальный id стикера в стикерпаке(если этот стикер в другом стикерпаке, id у него будет другой) Chat_Id = message.Chat.Id }; try { restrictSticker.restrictMediaTables.Single(x => x.MediaId == stiker.MediaId && x.Chat_Id == stiker.Chat_Id);// проверяем, есть ли стикер в бд await Program.botClient.SendTextMessageAsync(Chat_Id, $"[{message.From.FirstName}](tg://user?id={message.From.Id}), этот стикер запрещен", parseMode : ParseMode.Markdown); await Program.botClient.DeleteMessageAsync(Chat_Id, messageId : message.MessageId); } catch { } } } if (message.Type == MessageType.Document) { using (var restrictGif = new DataBaseBot()) { var gif = new RestrictMediaTable() { MediaId = message.Document.FileUniqueId, Chat_Id = message.Chat.Id }; try { restrictGif.restrictMediaTables.Single(x => x.MediaId == gif.MediaId && x.Chat_Id == gif.Chat_Id); // проверяем есть ли гиф в бд await Program.botClient.SendTextMessageAsync(Chat_Id, $"[{message.From.FirstName}](tg://user?id={message.From.Id}), эта гиф запрещена", parseMode : ParseMode.Markdown); await Program.botClient.DeleteMessageAsync(Chat_Id, messageId : message.MessageId); } catch { } } } var admin = Program.botClient.GetChatMemberAsync(Chat_Id, userId: message.From.Id).Result; if (message.ReplyToMessage != null && message.ReplyToMessage.Type == MessageType.Sticker && String.Equals(message.Text, ".с", StringComparison.CurrentCultureIgnoreCase) && admin.Status == ChatMemberStatus.Administrator || message.ReplyToMessage != null && message.ReplyToMessage.Type == MessageType.Sticker && String.Equals(message.Text, ".с", StringComparison.CurrentCultureIgnoreCase) && admin.Status == ChatMemberStatus.Creator) { using (var restrict = new DataBaseBot()) { var restrictMedia = new RestrictMediaTable() { MediaId = message.ReplyToMessage.Sticker.FileUniqueId, Chat_Id = message.Chat.Id }; try { restrict.restrictMediaTables.Single(x => x.MediaId == restrictMedia.MediaId && x.Chat_Id == restrictMedia.Chat_Id); // Проверяем наличие стикера в чс в определенном чате(если его хотят занести повторно) await Program.botClient.SendTextMessageAsync(Chat_Id, "Этот стикер уже в бане"); } catch (InvalidOperationException) { restrict.restrictMediaTables.Add(restrictMedia); // Заносим стикер в чс restrict.SaveChanges(); await Program.botClient.SendTextMessageAsync(Chat_Id, "Стикер занесен в черный список"); await Program.botClient.DeleteMessageAsync(Chat_Id, messageId : message.ReplyToMessage.MessageId); } } } if (message.ReplyToMessage != null && message.ReplyToMessage.Type == MessageType.Document && String.Equals(message.Text, ".г", StringComparison.CurrentCultureIgnoreCase) && admin.Status == ChatMemberStatus.Administrator || message.ReplyToMessage != null && message.ReplyToMessage.Type == MessageType.Document && String.Equals(message.Text, ".г", StringComparison.CurrentCultureIgnoreCase) && admin.Status == ChatMemberStatus.Creator) { using (var restrict = new DataBaseBot()) { var restrictMedia = new RestrictMediaTable() { MediaId = message.ReplyToMessage.Document.FileUniqueId, Chat_Id = message.Chat.Id }; try { restrict.restrictMediaTables.Single(x => x.MediaId == restrictMedia.MediaId && x.Chat_Id == restrictMedia.Chat_Id); await Program.botClient.SendTextMessageAsync(Chat_Id, "Эта гиф уже в бане"); } catch (InvalidOperationException) { restrict.restrictMediaTables.Add(restrictMedia); restrict.SaveChanges(); await Program.botClient.SendTextMessageAsync(Chat_Id, "Гиф занесена в черный список"); await Program.botClient.DeleteMessageAsync(Chat_Id, messageId : message.ReplyToMessage.MessageId); } } } }
public static async void Rating(object sender, MessageEventArgs e) { var message = e.Message; long Chat_Id = e.Message.Chat.Id; if (message.Text is null) { return; } if (message.ReplyToMessage != null && message.Text == "+" && message.ReplyToMessage.From.Id != message.From.Id || message.ReplyToMessage != null && message.Text.Contains("спасибо", StringComparison.CurrentCultureIgnoreCase) && message.ReplyToMessage.From.Id != message.From.Id) { using (var context = new DataBaseBot()) { var UserData = new RatingTable() { FirstName = message.ReplyToMessage.From.FirstName, UserId = message.ReplyToMessage.From.Id, ChatId = Chat_Id, rate = 1, }; try { var Record = context.RatingTables.Single(x => x.UserId == UserData.UserId); // Проверяем, если ли в бд пользователь Record.rate += 1; // увеличиваем значение рейтинга на 1 context.SaveChanges(); await Program.botClient.SendTextMessageAsync(Chat_Id, $"[{message.From.FirstName}](tg://user?id={message.From.Id})\nувеличил рейтинг\n[{message.ReplyToMessage.From.FirstName}](tg://user?id={message.ReplyToMessage.From.Id}) *{Record.rate}* 🆙", parseMode : ParseMode.Markdown); } catch (InvalidOperationException) { context.RatingTables.Add(UserData); // записываем пользователя если его нет в бд, начисляя 1 рейтинг context.SaveChanges(); await Program.botClient.SendTextMessageAsync(Chat_Id, $"[{message.From.FirstName}](tg://user?id={message.From.Id})\nувеличил рейтинг\n[{message.ReplyToMessage.From.FirstName}](tg://user?id={message.ReplyToMessage.From.Id}) *1* 🆙", parseMode : ParseMode.Markdown); } catch (Exception) {} } } try { if (message.Text == "/localrate@terpilla_bot" && Chat_Id != message.From.Id || message.Text == "/localrate" && Chat_Id != message.From.Id) // локальный рейтинг(только для людей из чата) { using (var TopLocalMessage = new DataBaseBot()) { var sort_rate = TopLocalMessage.RatingTables.AsNoTracking().OrderByDescending(x => x.rate).Select(x => new { x.FirstName, x.rate, x.UserId, x.ChatId }).ToList(); // Сортировка по убыванию int i = 1; var sb = new StringBuilder(); foreach (var list in sort_rate) { if (list.ChatId == Chat_Id) { sb.Append($"*{i}.* [{list.FirstName}](tg://user?id={list.UserId}) - *{list.rate} 🆙 рейтинга*\n"); i++; } if (i == 11) { break; } } await Program.botClient.SendTextMessageAsync(Chat_Id, "_Топ-10 рейтинговых пользователей в чате_\n\n" + sb.ToString(), parseMode : ParseMode.Markdown); } } if (message.Text.Contains(".топР", StringComparison.CurrentCultureIgnoreCase)) // Рейтинг всех пользователей { using (var TopRate = new DataBaseBot()) { var sort_rate = TopRate.RatingTables.AsNoTracking().OrderByDescending(x => x.rate).Select(x => new { x.FirstName, x.rate, x.UserId }).ToList(); int i = 1; var sb = new StringBuilder(); var sb2 = new StringBuilder(); foreach (var list in sort_rate) { if (i >= 1 && i <= 10) { sb.Append($"*{i}.* [{list.FirstName}](tg://user?id={list.UserId}) - *{list.rate} 🆙 рейтинга*\n");// топ-10 } if (message.From.Id == list.UserId && i > 10) { sb2.Append($"[{list.FirstName}](tg://user?id={list.UserId}), ты на *{i}* месте - *{list.rate} 🆙 рейтинга*"); // узнать на каком месте пользователь break; } i++; } await Program.botClient.SendTextMessageAsync(Chat_Id, $"_Глобальный топ рейтинговых пользователей_\n\n{sb}\n{sb2}", parseMode : ParseMode.Markdown); } } } catch (Exception) {} }
public static void TextMessages(object sender, MessageEventArgs e) { Task.Run(async() => { var message = e.Message; long Chat_Id = e.Message.Chat.Id; if (message.Text is null) { return; } Dictionary <int, string> ranks = new Dictionary <int, string>() { { 60, "Новичок (lvl 1) 🔰" }, { 900, "Дилетант (lvl 2) 🔰" }, { 2000, "Люмпен-пролетарий (lvl 3) 👷♂️" }, { 3500, "Барыга (lvl 4) 😐" }, { 5000, "Бронзовый терпила(lvl 5) 🥉" }, { 7000, "Местный гопник (lvl 6) 🦾" }, { 9500, "Средний класс (lvl 7) 👮🏻♂️" }, { 12000, "Интеллигенция (lvl 8) 🎖" }, { 15000, "Боярин (lvl 9) 👨🏻⚖️" }, { 18000, "Серебренный терпила (lvl 10) 🥈" }, { 22000, "Золотой терпила (lvl 11) 🥇" }, { 26000, "Истинный терпила (lvl 12) 🏅" }, { 30000, "Терпилоид (lvl 13) 🔥" }, { 35000, "Терпиларожденный (lvl 14) 🏆" } }; // Список "званий" для участников if (message != null) { using (var countMessage = new DataBaseBot()) { var UserData = new CountMessageTable() { FirstName = message.From.FirstName, UserId = message.From.Id, ChatId = message.Chat.Id, Counter = 1 }; try { var check_User = countMessage.CountMessageTables.Single(x => x.UserId == UserData.UserId); // Проверяем, есть ли пользователь в бд check_User.Counter += 1; // если есть, то насчитываем ему +1 сообщение в бд countMessage.SaveChanges(); check_User.rank = ranks[check_User.Counter]; // даем новое звание, если количество сообщений совпадает с ключем из словаря await Program.botClient.SendTextMessageAsync(Chat_Id, $"[{message.From.FirstName}](tg://user?id={message.From.Id}), твое звание повышено, теперь ты - *{ranks[check_User.Counter]}*", parseMode: ParseMode.Markdown); countMessage.SaveChanges(); } catch (InvalidOperationException) { countMessage.CountMessageTables.Add(UserData);// Записываем пользователя впервые countMessage.SaveChanges(); } catch (Exception) { } } } if (message.Text != null && message.ForwardFrom is null && message.ForwardFromChat is null) { using (var SecretWords = new DataBaseBot()) { try { var secret = new SecretWordTable() { words = message.Text }; var Rate = new RatingTable() { FirstName = message.From.FirstName, UserId = message.From.Id, }; String[] DropString = secret.words.Split(new char[] { ' ', '?', '!', '.', ',' }, StringSplitOptions.RemoveEmptyEntries); // удалем вероятные символы для получения слова foreach (var UserString in DropString) { string CaseWord = SecretWords.SecretWordTables.FirstOrDefault(x => x.words == UserString).ToString(); // Возвращаем первое подходящее слово из списка var RemoveSecretWord = SecretWords.SecretWordTables.FirstOrDefault(x => x.words == UserString); // Берем тоже слово для дальнейшего удаления var AddRate = SecretWords.RatingTables.Single(x => x.UserId == Rate.UserId); var RandRate = new Random(); int value = RandRate.Next(1, 19); int LastValue = AddRate.rate + value; // Добавляем рейтинг к пользователю, который нашел слово AddRate.rate = LastValue; SecretWords.SaveChanges(); await Program.botClient.SendTextMessageAsync(Chat_Id, $"Поздравляю, [{message.From.FirstName}](tg://user?id={message.From.Id}), ты нашел тайное слово и получил *{value}* 🆙 рейтинга\nПродолжай общаться и получай больше рейтинга!", parseMode: ParseMode.Markdown); SecretWords.SecretWordTables.Remove(RemoveSecretWord); SecretWords.SaveChanges(); } } catch (Exception) {} } } try { if (message.Text == "/localmessage@terpilla_bot" && Chat_Id != message.From.Id || message.Text == "/localmessage" && Chat_Id != message.From.Id) // узнаем локальный рейтинг { using (var TopLocalRate = new DataBaseBot()) { var sort_count_rate = TopLocalRate.CountMessageTables.AsNoTracking().OrderByDescending(x => x.Counter).Select(x => new { x.FirstName, x.Counter, x.UserId, x.ChatId }).ToList(); // сортируем в порядке спадания int i = 1; var sb = new StringBuilder(); foreach (var list in sort_count_rate) { if (list.ChatId == Chat_Id) { sb.Append($"*{i}.* [{list.FirstName}](tg://user?id={list.UserId}) - *{list.Counter} ✉️ сообщений*\n"); i++; } if (i == 11) { break; } } await Program.botClient.SendTextMessageAsync(Chat_Id, "_Топ-10 болтунов в чате_ \n\n" + sb.ToString(), parseMode: ParseMode.Markdown); } } if (message.Text.Contains(".топС", StringComparison.CurrentCultureIgnoreCase)) // узнаем глобальный рейтинг { using (var TopMessages = new DataBaseBot()) { var sort_counters = TopMessages.CountMessageTables.AsNoTracking().OrderByDescending(x => x.Counter).Select(x => new { x.FirstName, x.Counter, x.UserId }).ToList(); int i = 1; var sb2 = new StringBuilder(); var sb = new StringBuilder(); foreach (var list in sort_counters) { if (i >= 1 && i <= 10) { sb.Append($"*{i}.* [{list.FirstName}](tg://user?id={list.UserId}) - *{list.Counter} ✉️ сообщений*\n"); // топ-10 } if (message.From.Id == list.UserId && i > 10) { sb2.Append($"[{list.FirstName}](tg://user?id={list.UserId}), ты на *{i}* месте - *{list.Counter} ✉️ сообщений*"); // узнать на каком месте пользователь break; } i++; } await Program.botClient.SendTextMessageAsync(Chat_Id, $"_Глобальный топ болтунов_\n\n{sb}\n{sb2}", parseMode: ParseMode.Markdown); } } } catch (Exception) { } }); }
public static async void SendReport(object sender, MessageEventArgs e) { var message = e.Message; long Chat_Id = e.Message.Chat.Id; try { var admins = await Program.botClient.GetChatAdministratorsAsync(Chat_Id); // получение списка админов var admin2 = Program.botClient.GetChatMemberAsync(Chat_Id, userId: message.From.Id).Result; // Проверка участника чата using (var Add_or_update_admins = new DataBaseBot()) { if (message.Text == "/update_admins@terpilla_bot" && admin2.Status == ChatMemberStatus.Administrator && Chat_Id != message.From.Id || message.Text == "/update_admins@terpilla_bot" && admin2.Status == ChatMemberStatus.Creator && Chat_Id != message.From.Id || message.Text == "/update_admins" && admin2.Status == ChatMemberStatus.Administrator && Chat_Id != message.From.Id || message.Text == "/update_admins" && admin2.Status == ChatMemberStatus.Creator && Chat_Id != message.From.Id) // Проверяем, обновляем список администраторов { var sb = new StringBuilder(); foreach (var list in admins) { sb.Append($"[{list.User.FirstName}](tg://user?id={list.User.Id})\n"); // Склеиваим весь список админов в одно сообщение var CheckAdmins = new AdminTable() { AdminId = list.User.Id, Chatid = Chat_Id, Firstname = list.User.FirstName }; try { var check = Add_or_update_admins.AdminTables.Single(x => x.AdminId == CheckAdmins.AdminId); // Проверяем, есть ли админ(id) в бд if (check.Chatid != Chat_Id) { check.ChatId2 = Chat_Id; // Если есть и в другом чате этот же человек тоже админ, записывает в другой столбец для ChatId2 Add_or_update_admins.SaveChanges(); } } catch (InvalidOperationException) { Add_or_update_admins.AdminTables.Add(CheckAdmins); // Записываем экземпляр админа впервые Add_or_update_admins.SaveChanges(); } } await Program.botClient.SendTextMessageAsync(Chat_Id, $"Список админов обновлен:\n{sb}", ParseMode.Markdown); } if (message.Text == "/update_admins@terpilla_bot" && admin2.Status == ChatMemberStatus.Member && Chat_Id != message.From.Id || message.Text == "/update_admins" && admin2.Status == ChatMemberStatus.Member && Chat_Id != message.From.Id) // Предупреждение что участник не админ { await Program.botClient.SendTextMessageAsync(Chat_Id, $"Эта команда доступна только администратору!", ParseMode.Markdown); } if (message.ReplyToMessage != null && message.Text == "!админ") { var SendMessageAdmin = new AdminTable() { }; var listAdmins = Add_or_update_admins.AdminTables.Select(x => new { x.AdminId, x.Chatid, x.ChatId2 }).Where(x => x.Chatid == Chat_Id || x.ChatId2 == Chat_Id); foreach (var EachAdmin in listAdmins) { try { await Program.botClient.SendTextMessageAsync(chatId : EachAdmin.AdminId, $"Пользователь: [{message.From.FirstName}](tg://user?id={message.From.Id})\nпожаловался на участника: " + $"[{message.ReplyToMessage.From.FirstName}](tg://user?id={message.ReplyToMessage.From.Id}) из-за сообщения: \n*{message.ReplyToMessage.Text}*\n " + $"https://t.me/c/{Chat_Id.ToString().Remove(0, 4)}/{message.ReplyToMessage.MessageId}" + $"\n\n❗️Внимание: чтобы работала ссылка, у вас должна быть *супергруппа(SuperGroup)*" , ParseMode.Markdown); } catch { } } await Program.botClient.SendTextMessageAsync(Chat_Id, "Жалоба была отправленна администраторам", replyToMessageId : message.MessageId); } } } catch (Exception) {} }
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, "Игра начата!"); } } }
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) {} }