public async Task <string> ReturnAccessAsync(int id, SocketUser fromUser) { using (var repository = new GrillBotRepository(Config)) { var item = await repository.TempUnverify.FindItemByIDAsync(id).ConfigureAwait(false); if (item == null) { throw new ArgumentException($"Odebrání přístupu s ID {id} nebylo v databázi nalezeno."); } var guild = Client.GetGuild(Convert.ToUInt64(item.GuildID)); var user = await guild.GetUserFromGuildAsync(item.UserID).ConfigureAwait(false); if (user == null) { throw new ArgumentException($"Uživatel s ID **{item.UserID}** nebyl na serveru **{guild.Name}** nalezen."); } var data = new UnverifyLogRemove() { Overrides = item.DeserializedChannelOverrides, Roles = item.DeserializedRolesToReturn }; data.SetUser(user); await repository.TempUnverify.LogOperationAsync(UnverifyLogOperation.Remove, fromUser, guild, data).ConfigureAwait(false); ReturnAccess(item); return($"Předčasné vrácení přístupu pro uživatele **{user.GetFullName()}** bylo dokončeno."); } }
public void LogRemove(TempUnverifyItem item, IUser toUser, IUser fromUser, IGuild guild) { var data = new UnverifyLogRemove() { Overrides = item.DeserializedChannelOverrides, Roles = item.DeserializedRolesToReturn }; Save(UnverifyLogOperation.Remove, fromUser, toUser, guild, data); }
public void LogAutoRemove(TempUnverifyItem item, IUser toUser, IGuild guild) { var data = new UnverifyLogRemove() { Overrides = item.DeserializedChannelOverrides, Roles = item.DeserializedRolesToReturn }; Save(UnverifyLogOperation.AutoRemove, DiscordClient.CurrentUser, toUser, guild, data); }
public async Task LogRemoveAsync(List <SocketRole> returnedRoles, List <ChannelOverwrite> returnedChannels, IGuild guild, IUser toUser, IUser fromUser) { var data = new UnverifyLogRemove() { ReturnedOverrides = returnedChannels, ReturnedRoles = returnedRoles.ConvertAll(o => o.Id) }; var toUserEntity = await GrillBotRepository.UsersRepository.GetOrCreateUserAsync(guild.Id, toUser.Id, UsersIncludes.None); var fromUserEntity = await GrillBotRepository.UsersRepository.GetOrCreateUserAsync(guild.Id, fromUser.Id, UsersIncludes.None); await GrillBotRepository.CommitAsync(); GrillBotRepository.Detach(toUserEntity); GrillBotRepository.Detach(fromUserEntity); await SaveLogOperationAsync(UnverifyLogOperation.Remove, data.ToJObject(), fromUserEntity.ID, toUserEntity.ID); }
private void ReturnAccess(object item) { if (item is TempUnverifyItem unverify) { var guild = Client.GetGuild(unverify.GuildIDSnowflake); if (guild == null) { return; } var user = guild.GetUserFromGuildAsync(unverify.UserID).Result; if (user == null) { Logger.Write($"Invalid unverify. User not found. {JsonConvert.SerializeObject(unverify)}"); return; } var rolesToReturn = unverify.DeserializedRolesToReturn; var roles = guild.Roles.Where(o => rolesToReturn.Contains(o.Name) && !user.Roles.Any(x => x.Id == o.Id)).ToList(); var isAutoRemove = (unverify.GetEndDatetime() - DateTime.Now).Ticks <= 0; if (isAutoRemove) { using (var repository = new GrillBotRepository(Config)) { var data = new UnverifyLogRemove() { Overrides = unverify.DeserializedChannelOverrides, Roles = unverify.DeserializedRolesToReturn }; data.SetUser(user); repository.TempUnverify .LogOperationAsync(UnverifyLogOperation.AutoRemove, Client.CurrentUser, guild, data) .GetAwaiter() .GetResult(); } } var overrides = unverify.DeserializedChannelOverrides .Select(o => new { channel = guild.GetChannel(o.ChannelIdSnowflake), channelOverride = o }) .Where(o => o.channel != null) .ToList(); Logger.Write($"ReturnAccess User: {user.GetFullName()} ({user.Id}) Roles: {string.Join(", ", rolesToReturn)} " + $"ExtraChannels: {string.Join(", ", overrides.Select(o => $"{o.channelOverride.ChannelId}|{o.channelOverride.AllowValue}|{o.channelOverride.DenyValue}"))}"); user.AddRolesAsync(roles).GetAwaiter().GetResult(); foreach (var channelOverride in overrides) { channelOverride.channel .AddPermissionOverwriteAsync(user, channelOverride.channelOverride.GetPermissions()) .GetAwaiter() .GetResult(); } FindAndToggleMutedRole(user, guild, false).GetAwaiter().GetResult(); RemoveOverwritesForPreprocessedChannels(user, guild, overrides.Select(o => o.channelOverride).ToList()).GetAwaiter().GetResult(); using (var repository = new GrillBotRepository(Config)) { repository.TempUnverify.RemoveItem(unverify.ID); } unverify.Dispose(); Data.RemoveAll(o => o.ID == unverify.ID); } }