private async Task <TempUnverifyItem> RemoveAccessAsync(GrillBotRepository repository, SocketGuildUser user, int unverifyTime, string reason, SocketUser fromUser, SocketGuild guild, bool ignoreHigherRoles) { var rolesToRemove = user.Roles .Where(o => !o.IsEveryone && !o.IsManaged && !string.Equals(o.Name, "muted", StringComparison.InvariantCultureIgnoreCase)) .ToList(); // Ignore Muted roles. if (ignoreHigherRoles) { var botMaxRolePosition = guild.GetUser(Client.CurrentUser.Id).Roles.Max(o => o.Position); rolesToRemove = rolesToRemove.Where(o => o.Position < botMaxRolePosition).ToList(); } var rolesToRemoveNames = rolesToRemove.Select(o => o.Name).ToList(); var overrides = GetChannelOverrides(user); var data = new UnverifyLogSet() { Overrides = overrides, Roles = rolesToRemoveNames, StartAt = DateTime.Now, TimeFor = unverifyTime.ToString(), Reason = reason }; data.SetUser(user); await repository.TempUnverify.LogOperationAsync(UnverifyLogOperation.Set, fromUser, guild, data).ConfigureAwait(false); await Logger.WriteAsync($"RemoveAccess {unverifyTime} secs (Roles: {string.Join(", ", rolesToRemoveNames)}, " + $"ExtraChannels: {string.Join(", ", overrides.Select(o => $"{o.ChannelId} => AllowVal: {o.AllowValue}, DenyVal => {o.DenyValue}"))}), " + $"{user.GetFullName()} ({user.Id}) Reason: {reason}").ConfigureAwait(false); await FindAndToggleMutedRole(user, guild, true).ConfigureAwait(false); await PreRemoveAccessToPublicChannels(user, guild).ConfigureAwait(false); // Set SendMessage: Deny for extra channels. await user.RemoveRolesAsync(rolesToRemove).ConfigureAwait(false); // Remove all roles for user. // Remove all extra channel permissions. foreach (var channelOverride in overrides) { var channel = user.Guild.GetChannel(channelOverride.ChannelIdSnowflake); // Where had access, now not have. channel?.AddPermissionOverwriteAsync(user, new OverwritePermissions(viewChannel: PermValue.Deny)); } var unverify = await repository.TempUnverify .AddItemAsync(rolesToRemoveNames, user.Id, user.Guild.Id, unverifyTime, overrides, reason) .ConfigureAwait(false); var formatedPrivateMessage = GetFormatedPrivateMessage(user, unverify, reason, false); await user.SendPrivateMessageAsync(formatedPrivateMessage).ConfigureAwait(false); return(unverify); }
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 void LogSet(List <ChannelOverride> overrides, List <ulong> roleIDs, int unverifyTime, string reason, IUser toUser, IUser fromUser, IGuild guild, bool isSelfUnverify, string[] subjects) { var data = new UnverifyLogSet() { Overrides = overrides, Reason = reason, Roles = roleIDs, StartAt = DateTime.Now, TimeFor = unverifyTime.ToString(), IsSelfUnverify = isSelfUnverify, Subjects = subjects?.ToList() ?? new List <string>() }; Save(UnverifyLogOperation.Set, fromUser, toUser, guild, data); }