Ejemplo n.º 1
0
        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}");
        }
Ejemplo n.º 2
0
        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) { }
            });
        }