/[sudobot]/trunk/src/automod/Logger.ts
ViewVC logotype

Diff of /trunk/src/automod/Logger.ts

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

trunk/src/Logger.js revision 25 by rakin, Mon Jul 29 17:28:16 2024 UTC trunk/src/automod/Logger.ts revision 124 by rakin, Mon Jul 29 17:28:41 2024 UTC
# Line 1  Line 1 
1  const { MessageEmbed } = require('discord.js');  import { roleMention } from '@discordjs/builders';
2    import { BanOptions, CommandInteraction, FileOptions, Guild, GuildBan, GuildMember, Message, MessageEmbed, TextChannel, User } from 'discord.js';
3    import ms from 'ms';
4    import DiscordClient from '../client/Client';
5    import Punishment from '../models/Punishment';
6    import { timeProcess, timeSince } from '../utils/util';
7    
8  class Logger {  class Logger {
9      constructor() {      client: DiscordClient;
10            
11        constructor(client: DiscordClient) {
12            this.client = client;
13        }
14    
15        channel(callback: (channel: TextChannel) => any, msg: any) {
16            let channelID = this.client.config.props[msg.guild!.id].logging_channel;
17            let channel = msg.guild!.channels.cache.find((c: any) => c.id === channelID) as TextChannel;
18    
19            if (channel) {
20                return callback(channel);
21            }
22      }      }
23    
24      channel(callback, msg) {      channelJoinLeft(callback: (channel: TextChannel) => any, msg: any) {
25          let channelID = app.config.props[msg.guild.id].logging_channel;          let channelID = this.client.config.props[msg.guild!.id].logging_channel_join_leave;
26          let channel = msg.guild.channels.cache.find(c => c.id === channelID);          let channel = msg.guild!.channels.cache.find((c: any) => c.id === channelID) as TextChannel;
27    
28          if (channel) {          if (channel) {
29              return callback(channel);              return callback(channel);
30          }          }
31      }      }
32    
33      logEdit(oldMsg, newMsg) {      logEdit(oldMsg: Message, newMsg: Message) {
34          this.channel(async (channel) => {          this.channel(async (channel) => {
35              await channel.send({              await channel.send({
36                  embeds: [                  embeds: [
37                      new MessageEmbed()                      new MessageEmbed()
38                      .setColor('#007bff')                      .setColor('#007bff')
39                      .setTitle('Message Edited in #' + newMsg.channel.name + " (" + newMsg.channel.id + ")")                      .setTitle('Message Edited in #' + (newMsg.channel as TextChannel).name + " (" + newMsg.channel.id + ")")
40                      .setDescription('**-+-+Before**\n' + oldMsg.content + '\n\n**-+-+After**\n' + newMsg.content)                      .setDescription('**-+-+Before**\n' + oldMsg.content + '\n\n**-+-+After**\n' + newMsg.content)
41                      .addField('ID', newMsg.id)                      .addField('ID', newMsg.id)
42                      .setAuthor({                      .setAuthor({
# Line 36  class Logger { Line 52  class Logger {
52          }, newMsg);          }, newMsg);
53      }      }
54    
55      logDelete(msg) {      logDelete(msg: Message) {
56          this.channel(async (channel) => {          this.channel(async (channel) => {
57              const embed = new MessageEmbed()              const embed = new MessageEmbed()
58                  .setColor('#f14a60')                  .setColor('#f14a60')
59                  .setTitle('Message Deleted in #' + msg.channel.name + " (" + msg.channel.id + ")")                  .setTitle('Message Deleted in #' + (msg.channel as TextChannel).name + " (" + msg.channel.id + ")")
60                  .setDescription(msg.content)                  .setDescription(msg.content)
61                  .setAuthor({                  .setAuthor({
62                      name: msg.author.tag,                      name: msg.author.tag,
# Line 51  class Logger { Line 67  class Logger {
67                      text: "Deleted",                      text: "Deleted",
68                  })                  })
69                  .setTimestamp();                  .setTimestamp();
70                
71                const files: FileOptions[] = [];
72    
73              if (msg.attachments.size > 0) {              if (msg.attachments.size > 0) {
74                  let str = '';                  let str = '';
75    
76                  msg.attachments.forEach(a => {                  msg.attachments.forEach(a => {
77                      str += `**${a.name}** ${a.proxyURL}\n`;                      str += `${a.name}\n`;
78                        files.push({
79                            name: a.name!,
80                            attachment: a.proxyURL
81                        });
82                  });                  });
83    
84                  embed.addField('Attachments', str);                  embed.addField('Attachments (top)', str);
85              }              }
86    
87              await channel.send({              await channel.send({
88                  embeds: [                  embeds: [
89                      embed                      embed
90                  ]                  ],
91                    files
92              });              });
93          }, msg);          }, msg);
94      }      }
95    
96      logBanned(ban) {      logBanned(ban: GuildBan) {
97          this.channel(async (channel) => {          this.channel(async (channel) => {
98              let r = '*No reason provided*';              let r = '*No reason provided*';
99    
100                const auditLog = (await ban.guild.fetchAuditLogs({
101                    limit: 1,
102                    type: 'MEMBER_BAN_ADD',
103                })).entries.first();          
104          
105    
106              if (ban.reason) {              if (ban.reason) {
107                  r = ban.reason;                  r = ban.reason;
108              }              }
109                else if (auditLog) {
110                    console.log(auditLog);  
111                    const { target, reason } = await auditLog;
112    
113                    if (target!.id === ban.user.id && reason) {
114                        r = await reason;
115                    }
116                }
117    
118              await channel.send({              await channel.send({
119                  embeds: [                  embeds: [
# Line 98  class Logger { Line 135  class Logger {
135          }, ban);          }, ban);
136      }      }
137    
138      logUnbanned(ban) {      logSoftBan(banOptions: BanOptions, guild: Guild, user: User, model: Punishment) {
139            this.channel(async (channel) => {
140                let r = '*No reason provided*';
141    
142                const auditLog = (await guild.fetchAuditLogs({
143                    limit: 1,
144                    type: 'MEMBER_BAN_ADD',
145                })).entries.first();        
146    
147                if (banOptions.reason) {
148                    r = banOptions.reason;
149                }
150                else if (auditLog) {
151                    console.log(auditLog);  
152                    const { target, reason } = await auditLog;
153    
154                    if (target!.id === user.id && reason) {
155                        r = await reason;
156                    }
157                }
158    
159                await channel.send({
160                    embeds: [
161                        new MessageEmbed()
162                        .setColor('#f14a60')
163                        .setTitle("A user was softbanned")
164                        .setAuthor({
165                            name: user.tag,
166                            iconURL: user.displayAvatarURL(),
167                        })
168                        .addField('Reason', r)
169                        .addField('Softbanned by', model.get().mod_tag)
170                        .addField('User ID', user.id)
171                        .setFooter({
172                            text: "Softbanned",
173                        })
174                        .setTimestamp()
175                    ]
176                });
177            }, {
178                guild
179            });
180        }
181    
182        logTempBan(banOptions: BanOptions, guild: Guild, user: User, model: Punishment) {
183            this.channel(async (channel) => {
184                let r = '*No reason provided*';
185    
186                const auditLog = (await guild.fetchAuditLogs({
187                    limit: 1,
188                    type: 'MEMBER_BAN_ADD',
189                })).entries.first();        
190    
191                if (banOptions.reason) {
192                    r = banOptions.reason;
193                }
194                else if (auditLog) {
195                    console.log(auditLog);  
196                    const { target, reason } = await auditLog;
197    
198                    if (target!.id === user.id && reason) {
199                        r = await reason;
200                    }
201                }
202    
203                await channel.send({
204                    embeds: [
205                        new MessageEmbed()
206                        .setColor('#f14a60')
207                        .setTitle("A user was temporarily banned")
208                        .setAuthor({
209                            name: user.tag,
210                            iconURL: user.displayAvatarURL(),
211                        })
212                        .addField('Reason', r)
213                        .addField('Banned by', model.get().mod_tag)
214                        .addField('User ID', user.id)
215                        .addField('Duration', ms(model.get().meta?.time))
216                        .setFooter({
217                            text: "Temporarily banned",
218                        })
219                        .setTimestamp()
220                    ]
221                });
222            }, {
223                guild
224            });
225        }
226    
227        logUnbanned(ban: GuildBan) {
228          this.channel(async (channel) => {          this.channel(async (channel) => {
229              await channel.send({              await channel.send({
230                  embeds: [                  embeds: [
# Line 119  class Logger { Line 245  class Logger {
245          }, ban);          }, ban);
246      }      }
247    
248      logJoined(member) {      logJoined(member: GuildMember) {
249          this.channel(async (channel) => {          this.channelJoinLeft(async (channel) => {
250              await channel.send({              await channel.send({
251                  embeds: [                  embeds: [
252                      new MessageEmbed()                      new MessageEmbed()
# Line 131  class Logger { Line 257  class Logger {
257                          iconURL: member.user.displayAvatarURL(),                          iconURL: member.user.displayAvatarURL(),
258                      })                      })
259                      .setDescription(`<@${member.user.id}> just joined the server!`)                      .setDescription(`<@${member.user.id}> just joined the server!`)
260                      .addField('Account Created', member.user.createdAt.toLocaleString())                      .addField('Account Created', `${member.user.createdAt.toLocaleString()} (${timeSince(member.user.createdAt.getTime())})`)
261                      .addField('New Account?', (new Date().getTime() - member.user.createdAt.getTime()) <= 24 * 60 * 60 * 1000 ? ":warning: Yes :warning:" : "No")                      .addField('New Account?', (new Date().getTime() - member.user.createdAt.getTime()) <= 3 * 24 * 60 * 60 * 1000 ? ":warning: Yes :warning:" : "No")
262                        .addField('Bot?', member.user.bot === true ? 'Yes' : 'No')
263                      .addField('User ID', member.user.id)                      .addField('User ID', member.user.id)
264                      .setFooter({                      .setFooter({
265                          text: "Joined",                          text: "Joined",
# Line 143  class Logger { Line 270  class Logger {
270          }, member);          }, member);
271      }      }
272    
273      logLeft(member) {      logLeft(member: GuildMember) {
274          this.channel(async (channel) => {          this.channelJoinLeft(async (channel) => {
275                const roles = await member.roles.cache.filter(role => role.id !== member.guild.id).reduce((acc, val) => ` ${acc} ${roleMention(val.id)}`, '');
276    
277              await channel.send({              await channel.send({
278                  embeds: [                  embeds: [
279                      new MessageEmbed()                      new MessageEmbed()
# Line 154  class Logger { Line 283  class Logger {
283                          name: member.user.tag,                          name: member.user.tag,
284                          iconURL: member.user.displayAvatarURL(),                          iconURL: member.user.displayAvatarURL(),
285                      })                      })
286                      .addField('Joined at', member.joinedAt.toLocaleString())                      .setDescription(`**Roles**\n${roles}`)
287                        .addField('Joined at', `${member.joinedAt!.toLocaleString()} (${timeSince(member.joinedAt!.getTime())})`)
288                      .addField('User ID', member.user.id)                      .addField('User ID', member.user.id)
289                        .addField('Bot?', member.user.bot === true ? 'Yes' : 'No')
290                      .setFooter({                      .setFooter({
291                          text: "Left",                          text: "Left",
292                      })                      })
# Line 165  class Logger { Line 296  class Logger {
296          }, member);          }, member);
297      }      }
298    
299      logBeaned(member, r, d) {      logBeaned(member: GuildMember, r: string, d: User) {
300          this.channel(async (channel) => {          this.channel(async (channel) => {
301              await channel.send({              await channel.send({
302                  embeds: [                  embeds: [
# Line 188  class Logger { Line 319  class Logger {
319          }, member);          }, member);
320      }      }
321    
322      logMute(member, reason, timeMs, d) {      logMute(member: GuildMember, reason: string, timeMs: number | null | undefined, d: User, hard: boolean = true) {
323          this.channel(async (channel) => {          this.channel(async (channel) => {
324              await channel.send({              await channel.send({
325                  embeds: [                  embeds: [
# Line 201  class Logger { Line 332  class Logger {
332                      })                      })
333                      .addField('Reason', reason)                      .addField('Reason', reason)
334                      .addField('Muted by', d.tag)                      .addField('Muted by', d.tag)
335                      .addField('Duration Until', typeof timeMs === 'number' ? new Date((timeMs / 1000) + Date.now()).toLocaleString() : "*No duration set*")                      .addField('Duration Until', typeof timeMs === 'number' ? `${new Date((timeMs / 1000) + Date.now()).toLocaleString()} (${timeProcess(timeMs / 1000)})` : "*No duration set*")
336                      .addField('User ID', member.user.id)                      .addField('User ID', member.user.id)
337                        .addField('Hardmute', hard ? 'Yes' : 'No')
338                      .setFooter({                      .setFooter({
339                          text: "Muted",                          text: "Muted",
340                      })                      })
# Line 212  class Logger { Line 344  class Logger {
344          }, member);          }, member);
345      }      }
346    
347      logUnmute(member, d) {      logUnmute(member: GuildMember, d: User) {
348          this.channel(async (channel) => {          this.channel(async (channel) => {
349              await channel.send({              await channel.send({
350                  embeds: [                  embeds: [
# Line 234  class Logger { Line 366  class Logger {
366          }, member);          }, member);
367      }      }
368    
369      logWarn(msg, member, d, reason) {      logWarn(msg: Message | CommandInteraction, member: GuildMember | User, d: User, reason: string | undefined, id: number | string) {
370          if (member.user)          if ((member as GuildMember).user)
371              member = member.user;              member = (member as GuildMember).user;
372    
373          this.channel(async (channel) => {          this.channel(async (channel) => {            
374              await channel.send({              await channel.send({
375                  embeds: [                  embeds: [
376                      new MessageEmbed()                      new MessageEmbed()
377                      .setColor('GOLD')                      .setColor('GOLD')
378                      .setTitle("Member warned")                      .setTitle("Member warned")
379                      .setAuthor({                      .setAuthor({
380                          name: member.tag,                          name: (member as User).tag,
381                          iconURL: member.displayAvatarURL(),                          iconURL: member.displayAvatarURL(),
382                      })                      })
383                      .addField('Reason', reason)                      .addField('Reason', reason ?? '*No reason provided*')
384                      .addField('Warned by', d.tag)                      .addField('Warned by', d.tag)
385                      .addField('User ID', member.id)                      .addField('User ID', member.id)
386                        .addField('Case ID', id + '')
387                      .setFooter({                      .setFooter({
388                          text: "Warned",                          text: "Warned",
389                      })                      })
# Line 260  class Logger { Line 393  class Logger {
393          }, msg);          }, msg);
394      }      }
395    
396      logWarndel(msg, member, warn, d) {      logWarndel(msg: Message, member: GuildMember, warn: any, d: User) {
397          this.channel(async (channel) => {          this.channel(async (channel) => {
398              await channel.send({              await channel.send({
399                  embeds: [                  embeds: [
# Line 284  class Logger { Line 417  class Logger {
417      }      }
418  }  }
419    
 module.exports = Logger;  
420    export default Logger;

Legend:
Removed from v.25  
changed lines
  Added in v.124

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26