/[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

revision 51 by rakin, Mon Jul 29 17:28:23 2024 UTC revision 214 by rakin, Mon Jul 29 17:29:03 2024 UTC
# Line 1  Line 1 
1  import { GuildBan, GuildMember, Message, MessageEmbed, TextChannel, User } from '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';  import DiscordClient from '../client/Client';
5    import Punishment from '../models/Punishment';
6  import { timeProcess, timeSince } from '../utils/util';  import { timeProcess, timeSince } from '../utils/util';
7    
8  class Logger {  class Logger {
# Line 9  class Logger { Line 12  class Logger {
12          this.client = client;          this.client = client;
13      }      }
14    
15      channel(callback: (channel: TextChannel) => any, msg: Message | GuildBan) {      channel(callback: (channel: TextChannel) => any, msg: any) {
16          let channelID = this.client.config.props[msg.guild!.id].logging_channel;          let channelID = this.client.config.props[msg.guild!.id].logging_channel;
17          let channel = msg.guild!.channels.cache.find(c => c.id === channelID) as TextChannel;          let channel = msg.guild!.channels.cache.find((c: any) => c.id === channelID) as TextChannel;
18    
19          if (channel) {          if (channel) {
20              return callback(channel);              return callback(channel);
21          }          }
22      }      }
23    
24      channelJoinLeft(callback: (channel: TextChannel) => any, msg: Message | GuildBan) {      channelJoinLeft(callback: (channel: TextChannel) => any, msg: any) {
25          let channelID = this.client.config.props[msg.guild!.id].logging_channel_join_leave;          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) as TextChannel;          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        log(guild: Guild, callback: (channel: TextChannel) => any) {
34            this.channel(callback, { guild });
35        }
36    
37      logEdit(oldMsg: Message, newMsg: Message) {      logEdit(oldMsg: Message, newMsg: Message) {
38          this.channel(async (channel) => {          this.channel(async (channel) => {
39              await channel.send({              await channel.send({
# Line 64  class Logger { Line 71  class Logger {
71                      text: "Deleted",                      text: "Deleted",
72                  })                  })
73                  .setTimestamp();                  .setTimestamp();
74                
75                const files: FileOptions[] = [];
76    
77              if (msg.attachments.size > 0) {              if (msg.attachments.size > 0) {
78                  let str = '';                  let str = '';
79    
80                  msg.attachments.forEach(a => {                  msg.attachments.forEach(a => {
81                      str += `**${a.name}** ${a.url}\n`;                      str += `${a.name}\n`;
82                        files.push({
83                            name: a.name!,
84                            attachment: a.proxyURL
85                        });
86                  });                  });
87    
88                  embed.addField('Attachments', str);                  embed.addField('Attachments (top)', str);
89              }              }
90    
91              await channel.send({              await channel.send({
92                  embeds: [                  embeds: [
93                      embed                      embed
94                  ]                  ],
95                    files
96              });              });
97          }, msg);          }, msg);
98      }      }
# Line 87  class Logger { Line 101  class Logger {
101          this.channel(async (channel) => {          this.channel(async (channel) => {
102              let r = '*No reason provided*';              let r = '*No reason provided*';
103    
104                const auditLog = (await ban.guild.fetchAuditLogs({
105                    limit: 1,
106                    type: 'MEMBER_BAN_ADD',
107                })).entries.first();          
108          
109    
110              if (ban.reason) {              if (ban.reason) {
111                  r = ban.reason;                  r = ban.reason;
112              }              }
113                else if (auditLog) {
114                    console.log(auditLog);  
115                    const { target, reason } = await auditLog;
116    
117                    if (target!.id === ban.user.id && reason) {
118                        r = await reason;
119                    }
120                }
121    
122              await channel.send({              await channel.send({
123                  embeds: [                  embeds: [
# Line 111  class Logger { Line 139  class Logger {
139          }, ban);          }, ban);
140      }      }
141    
142        logSoftBan(banOptions: BanOptions, guild: Guild, user: User, model: Punishment) {
143            this.channel(async (channel) => {
144                let r = '*No reason provided*';
145    
146                const auditLog = (await guild.fetchAuditLogs({
147                    limit: 1,
148                    type: 'MEMBER_BAN_ADD',
149                })).entries.first();        
150    
151                if (banOptions.reason) {
152                    r = banOptions.reason;
153                }
154                else if (auditLog) {
155                    console.log(auditLog);  
156                    const { target, reason } = await auditLog;
157    
158                    if (target!.id === user.id && reason) {
159                        r = await reason;
160                    }
161                }
162    
163                await channel.send({
164                    embeds: [
165                        new MessageEmbed()
166                        .setColor('#f14a60')
167                        .setTitle("A user was softbanned")
168                        .setAuthor({
169                            name: user.tag,
170                            iconURL: user.displayAvatarURL(),
171                        })
172                        .addField('Reason', r)
173                        .addField('Softbanned by', model.get().mod_tag)
174                        .addField('User ID', user.id)
175                        .setFooter({
176                            text: "Softbanned",
177                        })
178                        .setTimestamp()
179                    ]
180                });
181            }, {
182                guild
183            });
184        }
185    
186        logTempBan(banOptions: BanOptions, guild: Guild, user: User, model: Punishment) {
187            this.channel(async (channel) => {
188                let r = '*No reason provided*';
189    
190                const auditLog = (await guild.fetchAuditLogs({
191                    limit: 1,
192                    type: 'MEMBER_BAN_ADD',
193                })).entries.first();        
194    
195                if (banOptions.reason) {
196                    r = banOptions.reason;
197                }
198                else if (auditLog) {
199                    console.log(auditLog);  
200                    const { target, reason } = await auditLog;
201    
202                    if (target!.id === user.id && reason) {
203                        r = await reason;
204                    }
205                }
206    
207                await channel.send({
208                    embeds: [
209                        new MessageEmbed()
210                        .setColor('#f14a60')
211                        .setTitle("A user was temporarily banned")
212                        .setAuthor({
213                            name: user.tag,
214                            iconURL: user.displayAvatarURL(),
215                        })
216                        .addField('Reason', r)
217                        .addField('Banned by', model.get().mod_tag)
218                        .addField('User ID', user.id)
219                        .addField('Duration', ms(model.get().meta?.time))
220                        .setFooter({
221                            text: "Temporarily banned",
222                        })
223                        .setTimestamp()
224                    ]
225                });
226            }, {
227                guild
228            });
229        }
230    
231      logUnbanned(ban: GuildBan) {      logUnbanned(ban: GuildBan) {
232          this.channel(async (channel) => {          this.channel(async (channel) => {
233              await channel.send({              await channel.send({
# Line 159  class Logger { Line 276  class Logger {
276    
277      logLeft(member: GuildMember) {      logLeft(member: GuildMember) {
278          this.channelJoinLeft(async (channel) => {          this.channelJoinLeft(async (channel) => {
279                const roles = await member.roles.cache.filter(role => role.id !== member.guild.id).reduce((acc, val) => ` ${acc} ${roleMention(val.id)}`, '');
280    
281              await channel.send({              await channel.send({
282                  embeds: [                  embeds: [
283                      new MessageEmbed()                      new MessageEmbed()
# Line 168  class Logger { Line 287  class Logger {
287                          name: member.user.tag,                          name: member.user.tag,
288                          iconURL: member.user.displayAvatarURL(),                          iconURL: member.user.displayAvatarURL(),
289                      })                      })
290                        .setDescription(`**Roles**\n${roles}`)
291                      .addField('Joined at', `${member.joinedAt!.toLocaleString()} (${timeSince(member.joinedAt!.getTime())})`)                      .addField('Joined at', `${member.joinedAt!.toLocaleString()} (${timeSince(member.joinedAt!.getTime())})`)
292                      .addField('User ID', member.user.id)                      .addField('User ID', member.user.id)
293                      .addField('Bot?', member.user.bot === true ? 'Yes' : 'No')                      .addField('Bot?', member.user.bot === true ? 'Yes' : 'No')
# Line 203  class Logger { Line 323  class Logger {
323          }, member);          }, member);
324      }      }
325    
326      logMute(member: GuildMember, reason: string, timeMs: number | null | undefined, d: User) {      logMute(member: GuildMember, reason: string, timeMs: number | null | undefined, d: User, hard: boolean = true) {
327          this.channel(async (channel) => {          this.channel(async (channel) => {
328              await channel.send({              await channel.send({
329                  embeds: [                  embeds: [
# Line 218  class Logger { Line 338  class Logger {
338                      .addField('Muted by', d.tag)                      .addField('Muted by', d.tag)
339                      .addField('Duration Until', typeof timeMs === 'number' ? `${new Date((timeMs / 1000) + Date.now()).toLocaleString()} (${timeProcess(timeMs / 1000)})` : "*No duration set*")                      .addField('Duration Until', typeof timeMs === 'number' ? `${new Date((timeMs / 1000) + Date.now()).toLocaleString()} (${timeProcess(timeMs / 1000)})` : "*No duration set*")
340                      .addField('User ID', member.user.id)                      .addField('User ID', member.user.id)
341                        .addField('Hardmute', hard ? 'Yes' : 'No')
342                      .setFooter({                      .setFooter({
343                          text: "Muted",                          text: "Muted",
344                      })                      })
# Line 249  class Logger { Line 370  class Logger {
370          }, member);          }, member);
371      }      }
372    
373      logWarn(msg: Message, member: GuildMember | User, d: User, reason: string, id: number | string) {      logWarn(msg: Message | CommandInteraction, member: GuildMember | User, d: User, reason: string | undefined, id: number | string) {
374          if ((member as GuildMember).user)          if ((member as GuildMember).user)
375              member = (member as GuildMember).user;              member = (member as GuildMember).user;
376    
# Line 263  class Logger { Line 384  class Logger {
384                          name: (member as User).tag,                          name: (member as User).tag,
385                          iconURL: member.displayAvatarURL(),                          iconURL: member.displayAvatarURL(),
386                      })                      })
387                      .addField('Reason', reason)                      .addField('Reason', reason ?? '*No reason provided*')
388                      .addField('Warned by', d.tag)                      .addField('Warned by', d.tag)
389                      .addField('User ID', member.id)                      .addField('User ID', member.id)
390                      .addField('Warning ID', id + '')                      .addField('Case ID', id + '')
391                      .setFooter({                      .setFooter({
392                          text: "Warned",                          text: "Warned",
393                      })                      })

Legend:
Removed from v.51  
changed lines
  Added in v.214

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26