/[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 37 by rakin, Mon Jul 29 17:28:18 2024 UTC trunk/src/automod/Logger.ts revision 65 by rakin, Mon Jul 29 17:28:27 2024 UTC
# Line 1  Line 1 
1  const { MessageEmbed } = require('discord.js');  import { roleMention } from '@discordjs/builders';
2  const util = require('./util');  import { FileOptions, GuildBan, GuildMember, Message, MessageEmbed, TextChannel, User } from 'discord.js';
3    import DiscordClient from '../client/Client';
4    import { timeProcess, timeSince } from '../utils/util';
5    
6  class Logger {  class Logger {
7      constructor() {      client: DiscordClient;
8            
9        constructor(client: DiscordClient) {
10            this.client = client;
11        }
12    
13        channel(callback: (channel: TextChannel) => any, msg: Message | GuildBan) {
14            let channelID = this.client.config.props[msg.guild!.id].logging_channel;
15            let channel = msg.guild!.channels.cache.find(c => c.id === channelID) as TextChannel;
16    
17            if (channel) {
18                return callback(channel);
19            }
20      }      }
21    
22      channel(callback, msg) {      channelJoinLeft(callback: (channel: TextChannel) => any, msg: any) {
23          let channelID = app.config.props[msg.guild.id].logging_channel;          let channelID = this.client.config.props[msg.guild!.id].logging_channel_join_leave;
24          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;
25    
26          if (channel) {          if (channel) {
27              return callback(channel);              return callback(channel);
28          }          }
29      }      }
30    
31      logEdit(oldMsg, newMsg) {      logEdit(oldMsg: Message, newMsg: Message) {
32          this.channel(async (channel) => {          this.channel(async (channel) => {
33              await channel.send({              await channel.send({
34                  embeds: [                  embeds: [
35                      new MessageEmbed()                      new MessageEmbed()
36                      .setColor('#007bff')                      .setColor('#007bff')
37                      .setTitle('Message Edited in #' + newMsg.channel.name + " (" + newMsg.channel.id + ")")                      .setTitle('Message Edited in #' + (newMsg.channel as TextChannel).name + " (" + newMsg.channel.id + ")")
38                      .setDescription('**-+-+Before**\n' + oldMsg.content + '\n\n**-+-+After**\n' + newMsg.content)                      .setDescription('**-+-+Before**\n' + oldMsg.content + '\n\n**-+-+After**\n' + newMsg.content)
39                      .addField('ID', newMsg.id)                      .addField('ID', newMsg.id)
40                      .setAuthor({                      .setAuthor({
# Line 37  class Logger { Line 50  class Logger {
50          }, newMsg);          }, newMsg);
51      }      }
52    
53      logDelete(msg) {      logDelete(msg: Message) {
54          this.channel(async (channel) => {          this.channel(async (channel) => {
55              const embed = new MessageEmbed()              const embed = new MessageEmbed()
56                  .setColor('#f14a60')                  .setColor('#f14a60')
57                  .setTitle('Message Deleted in #' + msg.channel.name + " (" + msg.channel.id + ")")                  .setTitle('Message Deleted in #' + (msg.channel as TextChannel).name + " (" + msg.channel.id + ")")
58                  .setDescription(msg.content)                  .setDescription(msg.content)
59                  .setAuthor({                  .setAuthor({
60                      name: msg.author.tag,                      name: msg.author.tag,
# Line 52  class Logger { Line 65  class Logger {
65                      text: "Deleted",                      text: "Deleted",
66                  })                  })
67                  .setTimestamp();                  .setTimestamp();
68                
69                const files: FileOptions[] = [];
70    
71              if (msg.attachments.size > 0) {              if (msg.attachments.size > 0) {
72                  let str = '';                  let str = '';
73    
74                  msg.attachments.forEach(a => {                  msg.attachments.forEach(a => {
75                      str += `**${a.name}** ${a.proxyURL}\n`;                      str += `${a.name}\n`;
76                        files.push({
77                            name: a.name!,
78                            attachment: a.proxyURL
79                        });
80                  });                  });
81    
82                  embed.addField('Attachments', str);                  embed.addField('Attachments (top)', str);
83              }              }
84    
85              await channel.send({              await channel.send({
86                  embeds: [                  embeds: [
87                      embed                      embed
88                  ]                  ],
89                    files
90              });              });
91          }, msg);          }, msg);
92      }      }
93    
94      logBanned(ban) {      logBanned(ban: GuildBan) {
95          this.channel(async (channel) => {          this.channel(async (channel) => {
96              let r = '*No reason provided*';              let r = '*No reason provided*';
97    
98                const auditLog = (await ban.guild.fetchAuditLogs({
99                    limit: 1,
100                    type: 'MEMBER_BAN_ADD',
101                })).entries.first();          
102          
103    
104              if (ban.reason) {              if (ban.reason) {
105                  r = ban.reason;                  r = ban.reason;
106              }              }
107                else if (auditLog) {
108                    console.log(auditLog);  
109                    const { target, reason } = await auditLog;
110    
111                    if (target!.id === ban.user.id && reason) {
112                        r = await reason;
113                    }
114                }
115    
116              await channel.send({              await channel.send({
117                  embeds: [                  embeds: [
# Line 99  class Logger { Line 133  class Logger {
133          }, ban);          }, ban);
134      }      }
135    
136      logUnbanned(ban) {      logUnbanned(ban: GuildBan) {
137          this.channel(async (channel) => {          this.channel(async (channel) => {
138              await channel.send({              await channel.send({
139                  embeds: [                  embeds: [
# Line 120  class Logger { Line 154  class Logger {
154          }, ban);          }, ban);
155      }      }
156    
157      logJoined(member) {      logJoined(member: GuildMember) {
158          this.channel(async (channel) => {          this.channelJoinLeft(async (channel) => {
159              await channel.send({              await channel.send({
160                  embeds: [                  embeds: [
161                      new MessageEmbed()                      new MessageEmbed()
# Line 132  class Logger { Line 166  class Logger {
166                          iconURL: member.user.displayAvatarURL(),                          iconURL: member.user.displayAvatarURL(),
167                      })                      })
168                      .setDescription(`<@${member.user.id}> just joined the server!`)                      .setDescription(`<@${member.user.id}> just joined the server!`)
169                      .addField('Account Created', `${member.user.createdAt.toLocaleString()} (${util.timeSince(member.user.createdAt.getTime())} ago)`)                      .addField('Account Created', `${member.user.createdAt.toLocaleString()} (${timeSince(member.user.createdAt.getTime())})`)
170                      .addField('New Account?', (new Date().getTime() - member.user.createdAt.getTime()) <= 3 * 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")
171                      .addField('Bot?', member.user.bot === true ? 'Yes' : 'No')                      .addField('Bot?', member.user.bot === true ? 'Yes' : 'No')
172                      .addField('User ID', member.user.id)                      .addField('User ID', member.user.id)
# Line 145  class Logger { Line 179  class Logger {
179          }, member);          }, member);
180      }      }
181    
182      logLeft(member) {      logLeft(member: GuildMember) {
183          this.channel(async (channel) => {          this.channelJoinLeft(async (channel) => {
184                const roles = await member.roles.cache.filter(role => role.id !== member.guild.id).reduce((acc, val) => ` ${acc} ${roleMention(val.id)}`, '');
185    
186              await channel.send({              await channel.send({
187                  embeds: [                  embeds: [
188                      new MessageEmbed()                      new MessageEmbed()
# Line 156  class Logger { Line 192  class Logger {
192                          name: member.user.tag,                          name: member.user.tag,
193                          iconURL: member.user.displayAvatarURL(),                          iconURL: member.user.displayAvatarURL(),
194                      })                      })
195                      .addField('Joined at', `${member.joinedAt.toLocaleString()} (${util.timeSince(member.joinedAt.getTime())} ago)`)                      .setDescription(`**Roles**\n${roles}`)
196                        .addField('Joined at', `${member.joinedAt!.toLocaleString()} (${timeSince(member.joinedAt!.getTime())})`)
197                      .addField('User ID', member.user.id)                      .addField('User ID', member.user.id)
198                      .addField('Bot?', member.user.bot === true ? 'Yes' : 'No')                      .addField('Bot?', member.user.bot === true ? 'Yes' : 'No')
199                      .setFooter({                      .setFooter({
# Line 168  class Logger { Line 205  class Logger {
205          }, member);          }, member);
206      }      }
207    
208      logBeaned(member, r, d) {      logBeaned(member: GuildMember, r: string, d: User) {
209          this.channel(async (channel) => {          this.channel(async (channel) => {
210              await channel.send({              await channel.send({
211                  embeds: [                  embeds: [
# Line 191  class Logger { Line 228  class Logger {
228          }, member);          }, member);
229      }      }
230    
231      logMute(member, reason, timeMs, d) {      logMute(member: GuildMember, reason: string, timeMs: number | null | undefined, d: User) {
232          this.channel(async (channel) => {          this.channel(async (channel) => {
233              await channel.send({              await channel.send({
234                  embeds: [                  embeds: [
# Line 204  class Logger { Line 241  class Logger {
241                      })                      })
242                      .addField('Reason', reason)                      .addField('Reason', reason)
243                      .addField('Muted by', d.tag)                      .addField('Muted by', d.tag)
244                      .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*")
245                      .addField('User ID', member.user.id)                      .addField('User ID', member.user.id)
246                      .setFooter({                      .setFooter({
247                          text: "Muted",                          text: "Muted",
# Line 215  class Logger { Line 252  class Logger {
252          }, member);          }, member);
253      }      }
254    
255      logUnmute(member, d) {      logUnmute(member: GuildMember, d: User) {
256          this.channel(async (channel) => {          this.channel(async (channel) => {
257              await channel.send({              await channel.send({
258                  embeds: [                  embeds: [
# Line 237  class Logger { Line 274  class Logger {
274          }, member);          }, member);
275      }      }
276    
277      logWarn(msg, member, d, reason) {      logWarn(msg: Message, member: GuildMember | User, d: User, reason: string, id: number | string) {
278          if (member.user)          if ((member as GuildMember).user)
279              member = member.user;              member = (member as GuildMember).user;
280    
281          this.channel(async (channel) => {          this.channel(async (channel) => {            
282              await channel.send({              await channel.send({
283                  embeds: [                  embeds: [
284                      new MessageEmbed()                      new MessageEmbed()
285                      .setColor('GOLD')                      .setColor('GOLD')
286                      .setTitle("Member warned")                      .setTitle("Member warned")
287                      .setAuthor({                      .setAuthor({
288                          name: member.tag,                          name: (member as User).tag,
289                          iconURL: member.displayAvatarURL(),                          iconURL: member.displayAvatarURL(),
290                      })                      })
291                      .addField('Reason', reason)                      .addField('Reason', reason)
292                      .addField('Warned by', d.tag)                      .addField('Warned by', d.tag)
293                      .addField('User ID', member.id)                      .addField('User ID', member.id)
294                        .addField('Warning ID', id + '')
295                      .setFooter({                      .setFooter({
296                          text: "Warned",                          text: "Warned",
297                      })                      })
# Line 263  class Logger { Line 301  class Logger {
301          }, msg);          }, msg);
302      }      }
303    
304      logWarndel(msg, member, warn, d) {      logWarndel(msg: Message, member: GuildMember, warn: any, d: User) {
305          this.channel(async (channel) => {          this.channel(async (channel) => {
306              await channel.send({              await channel.send({
307                  embeds: [                  embeds: [
# Line 287  class Logger { Line 325  class Logger {
325      }      }
326  }  }
327    
 module.exports = Logger;  
328    export default Logger;

Legend:
Removed from v.37  
changed lines
  Added in v.65

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26