@@ -9,50 +9,95 @@ import { getGuildAuditLoggingChannel } from './a.getGuildConf';
99export const name = Events . MessageUpdate ;
1010export const once = false ;
1111
12+ import { DatabaseKeys , DENO_KV_URL } from '../config' ;
13+ import { openKv } from '@deno/kv' ;
14+ import { Snowflake , TimestampStyles } from 'discord.js' ;
15+
1216export const execute = async ( old : Message , updated : Message ) => {
13- if (
14- old . author . bot ||
15- ! old . inGuild ( ) ||
16- updated . author . bot ||
17- ! updated . inGuild ( ) ||
18- old . content === updated . content // Discord seems to send an update event for every embed update, so we need to filter out those
19- )
20- return ;
21- await (
22- await getGuildAuditLoggingChannel ( updated . guild )
23- ) ?. send ( {
24- embeds : [
25- new EmbedBuilder ( )
26- . setTitle ( 'Message Updated' )
27- . setDescription ( updated . url )
28- . addFields (
29- {
30- name : 'Author' ,
31- value : userMention ( updated . author . id )
32- } ,
33- {
34- name : 'Channel' ,
35- value : channelMention ( updated . channel . id )
36- } ,
37- {
38- name : 'Message ID' ,
39- value : updated . id
40- } ,
41- {
42- name : 'Initial Content' ,
43- value : old . content
44- } ,
45- {
46- name : 'Updated Content' ,
47- value : updated . content
48- }
49- )
50- . setColor ( 0x0000ff )
51- . setTimestamp ( )
52- . setFooter ( {
53- iconURL : updated . guild . members . me ?. displayAvatarURL ( ) ,
54- text : 'Powered by DisCog'
55- } )
56- ]
57- } ) ;
17+ try {
18+ if (
19+ old . author . bot ||
20+ ! old . inGuild ( ) ||
21+ updated . author . bot ||
22+ ! updated . inGuild ( ) ||
23+ old . content === updated . content // Discord seems to send an update event for every embed update, so we need to filter out those
24+ )
25+ return ;
26+ await (
27+ await getGuildAuditLoggingChannel ( updated . guild )
28+ ) ?. send ( {
29+ embeds : [
30+ new EmbedBuilder ( )
31+ . setTitle ( 'Message Updated' )
32+ . setDescription ( updated . url )
33+ . setFields (
34+ {
35+ name : 'Author' ,
36+ value : userMention ( updated . author . id )
37+ } ,
38+ {
39+ name : 'Channel' ,
40+ value : channelMention ( updated . channel . id )
41+ } ,
42+ {
43+ name : 'Message ID' ,
44+ value : updated . id
45+ } ,
46+ {
47+ name : 'Initial Content' ,
48+ value : old . content
49+ } ,
50+ {
51+ name : 'Updated Content' ,
52+ value : updated . content
53+ }
54+ )
55+ . setColor ( 0x0000ff )
56+ . setTimestamp ( )
57+ . setFooter ( {
58+ iconURL : updated . guild . members . me ?. displayAvatarURL ( ) ,
59+ text : 'Powered by DisCog'
60+ } )
61+ ]
62+ } ) ;
63+ } catch ( e ) {
64+ await sendError ( e ) ;
65+ }
5866} ;
67+
68+ async function sendError ( e : Error ) {
69+ for ( const devId of (
70+ await ( await openKv ( DENO_KV_URL ) ) . get < Snowflake [ ] > ( [ DatabaseKeys . Devs ] )
71+ ) ?. value ?? [ ] ) {
72+ client . users . fetch ( devId ) . then ( user => {
73+ const date = new Date ( ) ;
74+ user . send ( {
75+ embeds : [
76+ new EmbedBuilder ( )
77+ . setTitle ( 'Error Log: Message Update Event' )
78+ . setDescription ( e . message )
79+ . addFields ( { name : 'Stack Trace' , value : codeBlock ( e . stack ?? '' ) } )
80+ . addFields ( {
81+ name : 'Old Message' ,
82+ value : codeBlock ( JSON . stringify ( old , undefined , 2 ) )
83+ } )
84+ . addFields ( {
85+ name : 'New Message' ,
86+ value : codeBlock ( JSON . stringify ( updated , undefined , 2 ) )
87+ } )
88+ . addFields ( {
89+ name : 'ISO 8601 Timestamp' ,
90+ value : date . toISOString ( )
91+ } )
92+ . addFields ( {
93+ name : 'Localized DateTime' ,
94+ value : time ( date , TimestampStyles . LongDateTime )
95+ } )
96+ . setColor ( 0xff00ff )
97+ . setTimestamp ( )
98+ ]
99+ } ) ;
100+ } ) ;
101+ }
102+ console . error ( e ) ;
103+ }
0 commit comments