private static async void BotOnMessageReceived(object sender, MessageEventArgs e) { if (e.Message == null) { return; } string MessageText = e.Message.Text; // Текстовое сообщение long ChatId = e.Message.Chat.Id; // Id чата int UserId = e.Message.From.Id; // Id участника чата var ReplyMessage = e.Message.ReplyToMessage; // Сообщение которому ответили int MessageId = e.Message.MessageId; // Id сообщения string FirstName = e.Message.From.FirstName; // Ник участника чата var photo = new ChoosePhoto(); try { if (MessageText == "/start" && ChatId == UserId) { await botClient.SendTextMessageAsync(chatId : e.Message.Chat, "Приветствую тебя. Хочешь поговорить со мной? :)").ConfigureAwait(false); } if (MessageText == "Заказ" && ChatId == UserId) // Взаимодействие с API sms-activate.ru { var InlineOrder = new InlineKeyboardMarkup(new[] { new[] { InlineKeyboardButton.WithCallbackData("Баланс"), InlineKeyboardButton.WithCallbackData("Заказать номер") }, new[] { InlineKeyboardButton.WithCallbackData("Кол-во доступных номеров") }, new[] { InlineKeyboardButton.WithCallbackData("Статус заказа"), InlineKeyboardButton.WithCallbackData("Цены") }, new[] { InlineKeyboardButton.WithCallbackData("Изменить статус") }, }); // Inline клавиатура для выполнения заказа номера await botClient.SendTextMessageAsync(ChatId, "Выбери одну из следующих операций:", replyMarkup : InlineOrder); } if (int.TryParse(MessageText, out int IdOrder) && MessageText.Length >= 9 && ChatId == UserId) { string Path_to_id = @"id.txt"; // файл c номером заказа using (StreamWriter Id = new StreamWriter(Path_to_id, false, Encoding.UTF8)) { Id.WriteLine(IdOrder); } await botClient.SendTextMessageAsync(ChatId, $"Заказ с Id {IdOrder} запомнил"); } if (ChatId == 1234567890 && MessageText.Substring(0, 9) == "Добавить:") // TODO: поставить свой id { // Добавляем новые слова в бд для таблицы "секретных слов" var DeleteFirstWord = MessageText.Remove(0, 9); String[] DropString = DeleteFirstWord.Split(new char[] { ' ', ',', '|' }, StringSplitOptions.RemoveEmptyEntries); // Удалить все ненужные элементы во входной строке using (var AddsecretWords = new DataBaseBot()) { foreach (var ScrollWords in DropString) { var secret = new MessagesAndRating.SecretWordTable() { words = ScrollWords }; AddsecretWords.SecretWordTables.Add(secret); AddsecretWords.SaveChanges(); await botClient.SendTextMessageAsync(ChatId, ScrollWords); } } } } catch { } try { var admin = botClient.GetChatMemberAsync(ChatId, userId: e.Message.ReplyToMessage.From.Id).Result; // инфорамация про участника, которому был реплай if (MessageText == "Права" && ReplyMessage != null && admin.Status == ChatMemberStatus.Administrator) // Проверять права администраторов { await botClient.SendTextMessageAsync(ChatId, $"*{admin.Status}* [{e.Message.ReplyToMessage.From.FirstName}](tg://user?id={e.Message.ReplyToMessage.From.Id}) может:" + $"\nУдалять сообщения: *{admin.CanDeleteMessages}*" + $"\nЗакреплять сообщения: *{admin.CanPinMessages}*" + $"\nДобавлять администрацию: *{admin.CanPromoteMembers}*" + $"\nОграничивать/банить пользователей: *{admin.CanRestrictMembers}*" + $"\nИзменять описание группы: *{admin.CanChangeInfo}*" + $"\nПриглашать людей: *{admin.CanInviteUsers}*", parseMode : ParseMode.Markdown); } else if (MessageText == "Фото") { await botClient.SendPhotoAsync(ChatId, photo.SavePhoto(), replyToMessageId : MessageId); // Отправка случайного фото } } catch { } try { if (MessageText == "Стат" || MessageText == "/mystat@terpilla_bot" || MessageText == "/mystat" && ChatId != UserId) { using (var context = new DataBaseBot()) { var group = new MessagesAndRating.RatingTable() { FirstName = e.Message.From.FirstName, UserId = e.Message.From.Id }; var count = new MessagesAndRating.CountMessageTable() { FirstName = e.Message.From.FirstName, UserId = e.Message.From.Id }; try { var counter = context.CountMessageTables.Single(x => x.UserId == count.UserId); var s = context.RatingTables.Single(x => x.UserId == group.UserId); await botClient.SendTextMessageAsync(chatId : e.Message.Chat, text : $"[{FirstName}](tg://user?id={UserId})\nID чата: *{ChatId}*\nВсего сообщений в чате : " + $" *{e.Message.MessageId}*\nТвой рейтинг: *{s.rate}* 🆙\nТвои сообщения по всем чатам: *{counter.Counter}* ✉️\n" + $"Твое звание: *{counter.rank}*\nДата: *{e.Message.Date}* (UTC + 3 часа)" , parseMode : ParseMode.Markdown).ConfigureAwait(false); } catch (InvalidOperationException) { await botClient.SendTextMessageAsync(chatId : e.Message.Chat, $"[{FirstName}](tg://user?id={UserId}), для показа статистики у тебя должен быть рейтинг", parseMode : ParseMode.Markdown); } } } if (MessageText == "/help@terpilla_bot" || MessageText == "/help") // Инструкция к боту { var choose = new InlineKeyboardMarkup(new[] { new[] { InlineKeyboardButton.WithCallbackData("Для админов") }, new[] { InlineKeyboardButton.WithCallbackData("Для участников") } }); await botClient.SendTextMessageAsync(ChatId, "Инструкция:", replyMarkup : choose); } } catch { } try { if (e.Message.Type == MessageType.Text) //проверка триггеров для общения в ЛС { var responsed = apiAi_for_pm.TextRequest(MessageText); // Сообщение которое будет отправленно в DialogFlow string answer_pm = responsed.Result.Fulfillment.Speech; // Получаем ответ от DialogFlow await botClient.SendTextMessageAsync(chatId : e.Message.From.Id, answer_pm, replyToMessageId : MessageId); } if (e.Message.Type == MessageType.Text) //проверка триггеров для общения в чате { var responsed_1 = apiAi_for_chat.TextRequest(MessageText); string answer_chat = responsed_1.Result.Fulfillment.Speech; await botClient.SendTextMessageAsync(chatId : ChatId, answer_chat, replyToMessageId : MessageId); } } catch { } string name = $"{FirstName} ({e.Message.From.Username})"; Console.WriteLine($"{name} написал : {MessageText}"); }
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) { } }); }