/[sudobot]/trunk/src/commands/moderation/HistoryCommand.ts
ViewVC logotype

Diff of /trunk/src/commands/moderation/HistoryCommand.ts

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 105 by rakin, Mon Jul 29 17:28:37 2024 UTC revision 341 by rakin, Mon Jul 29 17:29:38 2024 UTC
# Line 1  Line 1 
1  import { BanOptions, CommandInteraction, EmojiIdentifierResolvable, GuildMember, Interaction, InteractionCollector, Message, MessageActionRow, MessageButton, MessageOptions, ReplyOptions, TextChannel, User } from 'discord.js';  import { BanOptions, CommandInteraction, ContextMenuInteraction, EmojiIdentifierResolvable, GuildMember, Interaction, InteractionCollector, Message, MessageActionRow, MessageButton, MessageOptions, ReplyOptions, TextChannel, User } from 'discord.js';
2  import BaseCommand from '../../utils/structures/BaseCommand';  import BaseCommand from '../../utils/structures/BaseCommand';
3  import DiscordClient from '../../client/Client';  import DiscordClient from '../../client/Client';
4  import CommandOptions from '../../types/CommandOptions';  import CommandOptions from '../../types/CommandOptions';
5  import InteractionOptions from '../../types/InteractionOptions';  import InteractionOptions from '../../types/InteractionOptions';
6  import MessageEmbed from '../../client/MessageEmbed';  import MessageEmbed from '../../client/MessageEmbed';
7  import getUser from '../../utils/getUser';  import getUser from '../../utils/getUser';
 import getMember from '../../utils/getMember';  
 import History from '../../automod/History';  
 import { fetchEmoji } from '../../utils/Emoji';  
8  import Punishment from '../../models/Punishment';  import Punishment from '../../models/Punishment';
9  import PunishmentType from '../../types/PunishmentType';  import PunishmentType from '../../types/PunishmentType';
10    
11  export default class HistoryCommand extends BaseCommand {  export default class HistoryCommand extends BaseCommand {
12      supportsInteractions: boolean = true;      supportsInteractions: boolean = true;
13        supportsContextMenu = true;
14    
15      constructor() {      constructor() {
16          super('history', 'moderation', []);          super('history', 'moderation', ['Moderation History']);
17      }      }
18    
19      async genEmbed(client: DiscordClient, msg: Message | Interaction, user: User, page: number = 1) {      async genEmbed(client: DiscordClient, msg: Message | Interaction, user: User, page: number = 1) {
20          const limit = 3;          const limit = 3;
21          const offset = ((page < 1 ? 1 : page) - 1) * limit;          const offset = ((page < 1 ? 1 : page) - 1) * limit;
22    
23          const logs = await Punishment.findAndCountAll({          const logs = await Punishment.find({
24              where: {              guild_id: msg.guild!.id,
25                  guild_id: msg.guild!.id,              user_id: user.id,
26                  user_id: user.id          }).skip(offset).limit(limit).sort({ createdAt: -1 });
             },  
             order: [  
                 ['createdAt', 'DESC']  
             ],  
             limit,  
             offset  
         });  
27    
28          let str = '';          let str = '';
29          const maxPage = Math.ceil(logs.count / limit);          
30            const maxPage = Math.ceil((await Punishment.count({
31                guild_id: msg.guild!.id,
32                user_id: user.id,
33            })) / limit);
34    
35          const convert = (type: PunishmentType) => {                      const convert = (type: PunishmentType) => {            
36              switch (type) {              switch (type) {
37                  case PunishmentType.BAN:                  case PunishmentType.BAN:
38                      return 'Ban';                      return 'Ban';
39                  case PunishmentType.BEAN:                  case PunishmentType.SOFTBAN:
40                      return 'Bean';                      return 'Soft Ban';
41                    case PunishmentType.TEMPBAN:
42                        return 'Temporary Ban';
43                    case PunishmentType.SHOT:
44                        return 'Shot';
45                  case PunishmentType.MUTE:                  case PunishmentType.MUTE:
46                      return 'Mute';                      return 'Mute';
47                    case PunishmentType.HARDMUTE:
48                        return 'Hardmute';
49                  case PunishmentType.KICK:                  case PunishmentType.KICK:
50                      return 'Kick';                      return 'Kick';
51                  case PunishmentType.WARNING:                  case PunishmentType.WARNING:
# Line 58  export default class HistoryCommand exte Line 59  export default class HistoryCommand exte
59              }              }
60          };          };
61    
62          for await (const log of logs.rows) {          for await (const log of logs) {
63              str += `**Case ID**: ${log.get().id}\n`;              str += `**Case ID**: ${log.id}\n`;
64              str += `Type: ${convert(log.get().type)}\n`;              str += `Type: ${convert(log.type as PunishmentType)}\n`;
65              str += `Reason: ${log.get().reason ? (log.get().reason.trim() === '' ? '*No reason provided*' : log.get().reason) : '*No reason provided*'}\n`;              str += `Reason: ${log.reason ? (log.reason.trim() === '' ? '*No reason provided*' : log.reason) : '*No reason provided*'}\n`;
66    
67              // let mod_tag;              // let mod_tag;
68    
# Line 77  export default class HistoryCommand exte Line 78  export default class HistoryCommand exte
78              //     mod_tag = log.get().mod_id;              //     mod_tag = log.get().mod_id;
79              // }              // }
80    
81              str += `Action Executor: ${log.get().mod_tag}\n`;              str += `Action Executor: ${log.mod_tag}\n`;
82              str += `Date: ${log.get().createdAt.toLocaleString('en-US')}\n`;              str += `Date: ${log.createdAt.toLocaleString('en-US')}\n`;
83    
84              // if (log.get().type === PunishmentType.MUTE) {              // if (log.get().type === PunishmentType.MUTE) {
85              //     str += `Duration: ${(log.get().meta ? JSON.parse(log.get().meta) : {})?.time ?? '*No duration set*'}\n`;                            //     str += `Duration: ${(log.get().meta ? JSON.parse(log.get().meta) : {})?.time ?? '*No duration set*'}\n`;              
86              // }              // }
87    
88              if (log.get().meta) {              if (log.meta) {
89                  const json = typeof log.get().meta === 'string' ? JSON.parse(log.get().meta) : log.get().meta;                  const json = typeof log.meta === 'string' ? JSON.parse(log.meta) : log.meta;
90    
91                  if (Object.keys(json).length > 0) {                  if (Object.keys(json).length > 0) {
92                      str += "Additional Attributes:\n```\n";                      str += "Additional Attributes:\n```\n";
# Line 253  export default class HistoryCommand exte Line 254  export default class HistoryCommand exte
254    
255          collector.on('end', async () => {          collector.on('end', async () => {
256              try {              try {
257                  await message.edit({                  if (msg instanceof ContextMenuInteraction) {
258                      components: []                      await msg.editReply({
259                  });                          components: []
260                        });
261                    }
262                    else {
263                        await message.edit({
264                            components: []
265                        });
266                    }
267              }              }
268              catch (e) {              catch (e) {
269                  console.log(e);                                  console.log(e);                
270              }              }
271          });          });
272      }      }
 }  
273    }

Legend:
Removed from v.105  
changed lines
  Added in v.341

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26