Ejemplo n.º 1
0
        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);
                    }
                }
            }
        }
Ejemplo n.º 2
0
        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);
                }
            }
        }
Ejemplo n.º 3
0
        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);
                    }
                }
            }
        }
Ejemplo n.º 4
0
        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) {}
        }
Ejemplo n.º 5
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) { }
            });
        }
Ejemplo n.º 6
0
        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) {}
        }
Ejemplo n.º 7
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, "Игра начата!");
                }
            }
        }
Ejemplo n.º 8
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) {}
        }