public async Task ShowAuditLogVersionTwo(CommandContext context, [Description("Specify whether you are filtering on Moderator or Member")] string moderatorOrMember, DiscordUser member, ModerationActionType action = ModerationActionType.NONE) { switch (moderatorOrMember.ToLower()) { case "moderator": case "mod": await this.ShowAuditLogVersionOne(context, member, null, action); break; case "member": case "mbr": case "mem": await this.ShowAuditLogVersionOne(context, null, member, action); break; default: throw new ArgumentException($"You attempted to filter on a {moderatorOrMember} which is not an option."); } ; }
private Color GetColorForAction(ModerationActionType actionType) { switch (actionType) { case ModerationActionType.Ban: case ModerationActionType.Mute: case ModerationActionType.TempBan: case ModerationActionType.TempMute: case ModerationActionType.Kick: return(Color.Red); case ModerationActionType.Unban: case ModerationActionType.Unmute: return(Color.Green); case ModerationActionType.Warn: case ModerationActionType.DeletedInfraction: case ModerationActionType.ClearInfractions: case ModerationActionType.UpdatedInfraction: return(Color.Orange); case ModerationActionType.ClearMessages: case ModerationActionType.Filtered: return(Color.LightOrange); default: return(new Color(0, 0, 0)); } }
private ModerationAction CreateModerationAction(UserContext context, ModerationActionType action) { return(new ModerationAction { UserId = context.User.Id, Action = action, Date = DateTime.Now, IpAddress = context.IpAddress, UserAgent = context.UserAgent }); }
public GuildModerationAuditRecord( ulong guildId, ulong moderatorUserId, ulong userId, ModerationActionType moderationAction, string?reason) { this.GuildId = guildId; this.ModeratorUserId = moderatorUserId; this.UserId = userId; this.ModerationAction = moderationAction; this.Reason = reason; }
// Token: 0x06000292 RID: 658 RVA: 0x0000E4B0 File Offset: 0x0000C6B0 public ModerationActionView(int moderationActionId, ModerationActionType actionType, int sourceCmid, string sourceName, int targetCmid, string targetName, DateTime actionDate, int applicationId, string reason, long sourceIp) { this.ModerationActionId = moderationActionId; this.ActionType = actionType; this.SourceCmid = sourceCmid; this.SourceName = sourceName; this.TargetCmid = targetCmid; this.TargetName = targetName; this.ActionDate = actionDate; this.ApplicationId = applicationId; this.Reason = reason; this.SourceIp = sourceIp; }
public async Task ShowAuditLogVersionOne(CommandContext context, [Description("The moderator who took action to filter on.")] DiscordUser?moderator = null, [Description("The member who had action taken against them to filter on.")] DiscordUser?member = null, [Description("The kind of action taken to filter on")] ModerationActionType action = ModerationActionType.NONE) { GuildModerationAuditRecords.GetGuildModerationAuditRecords message = new(context.Guild); if (moderator != null) { message.WithModeratorId(moderator.Id); } if (member != null) { message.WithUserId(member.Id); } if (action != ModerationActionType.NONE) { message.WithModerationActionType(action); } if (!(await this.mediator.Send(message)).TryGetValue(out var dbAuditRecords)) { await context.RespondAsync("There was an error using the filters provided. For more details please contact the bot developer."); return; } List <GuildModerationAuditRecord> auditRecords = dbAuditRecords.ToList(); IReadOnlyCollection <DiscordMember> memberList = await context.Guild.GetAllMembersAsync(); IDictionary <ulong, DiscordMember> memberDict = memberList.ToDictionary(member => member.Id); List <Page> auditPages = GenerateAuditPages(auditRecords, memberDict, context.Client.CurrentUser); InteractivityExtension interactivity = context.Client.GetInteractivity(); await interactivity.SendPaginatedMessageAsync(context.Channel, context.User, auditPages, emojis : null, behaviour : PaginationBehaviour.Ignore, PaginationDeletion.DeleteMessage, timeoutoverride : TimeSpan.FromMinutes(5)); }
/// <summary> /// Instantiates <see cref="ModerationAction"/>. /// </summary> /// <param name="moderationActionType">Moderation action type.</param> /// <param name="guildId">ID of the guild.</param> /// <param name="isActive">Whether the moderation action is active.</param> /// <param name="date">Date when the moderation action was taken in Unix time format.</param> /// <param name="reason">Reason for the moderation action.</param> /// <param name="userDiscordId">The user's Discord ID. Set to <code>null</code> if not associated with a Discord user.</param> /// <param name="userIgn">The user's IGN. Set to <code>null</code> if not associated with an in-game user.</param> /// <param name="expiryDate">Expiry date of the moderation action in Unix time format. Set to <code>null</code> if permanent.</param> public ModerationAction( ModerationActionType moderationActionType, ulong guildId, bool isActive, string reason, long date, ulong?userDiscordId = null, string?userIgn = null, long?expiryDate = null ) { ModerationActionType = moderationActionType; GuildId = guildId; IsActive = isActive; Reason = reason; Date = date; UserDiscordId = userDiscordId; UserIgn = userIgn; ExpiryDate = expiryDate; }
public async Task ShowAuditLogVersionOne(CommandContext context, [Description("The moderator who took action to filter on.")] DiscordUser moderator = null, [Description("The member who had action taken against them to filter on.")] DiscordUser member = null, [Description("The kind of action taken to filter on")] ModerationActionType action = ModerationActionType.NONE) { using IBotAccessProvider provider = this.providerBuilder.Build(); ulong?modUserId = moderator?.Id; ulong?userUserId = member?.Id; List <GuildModerationAuditRecord> auditRecords = provider.GetGuildModerationAuditRecords(context.Guild.Id, modUserId, userUserId, action).ToList(); IReadOnlyCollection <DiscordMember> memberList = await context.Guild.GetAllMembersAsync(); IDictionary <ulong, DiscordMember> memberDict = memberList.ToDictionary(member => member.Id); List <Page> auditPages = GenerateAuditPages(auditRecords, memberDict, context.Client.CurrentUser); InteractivityExtension interactivity = context.Client.GetInteractivity(); await interactivity.SendPaginatedMessageAsync(context.Channel, context.User, auditPages, emojis : null, behaviour : PaginationBehaviour.Ignore, PaginationDeletion.DeleteMessage, timeoutoverride : TimeSpan.FromMinutes(5)); }
public ModerationLogEntry WithActionType(ModerationActionType actionType) { ActionType = actionType; return(this); }
public GetGuildModerationAuditRecords WithModerationActionType(ModerationActionType type) { this.Filter.ModerationAction = type; return(this); }
public Add(DiscordGuild guild, DiscordUser modUser, DiscordUser user, ModerationActionType action, string?reason) : this(guild.Id, modUser.Id, user.Id, action, reason) { }
public Add(ulong guildId, ulong modUserId, ulong userId, ModerationActionType action, string?reason) { this.Record = new GuildModerationAuditRecord(guildId, modUserId, userId, action, reason); }
public async Task ShowAuditLogVersionThree(CommandContext context, ModerationActionType action) { await this.ShowAuditLogVersionOne(context, null, null, action); }
public void AddModerationAuditRecord(ulong guildId, ulong modUserId, ulong userId, ModerationActionType action, string reason) { GuildModerationAuditRecord record = new GuildModerationAuditRecord() { GuildId = guildId, ModeratorUserId = modUserId, UserId = userId, ModerationAction = action, Reason = reason, Timestamp = this.clock.GetCurrentInstant() }; this.context.GuildModerationAuditRecords.Add(record); this.context.SaveChanges(); }
private static EmbedField GetEmbedFieldForActionsOfType(this IEnumerable<ModerationAction> moderationActions, ModerationActionType type, bool showAssociatedDiscord, bool showAssociatedIgn) { var list = moderationActions.Where(ma => ma.ModerationActionType == type).ToList(); var fieldValue = new StringBuilder(); if (!list.Any()) { fieldValue.AppendLine($"This user has no {type.ToString().ToLower()}s"); } else { foreach (var moderationAction in list) { fieldValue.AppendLine($"**▸ ID: {moderationAction.ModerationActionId}**"); if (showAssociatedDiscord) { fieldValue.AppendLine(moderationAction.UserDiscordId is null ? "Associated Discord user: None" : $"Associated Discord user: <@{moderationAction.UserDiscordId}>"); } if (showAssociatedIgn) { fieldValue.AppendLine(moderationAction.UserIgn is null ? "Associated IGN user: None" : $"Associated IGN user: `{moderationAction.UserIgn}`"); } fieldValue.AppendLine($"Active: {moderationAction.IsActive}"); fieldValue.AppendLine($"Issued at: {DateTimeOffset.FromUnixTimeMilliseconds(moderationAction.Date).UtcDateTime} UTC"); if (moderationAction.ExpiryDate is not null) { fieldValue.AppendLine(moderationAction.IsActive ? $"Expires at: {DateTimeOffset.FromUnixTimeMilliseconds(moderationAction.ExpiryDate.Value).UtcDateTime} UTC" : $"Expired at: {DateTimeOffset.FromUnixTimeMilliseconds(moderationAction.ExpiryDate.Value).UtcDateTime} UTC"); } else { fieldValue.AppendLine("Expires at: `Permanent`"); } var splitReason = moderationAction.Reason.SplitByNewLine(); var reason = new StringBuilder(); foreach (var reasonLine in splitReason) { reason.AppendLine("> " + reasonLine); } fieldValue.AppendLine($"Reason:\n {reason}"); } } var title = type switch { ModerationActionType.Warn => ":warning: Warnings", ModerationActionType.Mute => ":no_mouth: Mutes", ModerationActionType.Ban => ":no_pedestrians: Bans", _ => throw new ArgumentOutOfRangeException(nameof(type), type, null) }; return new EmbedField(title, fieldValue.ToString(), false); } }
/// <summary> /// Converts to a <see cref="string"/> with the corresponding Discord emoji. /// </summary> /// <param name="moderationActionType">Moderation action type.</param> /// <returns>A <see cref="string"/> with the corresponding Discord emoji.</returns> public static string ToStringWithEmoji(this ModerationActionType moderationActionType) => moderationActionType switch {