1- import { MessageReaction , User } from 'discord.js' ;
1+ import { MessageReaction , Snowflake , User } from 'discord.js' ;
22import log4js from 'log4js' ;
33import EventHandler from '../EventHandler.js' ;
44import DiscordUtil from '../../util/DiscordUtil.js' ;
@@ -8,22 +8,35 @@ export default class MentionDeleteEventHandler implements EventHandler<'messageR
88
99 private logger = log4js . getLogger ( 'MentionDeleteEventHandler' ) ;
1010
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+
1219 this . logger . info (
1320 `User ${ DiscordUtil . getUserHandle ( user ) } is attempting to delete message '${ message . id } '`
1421 ) ;
1522
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
1627 const footer = message . embeds [ 0 ] ?. footer ?. text ;
1728 if ( footer === undefined ) return ;
1829
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 ) {
2231 try {
32+ this . logger . info ( `Removing message '${ message . id } '` ) ;
2333 await message . delete ( ) ;
2434 } catch ( error ) {
2535 this . logger . error ( error ) ;
2636 }
37+ } else {
38+ this . logger . info ( `Message '${ message . id } ' was not removed; no permission` ) ;
39+ await reaction . remove ( ) ;
2740 }
2841 } ;
2942}
0 commit comments