private static async Task LoadGuildModerationLog(ulong guildId) { GuildModerationLog guildModerationLog = new GuildModerationLog(guildId); if (Directory.Exists(guildModerationLog.UserDirectory)) { foreach (string filepath in Directory.EnumerateFiles(guildModerationLog.UserDirectory, "*.json")) { LoadFileOperation load = await ResourcesModel.LoadToJSONObject(filepath); if (load.Success) { UserModerationLog userModerationLog = new UserModerationLog(guildModerationLog); if (userModerationLog.FromJSON(load.Result)) { guildModerationLog.userLogs.Add(userModerationLog.UserId, userModerationLog); if (userModerationLog.IsBanned) { if (userModerationLog.BannedUntil.Value < DateTimeOffset.MaxValue) { AddTimeLimitedInfractionReference(userModerationLog); } } else if (userModerationLog.IsMuted) { if (userModerationLog.MutedUntil.Value < DateTimeOffset.MaxValue) { AddTimeLimitedInfractionReference(userModerationLog); } } } } } } if (Directory.Exists(guildModerationLog.ChannelDirectory)) { foreach (string filepath in Directory.EnumerateFiles(guildModerationLog.ChannelDirectory, "*.json")) { LoadFileOperation load = await ResourcesModel.LoadToJSONObject(filepath); if (load.Success) { ChannelModerationLog channelModerationLog = new ChannelModerationLog(guildModerationLog); if (channelModerationLog.FromJSON(load.Result)) { guildModerationLog.channelLogs.Add(channelModerationLog.ChannelId, channelModerationLog); } } } } GuildLogs.Add(guildModerationLog.GuildId, guildModerationLog); }
public async Task AddBan(UserModerationEntry entry, DateTimeOffset banUntil) { moderationEntries.Add(entry); BannedUntil = banUntil; MutedUntil = null; if (banUntil < DateTimeOffset.MaxValue) { GuildModerationLog.AddTimeLimitedInfractionReference(this); } await Save(); await Parent.InvokeUserModerationLogModifiedEvents(this, entry); }
public static GuildModerationLog GetOrCreateGuildModerationLog(ulong guildId) { if (GuildLogs.TryGetValue(guildId, out GuildModerationLog guildModerationLog)) { return(guildModerationLog); } else { guildModerationLog = new GuildModerationLog(guildId); GuildLogs.Add(guildId, guildModerationLog); return(guildModerationLog); } }
private static async Task <string> UnbanUser(UserModerationLog userModLog) { GuildModerationLog guildLog = userModLog.Parent; SocketGuild guild = BotCore.Client.GetGuild(guildLog.GuildId); if (guild != null) { await userModLog.UnBan(guild); return(null); } else { return($"Failed to unban `{userModLog.UserId}` - Guild `{userModLog.Parent.GuildId}` not found!"); } }
private static async Task <string> UnMuteUser(UserModerationLog userModLog) { GuildModerationLog guildLog = userModLog.Parent; SocketGuild guild = BotCore.Client.GetGuild(guildLog.GuildId); if (guild is null) { return($"Failed to unmute `{userModLog.UserId}` - Guild `{userModLog.Parent.GuildId}` not found!"); } SocketGuildUser user = guild.GetUser(userModLog.UserId); if (user is null) { return($"Failed to unmute `{userModLog.UserId}` - User not found!"); } await userModLog.RemoveMute(user); return(null); }
public async Task <string> RelieveInfraction() { SocketGuild guild = BotCore.Client.GetGuild(GuildId); if (guild != null) { SocketGuildUser user = guild.GetUser(UserId); GuildModerationLog guildLog = GuildModerationLog.GetOrCreateGuildModerationLog(GuildId); UserModerationLog userLog = guildLog.GetOrCreateUserModerationLog(UserId); if (Type == ModerationType.Banned) { if (userLog.BannedUntil.HasValue) { if (userLog.BannedUntil.Value == Ends) { await guild.RemoveBanAsync(UserId); return(null); } } return("Banstate Invalid!"); } if (Type == ModerationType.Muted) { } return($"Unhandled timelimited moderation type `{Type}`"); } else { return($"Guild `{GuildId}` not found!"); } }
public UserModerationLog(GuildModerationLog parent, ulong userId = 0) { Parent = parent; UserId = userId; }
public async Task AddMute(SocketGuildUser target, DateTimeOffset muteUntil, UserModerationEntry?entry = null) { // Generate UserModerationEntry if (!entry.HasValue) { SocketGuildUser self = target.Guild.GetUser(BotCore.Client.CurrentUser.Id); if (muteUntil == DateTimeOffset.MaxValue) { entry = new UserModerationEntry(target.Guild.Id, ModerationType.Muted, DateTimeOffset.UtcNow, self, "Automatic Mute", "Duration: perma"); } else { entry = new UserModerationEntry(target.Guild.Id, ModerationType.Muted, DateTimeOffset.UtcNow, self, "Automatic Mute", "Duration: " + (muteUntil - DateTimeOffset.UtcNow).ToHumanTimeString()); } } moderationEntries.Add(entry.Value); // Edit user roles List <SocketRole> roles = new List <SocketRole>(target.Roles.Count - 1); foreach (SocketRole role in target.Roles) { if (!role.IsEveryone) { roles.Add(role); } } SocketRole muteRole = target.Guild.GetRole(SettingsModel.MuteRole); try { await target.RemoveRolesAsync(roles); if (muteRole != null) { await target.AddRoleAsync(muteRole); } } catch (Exception e) { #if DEBUG throw; #endif } // Edit UserModerationLog MutedUntil = muteUntil; rolesPreMute = new List <ulong>(roles.Select(role => role.Id)); if (muteUntil < DateTimeOffset.MaxValue) { GuildModerationLog.AddTimeLimitedInfractionReference(this); } // Save await Save(); await Parent.InvokeUserModerationLogModifiedEvents(this, entry.Value); }
public ChannelModerationLog(GuildModerationLog parent, ulong channelId = 0) { Parent = parent; ChannelId = channelId; }
public static ChannelModerationLog GetOrCreateChannelModerationLog(ulong guildId, ulong channelId, out GuildModerationLog guildLog) { guildLog = GetOrCreateGuildModerationLog(guildId); return(guildLog.GetOrCreateChannelModerationLog(channelId)); }
public static UserModerationLog GetOrCreateUserModerationLog(ulong guildId, ulong userId, out GuildModerationLog guildLog) { guildLog = GetOrCreateGuildModerationLog(guildId); return(guildLog.GetOrCreateUserModerationLog(userId)); }
public static bool TryGetGuildModerationLog(ulong guildId, out GuildModerationLog guildModerationLog) { return(GuildLogs.TryGetValue(guildId, out guildModerationLog)); }