public string CreateUnverifyMessageToChannel(UnverifyUserProfile profile) { var endDateTime = profile.EndDateTime.ToLocaleDatetime(); var username = profile.DestinationUser.GetFullName(); return($"Dočasné odebrání přístupu pro uživatele **{username}** bylo dokončeno. Přístup bude navrácen **{endDateTime}**. Důvod: {profile.Reason}"); }
public async Task <UnverifyUserProfile> CreateProfileAsync(SocketGuildUser user, SocketGuild guild, string time, string data, bool isSelfunverify, List <string> toKeep, SocketRole mutedRole) { var result = new UnverifyUserProfile() { StartDateTime = DateTime.Now, Reason = ReasonParser.Parse(data), EndDateTime = TimeParser.Parse(time), DestinationUser = user, IsSelfUnverify = isSelfunverify }; var selfUnverifyConfig = await GetSelfunverifyConfigAsync(guild); if (isSelfunverify && selfUnverifyConfig == null) { throw new InvalidOperationException("Neplatná konfigurace pro selfunverify"); } if (toKeep != null && selfUnverifyConfig != null) { toKeep = toKeep.Select(o => o.ToLower()).Distinct().ToList(); if (toKeep.Count > selfUnverifyConfig.MaxRolesToKeep) { throw new ValidationException($"Lze si ponechat maximálně následující počet přístupů: {selfUnverifyConfig.MaxRolesToKeep}"); } } await SetRolesAsync(result, user, guild, isSelfunverify, toKeep, selfUnverifyConfig, mutedRole); SetChannels(result, user, toKeep, selfUnverifyConfig); return(result); }
private void SetChannels(UnverifyUserProfile profile, SocketGuildUser user, List <string> toKeep, SelfUnverifyConfig selfUnverifyConfig) { var channels = user.Guild.Channels .Select(channel => new ChannelOverwrite(channel, channel.GetPermissionOverwrite(user))) .Where(channel => channel.Permissions != null && (channel.AllowValue > 0 || channel.DenyValue > 0)) .ToList(); profile.ChannelsToRemove.AddRange(channels); if (toKeep == null || selfUnverifyConfig == null) { return; } foreach (var itemToKeep in toKeep) { CheckDefinitions(selfUnverifyConfig, itemToKeep); var overwrite = profile.ChannelsToRemove.Find(o => o.Channel.Name.Equals(itemToKeep, StringComparison.InvariantCultureIgnoreCase)); if (overwrite != null) { profile.ChannelsToKeep.Add(overwrite); profile.ChannelsToRemove.RemoveAll(o => o.Channel.Id == overwrite.Channel.Id); } } }
public async Task <UnverifyLog> LogSelfUnverifyAsync(UnverifyUserProfile profile, IGuild guild) { var data = UnverifyLogSet.FromProfile(profile); var userEntity = await GrillBotRepository.UsersRepository.GetOrCreateUserAsync(guild.Id, profile.DestinationUser.Id, UsersIncludes.None); await GrillBotRepository.CommitAsync(); GrillBotRepository.Detach(userEntity); return(await SaveLogOperationAsync(UnverifyLogOperation.Selfunverify, data.ToJObject(), userEntity.ID, userEntity.ID)); }
public static UnverifyLogSet FromProfile(UnverifyUserProfile profile) { return(new UnverifyLogSet() { ChannelsToKeep = profile.ChannelsToKeep, ChannelsToRemove = profile.ChannelsToRemove, EndDateTime = profile.EndDateTime, Reason = profile.Reason, RolesToKeep = profile.RolesToKeep.Select(o => o.Id).ToList(), RolesToRemove = profile.RolesToRemove.Select(o => o.Id).ToList(), StartDateTime = profile.StartDateTime }); }
private void FilterUnavailableRoles(UnverifyUserProfile profile, SocketRole mutedRole) { var unavailableRoles = profile.RolesToRemove.FindAll(o => o.IsEveryone || o.IsManaged); unavailableRoles.RemoveAll(o => o.IsEveryone); // Ignore everyone role. if (mutedRole != null) { unavailableRoles = unavailableRoles.FindAll(o => o.Id != mutedRole.Id); } profile.RolesToKeep.AddRange(unavailableRoles); profile.RolesToRemove.RemoveAll(o => o.IsEveryone || unavailableRoles.Any(x => x.Id == o.Id)); }
private async Task FilterHigherRolesIfSelfunverifyAsync(UnverifyUserProfile profile, bool isSelfunverify, SocketGuild guild) { if (!isSelfunverify) { return; } var botUser = await guild.GetUserFromGuildAsync(Discord.CurrentUser.Id); var botRolePosition = botUser.Roles.Max(o => o.Position); var rolesToKeep = profile.RolesToRemove.Where(o => o.Position >= botRolePosition).ToList(); profile.RolesToKeep.AddRange(rolesToKeep); profile.RolesToRemove.RemoveAll(o => rolesToKeep.Any(x => x.Id == o.Id)); }
private async Task SetRolesAsync(UnverifyUserProfile profile, SocketGuildUser user, SocketGuild guild, bool selfUnverify, List <string> toKeep, SelfUnverifyConfig selfUnverifyConfig, SocketRole mutedRole) { profile.RolesToRemove.AddRange(user.Roles); await FilterHigherRolesIfSelfunverifyAsync(profile, selfUnverify, guild); FilterUnavailableRoles(profile, mutedRole); if (toKeep == null || selfUnverifyConfig == null) { return; } foreach (var toKeepItem in toKeep) { CheckDefinitions(selfUnverifyConfig, toKeepItem); var role = profile.RolesToRemove.Find(o => string.Equals(o.Name, toKeepItem, StringComparison.InvariantCultureIgnoreCase)); if (role != null) { profile.RolesToKeep.Add(role); profile.RolesToRemove.Remove(role); continue; } foreach (var group in selfUnverifyConfig.RolesToKeep) { if (group.Value == null) { continue; } if (group.Value.Contains(toKeepItem)) { var roleItem = profile.RolesToRemove.Find(o => string.Equals(o.Name, group.Key == "_" ? toKeepItem : group.Key, StringComparison.InvariantCultureIgnoreCase)); if (roleItem != null) { profile.RolesToKeep.Add(roleItem); profile.RolesToRemove.Remove(roleItem); } } } } }
public UnverifyLogItem(UnverifyLog entity, DiscordSocketClient client) { var guild = client.GetGuild(entity.FromUser.GuildIDSnowflake); ID = entity.ID; Operation = entity.Operation; DateTime = entity.CreatedAt; FromUser = guild.GetUserFromGuildAsync(entity.FromUser.UserIDSnowflake).Result; ToUser = guild.GetUserFromGuildAsync(entity.ToUser.UserIDSnowflake).Result; switch (entity.Operation) { case UnverifyLogOperation.Autoremove: case UnverifyLogOperation.Remove: case UnverifyLogOperation.Recover: var removeLogData = entity.Json.ToObject <UnverifyLogRemove>(); RemoveData = new UnverifyRemoveOperation() { ReturnedChannels = removeLogData.ReturnedOverrides.Select(o => guild.GetChannel(o.ChannelID)).Where(o => o != null).ToList(), ReturnedRoles = removeLogData.ReturnedRoles.Select(o => guild.GetRole(o)).Where(o => o != null).ToList() }; break; case UnverifyLogOperation.Selfunverify: case UnverifyLogOperation.Unverify: var logData = entity.Json.ToObject <UnverifyLogSet>(); Profile = new UnverifyUserProfile() { EndDateTime = logData.EndDateTime, Reason = logData.Reason, StartDateTime = logData.StartDateTime, ChannelsToKeep = logData.ChannelsToKeep.Select(o => new ChannelOverwrite(guild.GetChannel(o.ChannelID), new OverwritePermissions(o.AllowValue, o.DenyValue))).Where(o => o.Channel != null).ToList(), ChannelsToRemove = logData.ChannelsToRemove.Select(o => new ChannelOverwrite(guild.GetChannel(o.ChannelID), new OverwritePermissions(o.AllowValue, o.DenyValue))).Where(o => o.Channel != null).ToList(), RolesToKeep = logData.RolesToKeep.Select(o => guild.GetRole(o)).Where(o => o != null).ToList(), RolesToRemove = logData.RolesToRemove.Select(o => guild.GetRole(o)).Where(o => o != null).ToList() }; break; case UnverifyLogOperation.Update: UpdateData = entity.Json.ToObject <UnverifyLogUpdate>(); break; } }
public async Task <List <UnverifyInfo> > GetCurrentUnverifies(SocketGuild guild) { var usersWithUnverify = GrillBotRepository.UsersRepository.GetUsersWithUnverify(guild.Id); var result = new List <UnverifyInfo>(); foreach (var userEntity in usersWithUnverify) { var user = await guild.GetUserFromGuildAsync(userEntity.UserIDSnowflake); var logData = userEntity.Unverify.SetLogOperation.Json.ToObject <UnverifyLogSet>(); var profile = new UnverifyUserProfile() { Reason = userEntity.Unverify.Reason, EndDateTime = userEntity.Unverify.EndDateTime, StartDateTime = userEntity.Unverify.StartDateTime, DestinationUser = user, RolesToKeep = logData.RolesToKeep.Select(o => guild.GetRole(o)).Where(o => o != null).ToList(), RolesToRemove = logData.RolesToRemove.Select(o => guild.GetRole(o)).Where(o => o != null).ToList(), IsSelfUnverify = userEntity.Unverify.SetLogOperation.Operation == UnverifyLogOperation.Selfunverify }; profile.ChannelsToKeep = logData.ChannelsToKeep.Select(o => new ChannelOverwrite(guild.GetChannel(o.ChannelID), new OverwritePermissions(o.AllowValue, o.DenyValue))) .Where(o => o.Channel != null).ToList(); profile.ChannelsToRemove = logData.ChannelsToRemove.Select(o => new ChannelOverwrite(guild.GetChannel(o.ChannelID), new OverwritePermissions(o.AllowValue, o.DenyValue))) .Where(o => o.Channel != null).ToList(); result.Add(new UnverifyInfo() { ID = userEntity.ID, Profile = profile }); } return(result); }
public string CreateUnverifyPMMessage(UnverifyUserProfile profile, SocketGuild guild) { var endDateTime = profile.EndDateTime.ToLocaleDatetime(); return($"Byly ti dočasně odebrány všechny práva na serveru **{guild.Name}**. Přístup ti bude navrácen **{endDateTime}**. Důvod: {profile.Reason}"); }