private void _WarnUser(TelegramBotClient client, Message msg, User user, int replyMessageId)
        {
            var member = BotDbContext.Get().GetMember(msg.Chat.Id, user.Id);

            member.Warns++;
            if (member.Warns >= 3)
            {
                _ban?.Invoke(client, msg.Chat, user, replyMessageId, DateTime.UtcNow + TimeSpan.FromDays(3));
            }
            else
            {
                var text = $"{user.GetMension()} предупреждение №{member.Warns}!\n" +
                           $"Бан при получении 3-х предупреждений!";
                client.SendTextMessageAsync(msg.Chat.Id, text, Telegram.Bot.Types.Enums.ParseMode.Markdown, replyToMessageId: replyMessageId);
                BotDbContext.Get().Entry(member).State = System.Data.Entity.EntityState.Modified;
                BotDbContext.Get().SaveChanges();
            }
        }
        public override void Execute(TelegramBotClient client, Message msg)
        {
            string text = string.Empty;

            if (msg.ReplyToMessage != null)
            {
                text = msg.ReplyToMessage.Text;
            }
            else if (msg.Text.Contains("\n"))
            {
                text = msg.Text.Replace("/agreement\n", "");
            }
            else
            {
                return;
            }

            var member = client.GetChatMemberAsync(msg.Chat.Id, msg.From.Id).Result;

            if (member.Status == ChatMemberStatus.Administrator || member.Status == ChatMemberStatus.Creator)
            {
                var agreement = BotDbContext.Get().Agreements.FirstOrDefault(a => a.ChatId.Equals(msg.Chat.Id));
                if (agreement is null)
                {
                    agreement = new Agreement()
                    {
                        Text   = text,//msg.ReplyToMessage.Text,
                        ChatId = msg.Chat.Id
                    };

                    BotDbContext.Get().Agreements.Add(agreement);
                    BotDbContext.Get().Entry(agreement).State = System.Data.Entity.EntityState.Added;
                    BotDbContext.Get().SaveChangesAsync();
                }
                else
                {
                    agreement.Text = text; //msg.Text;
                    BotDbContext.Get().Entry(agreement).State = System.Data.Entity.EntityState.Modified;
                    BotDbContext.Get().SaveChangesAsync();
                }

                client.SendTextMessageAsync(msg.Chat.Id, "Правила чата были изменены.", replyToMessageId: msg.MessageId);
            }
        }
        public override void Execute(TelegramBotClient client, Message msg)
        {
            if (msg.Entities.Any(e => e.Type == MessageEntityType.Mention))
            {
                for (int i = 0; i < msg.Entities.Length; i++)
                {
                    var entity = msg.Entities[i];
                    if (entity.Type != MessageEntityType.Mention)
                    {
                        continue;
                    }

                    var user = entity.User;
                    if (user != null)
                    {
                        _execute?.Invoke(client, msg.Chat, user, msg.MessageId);
                    }
                    else
                    {
                        var username = msg.EntityValues.ElementAt(i).Replace("@", "");
                        var userInfo = BotDbContext.Get().UserInfoes.FirstOrDefault(u => u.Username.Equals(username));
                        if (userInfo != null)
                        {
                            var chatMember = client.GetChatMemberAsync(msg.Chat.Id, userInfo.TelegramId).Result;
                            user = chatMember.User;
                            _execute?.Invoke(client, msg.Chat, user, msg.MessageId);
                        }
                    }
                }
            }
            else if (msg.ReplyToMessage != null)
            {
                var user = msg.ReplyToMessage.From;
                _execute?.Invoke(client, msg.Chat, user, msg.ReplyToMessage.MessageId);
            }
            else
            {
                client.SendTextMessageAsync(msg.Chat.Id, "Для выполнения команды необходимо указать пользователя " +
                                            "или командой ответить на сообщение пользователя", replyToMessageId: msg.MessageId);
            }
        }
        public override void Handle(TelegramBotClient client, Message msg)
        {
            if (msg.Type == Telegram.Bot.Types.Enums.MessageType.ChatMembersAdded)
            {
                var  mentions = "";
                bool first    = true;
                foreach (var user in msg.NewChatMembers)
                {
                    mentions += "[" + user.FirstName + "](tg://user?id=" + user.Id + ")";
                    if (!first)
                    {
                        mentions += ", ";
                    }
                    else
                    {
                        first = false;
                    }

                    _ban?.Invoke(client, msg.Chat, user, 0, default);

                    BotDbContext.Get().GetUserInfo(user); // добавить информацию о юзере в базу
                }

                var button = new InlineKeyboardButton();
                button.Text         = "Принять";
                button.CallbackData = Bot.ACCEPT_AGREEMENT_CALLBACK;

                var    keyboard  = new InlineKeyboardMarkup(button);
                string agreement = BotDbContext.Get().Agreements.FirstOrDefault(a => a.ChatId.Equals(msg.Chat.Id))?.Text;   //WebConfigurationManager.AppSettings.Get("MemberAgreement");
                agreement = agreement ?? "Я не в курсе о правилах чата, так что путь пользователь просто нажмет кнопку.";

                client.SendTextMessageAsync(msg.Chat.Id, $"{mentions}\n{agreement}",
                                            parseMode: Telegram.Bot.Types.Enums.ParseMode.Markdown,
                                            replyMarkup: keyboard);
            }
            else
            {
                base.Handle(client, msg);
            }
        }
        public override void Execute(TelegramBotClient client, Message msg)
        {
            int  replyMsgId = msg.MessageId;
            User user       = null;

            if (msg.ReplyToMessage != null)
            {
                user       = msg.ReplyToMessage.From;
                replyMsgId = msg.ReplyToMessage.MessageId;
            }
            else if (msg.Entities.Any(e => e.Type == MessageEntityType.Mention))
            {
                for (int i = 0; i < msg.Entities.Length; i++)
                {
                    var entity = msg.Entities[i];
                    if (entity.Type != MessageEntityType.Mention)
                    {
                        continue;
                    }

                    user = entity.User;
                    if (user is null)
                    {
                        var username = msg.EntityValues.ElementAt(i).Replace("@", "");
                        var userInfo = BotDbContext.Get().UserInfoes.FirstOrDefault(u => u.Username.Equals(username));
                        if (userInfo != null)
                        {
                            var chatMember = client.GetChatMemberAsync(msg.Chat.Id, userInfo.TelegramId).Result;
                            user = chatMember.User;
                        }
                    }
                }
            }

            if (user != null)
            {
                _WarnUser(client, msg, user, replyMsgId);
            }
        }
示例#6
0
        public override void Handle(TelegramBotClient client, Message msg)
        {
            if (msg != null && msg.Type == Telegram.Bot.Types.Enums.MessageType.ChatMembersAdded)
            {
                var  mentions = "";
                bool first    = true;
                foreach (var user in msg.NewChatMembers)
                {
                    mentions += "[" + user.FirstName + "](tg://user?id=" + user.Id + ")";
                    if (!first)
                    {
                        mentions += ", ";
                    }
                    else
                    {
                        first = false;
                    }

                    _ban?.Invoke(client, msg.Chat, user, 0, default);

                    BotDbContext.Get().GetUserInfo(user); // добавить информацию о юзере в базу
                }

                var button = new InlineKeyboardButton();
                button.Text         = "Принять";
                button.CallbackData = Bot.ACCEPT_AGREEMENT_CALLBACK;

                var    keyboard  = new InlineKeyboardMarkup(button);
                string agreement = WebConfigurationManager.AppSettings.Get("MemberAgreement");
                client.SendTextMessageAsync(msg.Chat.Id, $"{mentions}\n{agreement}",
                                            parseMode: Telegram.Bot.Types.Enums.ParseMode.Markdown,
                                            replyMarkup: keyboard);
            }
            else if (msg != null && msg.Text != null && msg.Text.IndexOf("/welcome") >= 0)
            {
                if (msg.Entities is null)
                {
                    var mentions = "";

                    for (int i = 1; i < msg.Entities.Length; i++)
                    {
                        if (msg.Entities[i].Type != Telegram.Bot.Types.Enums.MessageEntityType.Mention)
                        {
                            continue;
                        }

                        var user = msg.Entities[i].User;
                        if (user == null)
                        {
                            var username = msg.EntityValues.ElementAt(i).Replace("@", "");
                            var userInfo = BotDbContext.Get().UserInfoes.FirstOrDefault(u => u.Username.Equals(username));
                            if (userInfo != null)
                            {
                                var chatMember = client.GetChatMemberAsync(msg.Chat.Id, userInfo.TelegramId).Result;
                                user = chatMember.User;
                            }
                            else
                            {
                                continue;
                            }
                        }

                        if (i > 0)
                        {
                            mentions += ", ";
                        }
                        mentions += "[" + user.FirstName + "](tg://user?id=" + user.Id + ")";

                        //user.BanInChat(client, msg.Chat.Id);

                        BotDbContext.Get().GetUserInfo(user); // добавить информацию о юзере в базу
                    }

                    var button = new InlineKeyboardButton();
                    button.Text         = "Принять";
                    button.CallbackData = Bot.ACCEPT_AGREEMENT_CALLBACK;

                    var    keyboard  = new InlineKeyboardMarkup(button);
                    string agreement = WebConfigurationManager.AppSettings.Get("MemberAgreement");
                    client.SendTextMessageAsync(msg.Chat.Id, $"{mentions}\n{agreement}",
                                                parseMode: Telegram.Bot.Types.Enums.ParseMode.Markdown,
                                                replyMarkup: keyboard);
                }
                else if (msg.ReplyToMessage != null)
                {
                    var user = msg.ReplyToMessage.From;

                    // user.BanInChat(client, msg.Chat.Id);

                    BotDbContext.Get().GetUserInfo(user);

                    var button = new InlineKeyboardButton();
                    button.Text         = "Принять";
                    button.CallbackData = Bot.ACCEPT_AGREEMENT_CALLBACK;

                    var    keyboard  = new InlineKeyboardMarkup(button);
                    string agreement = WebConfigurationManager.AppSettings.Get("MemberAgreement");
                    client.SendTextMessageAsync(msg.Chat.Id, $"{user.GetMension()}\n{agreement}",
                                                parseMode: Telegram.Bot.Types.Enums.ParseMode.Markdown,
                                                replyMarkup: keyboard);
                }
                else
                {
                    client.SendTextMessageAsync(msg.Chat.Id, "Для выполнения команды необходимо указать пользователей чата.", replyToMessageId: msg.MessageId);
                    return;
                }
            }
            else
            {
                base.Handle(client, msg);
            }
        }