Exemplo n.º 1
0
        public async Task <string> Execute(Message msg)
        {
            if (msg.PeerId.Value == msg.FromId.Value)
            {
                return("Команда работает только в групповых чатах!");
            }

            var split = msg.Text.Split(' ', 2); // [команда, статус]

            if (split.Length < 2)
            {
                return("Не все параметры указаны!");
            }

            if (!await _checker.CheckAccessToCommand(msg.FromId.Value, msg.PeerId.Value, Roles.Editor))
            {
                return("Недосточно прав!");
            }

            var forwardMessage = msg.ForwardedMessages.Count == 0 ? msg.ReplyMessage : msg.ForwardedMessages[0];

            if (forwardMessage is null)
            {
                forwardMessage = msg; //если пересланного сообщения нет, то статус ставится тому кто это писал.
            }

            var statusUser =
                await _db.ChatRoles.FirstOrDefaultAsync(x => x.UserVkID == forwardMessage.FromId.Value &&
                                                        x.ChatVkID == msg.PeerId.Value);

            if (statusUser is null)
            {
                return("Данного пользователя нет или он ещё ничего не написал в этом чате!");
            }

            if ((await _db.Users.FirstOrDefaultAsync(x => x.Vk == statusUser.UserVkID)).IsBotAdmin)
            {
                if (!(await _db.Users.FirstOrDefaultAsync(x => x.Vk == msg.FromId.Value)).IsBotAdmin)
                {
                    return("Вы не можете установить статус этому пользователю, так как он администратор бота!");
                }
            }

            if (await _checker.GetUserRole(msg.FromId.Value, msg.PeerId.Value) < statusUser.UserRole)
            {
                if (!(await _db.Users.FirstOrDefaultAsync(x => x.Vk == msg.FromId.Value)).IsBotAdmin)
                {
                    return("Вы не можете установить статус пользователю у которого больше прав доступа!");
                }
            }

            statusUser.Status = split[1];

            await _db.SaveChangesAsync();

            return("Статус установлен!");
        }
Exemplo n.º 2
0
        public async Task <string> Execute(Message msg)
        {
            if (msg.PeerId.Value == msg.FromId.Value)
            {
                return("Команда работает только в групповых чатах!");
            }

            if (!await _checker.CheckAccessToCommand(msg.FromId.Value, msg.PeerId.Value, Roles.Moderator))
            {
                return("Недосточно прав!");
            }

            var forwardMessage = msg.ForwardedMessages.Count == 0 ? msg.ReplyMessage : msg.ForwardedMessages[0];

            User rebukeUser;

            if (forwardMessage is null)
            {
                var split = msg.Text.Split(' ', 2); // [команда, параметры]

                if (split.Length < 2)
                {
                    return("Указаны не все параметры!");
                }

                var userID = long.Parse(msg.Text.Substring(msg.Text.IndexOf("[") + 3,
                                                           msg.Text.IndexOf('|') - msg.Text.IndexOf('[') - 3));

                rebukeUser = _vkApi.Messages.GetConversationMembers(msg.PeerId.Value, new[] { "" })
                             .Profiles.FirstOrDefault(x => x.Id == userID);
            }
            else
            {
                rebukeUser = _vkApi.Messages.GetConversationMembers(msg.PeerId.Value, new[] { "" })
                             .Profiles.FirstOrDefault(x => x.Id == forwardMessage.FromId.Value);
            }


            if (rebukeUser is null)
            {
                return("Данного пользователя нет в этом чате!");
            }

            if ((await _db.Users.FirstOrDefaultAsync(x => x.Vk == rebukeUser.Id)).IsBotAdmin)
            {
                return("Вы не можете дать выговор этому пользователю, так как он администратор бота!");
            }

            if (await _checker.GetUserRole(rebukeUser.Id, msg.PeerId.Value) >=
                await _checker.GetUserRole(msg.FromId.Value, msg.PeerId.Value))
            {
                if (!(await _db.Users.FirstOrDefaultAsync(x => x.Vk == msg.FromId.Value)).IsBotAdmin)
                {
                    return("Вы не можете дать выговор этому пользователю т.к у него больше или такие же права!");
                }
            }

            var chatRebukeUser = await _db.ChatRoles.FirstOrDefaultAsync(x => x.UserVkID == rebukeUser.Id &&
                                                                         x.ChatVkID == msg.PeerId.Value);

            chatRebukeUser.Rebuke += 1;

            if (chatRebukeUser.Rebuke >= 3)
            {
                try
                {
                    _vkApi.Messages.RemoveChatUser((ulong)msg.PeerId.Value - 2000000000, rebukeUser.Id);
                }
                catch (Exception)
                {
                    return("Упс...Что-то пошло не так, возможно у меня недостаточно прав!");
                }

                _db.ChatRoles.Remove(await _db.ChatRoles.FirstOrDefaultAsync(x => x.UserVkID == rebukeUser.Id &&
                                                                             x.ChatVkID == msg.PeerId.Value));
                await _db.SaveChangesAsync();

                return("Пользователь набрал 3/3 предупреждений и был исключён!");
            }

            await _db.SaveChangesAsync();

            return($"{rebukeUser.FirstName} {rebukeUser.LastName}, вы получили предупреждение!\n" +
                   $"Всего предупреждений: {chatRebukeUser.Rebuke}/3");
        }
Exemplo n.º 3
0
        public async Task <string> Execute(Message msg)
        {
            if (msg.PeerId.Value == msg.FromId.Value)
            {
                return("Команда работает только в групповых чатах!");
            }

            var split = msg.Text.Split(' ', 2); // [команда, роль]

            if (!await _checker.CheckAccessToCommand(msg.FromId.Value, msg.PeerId.Value, Roles.Admin))
            {
                return("Недосточно прав!");
            }

            var forwardMessage = msg.ForwardedMessages.Count == 0 ? msg.ReplyMessage : msg.ForwardedMessages[0];

            if (forwardMessage is null)
            {
                return("Нет прикреплённого сообщение пользователя которому вы хотите выдать роль!");
            }

            var roleUser =
                await _db.ChatRoles.FirstOrDefaultAsync(x => x.UserVkID == forwardMessage.FromId.Value &&
                                                        x.ChatVkID == msg.PeerId.Value);

            if (roleUser is null)
            {
                return("Данного пользователя нет или он ещё ничего не написал в этом чате!");
            }

            var role = _checker.GetRoleByName(split[1].ToLower().Trim());

            if (role == Roles.RoleNotFound)
            {
                return($"Роли {split[1]} не существует!");
            }

            if (role == Roles.Admin)
            {
                if (!await _checker.CheckAccessToCommand(msg.FromId.Value, msg.PeerId.Value, Roles.GlAdmin))
                {
                    return("Для установки данной роли у вас недостаточно прав!");
                }
            }
            else if (role == Roles.GlAdmin)
            {
                if (!(await _db.Users.FirstOrDefaultAsync(x => x.Vk == msg.FromId.Value)).IsBotAdmin)
                {
                    return("Для установки данной роли у вас недостаточно прав!");
                }
            }

            if (await _checker.GetUserRole(msg.FromId.Value, msg.PeerId.Value) <= roleUser.UserRole)
            {
                if (!(await _db.Users.FirstOrDefaultAsync(x => x.Vk == msg.FromId.Value)).IsBotAdmin)
                {
                    return("Вы не можете изменить роль пользователю у которого точно такие права доступа или выше!");
                }
            }

            roleUser.UserRole = role;

            await _db.SaveChangesAsync();

            return("Роль установлена!");
        }
Exemplo n.º 4
0
        public async Task <string> Execute(Message msg)
        {
            if (msg.PeerId.Value == msg.FromId.Value)
            {
                return("Команда работает только в групповых чатах!");
            }

            if (!await _checker.CheckAccessToCommand(msg.FromId.Value, msg.PeerId.Value, Roles.Moderator))
            {
                return("Недосточно прав!");
            }

            var forwardMessage = msg.ForwardedMessages.Count == 0 ? msg.ReplyMessage : msg.ForwardedMessages[0];

            User amnestyUser;

            if (forwardMessage is null)
            {
                var split = msg.Text.Split(' ', 2); // [команда, параметры]

                if (split.Length < 2)
                {
                    return("Указаны не все параметры!");
                }

                var userID = long.Parse(msg.Text.Substring(msg.Text.IndexOf("[") + 3,
                                                           msg.Text.IndexOf('|') - msg.Text.IndexOf('[') - 3));

                amnestyUser = _vkApi.Messages.GetConversationMembers(msg.PeerId.Value, new[] { "" })
                              .Profiles.FirstOrDefault(x => x.Id == userID);
            }
            else
            {
                amnestyUser = _vkApi.Messages.GetConversationMembers(msg.PeerId.Value, new[] { "" })
                              .Profiles.FirstOrDefault(x => x.Id == forwardMessage.FromId.Value);
            }


            if (amnestyUser is null)
            {
                return("Данного пользователя нет в этом чате!");
            }

            if (await _checker.GetUserRole(amnestyUser.Id, msg.PeerId.Value) >=
                await _checker.GetUserRole(msg.FromId.Value, msg.PeerId.Value))
            {
                if (!(await _db.Users.FirstOrDefaultAsync(x => x.Vk == msg.FromId.Value)).IsBotAdmin)
                {
                    return("Вы не можете простить этого пользователя т.к у него больше или такие же права!");
                }
            }

            var chatAmnestyUser = await _db.ChatRoles.FirstOrDefaultAsync(x => x.UserVkID == amnestyUser.Id &&
                                                                          x.ChatVkID == msg.PeerId.Value);

            chatAmnestyUser.Rebuke = 0;

            await _db.SaveChangesAsync();

            return($"{amnestyUser.FirstName} {amnestyUser.LastName}, с вас сняли все предупреждения!\n" +
                   $"Всего предупреждений: 0/3");
        }