Skip to content

Commit 437f7b5

Browse files
committed
Fix deletion of bot messages via 🗑
1 parent e8cada1 commit 437f7b5

File tree

2 files changed

+20
-6
lines changed

2 files changed

+20
-6
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { MessageReaction, User } from 'discord.js';
1+
import { MessageReaction, Snowflake, User } from 'discord.js';
22
import log4js from 'log4js';
33
import EventHandler from '../EventHandler.js';
44
import 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
}

src/events/reaction/ReactionAddEventHandler.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,15 @@ export default class ReactionAddEventHandler implements DiscordEventHandler<'mes
1818
private readonly requestResolveEventHandler: RequestResolveEventHandler;
1919
private readonly requestReactionRemovalEventHandler = new RequestReactionRemovalEventHandler();
2020
private readonly requestReopenEventHandler: RequestReopenEventHandler;
21-
private readonly mentionDeleteEventHandler = new MentionDeleteEventHandler();
21+
private readonly mentionDeleteEventHandler: MentionDeleteEventHandler;
2222

2323
constructor( botUserId: Snowflake, internalChannels: Map<Snowflake, Snowflake>, requestLimits: Map<Snowflake, number> ) {
2424
this.botUserId = botUserId;
2525

2626
const requestEventHandler = new RequestEventHandler( internalChannels, requestLimits );
2727
this.requestResolveEventHandler = new RequestResolveEventHandler( botUserId );
2828
this.requestReopenEventHandler = new RequestReopenEventHandler( botUserId, requestEventHandler );
29+
this.mentionDeleteEventHandler = new MentionDeleteEventHandler( botUserId );
2930
}
3031

3132
// This syntax is used to ensure that `this` refers to the `ReactionAddEventHandler` object

0 commit comments

Comments
 (0)