1
- import { MessageReaction , User } from 'discord.js' ;
1
+ import { MessageReaction , Snowflake , User } from 'discord.js' ;
2
2
import log4js from 'log4js' ;
3
3
import EventHandler from '../EventHandler.js' ;
4
4
import DiscordUtil from '../../util/DiscordUtil.js' ;
@@ -8,22 +8,35 @@ export default class MentionDeleteEventHandler implements EventHandler<'messageR
8
8
9
9
private logger = log4js . getLogger ( 'MentionDeleteEventHandler' ) ;
10
10
11
- public onEvent = async ( { message } : MessageReaction , user : User ) : Promise < void > => {
11
+ private botUserId : Snowflake ;
12
+ constructor ( botUserId : Snowflake ) {
13
+ this . botUserId = botUserId ;
14
+ }
15
+
16
+ public onEvent = async ( reaction : MessageReaction , user : User ) : Promise < void > => {
17
+ const message = reaction . message ;
18
+
12
19
this . logger . info (
13
20
`User ${ DiscordUtil . getUserHandle ( user ) } is attempting to delete message '${ message . id } '`
14
21
) ;
15
22
23
+ // Only delete own messages
24
+ if ( message . author ?. id !== this . botUserId ) return ;
25
+
26
+ // Check whether the footer of the message's embed matches the user's handle
16
27
const footer = message . embeds [ 0 ] ?. footer ?. text ;
17
28
if ( footer === undefined ) return ;
18
29
19
- const userHandle = footer . match ( / .{ 3 , 32 } # [ 0 - 9 ] { 4 } / ) ;
20
-
21
- if ( userHandle !== null && DiscordUtil . getUserHandle ( user ) === userHandle [ 0 ] ) {
30
+ if ( DiscordUtil . getUserHandle ( user ) === footer ) {
22
31
try {
32
+ this . logger . info ( `Removing message '${ message . id } '` ) ;
23
33
await message . delete ( ) ;
24
34
} catch ( error ) {
25
35
this . logger . error ( error ) ;
26
36
}
37
+ } else {
38
+ this . logger . info ( `Message '${ message . id } ' was not removed; no permission` ) ;
39
+ await reaction . remove ( ) ;
27
40
}
28
41
} ;
29
42
}
0 commit comments