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));
            }
        }
Ejemplo n.º 3
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
     });
 }
Ejemplo n.º 4
0
 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;
 }
Ejemplo n.º 6
0
        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);
 }
Ejemplo n.º 10
0
 public GetGuildModerationAuditRecords WithModerationActionType(ModerationActionType type)
 {
     this.Filter.ModerationAction = type;
     return(this);
 }
Ejemplo n.º 11
0
 public Add(DiscordGuild guild, DiscordUser modUser, DiscordUser user, ModerationActionType action, string?reason)
     : this(guild.Id, modUser.Id, user.Id, action, reason)
 {
 }
Ejemplo n.º 12
0
 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();
        }
Ejemplo n.º 15
0
        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
 {