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("Статус установлен!"); }
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"); }
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("Роль установлена!"); }
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"); }