Skip to content

Commit 9c5c08c

Browse files
committed
feat: Support for removing playground links
1 parent f80fa5c commit 9c5c08c

File tree

2 files changed

+18
-12
lines changed

2 files changed

+18
-12
lines changed

src/modules/playground.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import {
1212
findCodeblockFromChannel,
1313
PLAYGROUND_REGEX,
1414
} from '../util/findCodeblockFromChannel';
15+
import { addMessageOwnership, sendWithMessageOwnership } from '../util/send';
1516

1617
export class PlaygroundModule extends Module {
1718
constructor(client: CookiecordClient) {
@@ -34,15 +35,16 @@ export class PlaygroundModule extends Module {
3435
true,
3536
);
3637
if (!code)
37-
return await msg.channel.send(
38+
return sendWithMessageOwnership(
39+
msg,
3840
":warning: couldn't find a codeblock!",
3941
);
4042
}
4143
const embed = new MessageEmbed()
4244
.setURL(PLAYGROUND_BASE + compressToEncodedURIComponent(code))
4345
.setTitle('View in Playground')
4446
.setColor(TS_BLUE);
45-
await msg.channel.send({ embed });
47+
await sendWithMessageOwnership(msg, { embed });
4648
}
4749

4850
@listener({ event: 'message' })
@@ -56,15 +58,16 @@ export class PlaygroundModule extends Module {
5658
.setURL(exec[0]);
5759
if (exec[0] == msg.content) {
5860
// Message only contained the link
61+
await sendWithMessageOwnership(msg, { embed });
5962
msg.delete();
60-
await msg.channel.send({ embed });
6163
} else {
6264
// Message also contained other characters
6365
const botMsg = await msg.channel.send(
6466
`${msg.author} Here's a shortened URL of your playground link! You can remove the full link from your message.`,
6567
{ embed },
6668
);
6769
this.editedLongLink.set(msg.id, botMsg);
70+
addMessageOwnership(botMsg, msg.author);
6871
}
6972
}
7073
@listener({ event: 'messageUpdate' })

src/util/send.ts

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,30 @@
1-
import { Message, MessageEmbed, GuildMember } from 'discord.js';
1+
import { Message, MessageEmbed, User } from 'discord.js';
22

33
const MAX_TRACKED_MESSAGES = 1000;
44

5-
const messageIdToMemberId = new Map<string, string>();
5+
const messageToUserId = new Map<string, string>();
66

77
export async function sendWithMessageOwnership(
88
message: Message,
9-
toSend: string | MessageEmbed,
9+
toSend: string | { embed: MessageEmbed },
1010
) {
1111
const sent = await message.channel.send(toSend);
12-
messageIdToMemberId.set(sent.id, message.author.id);
12+
addMessageOwnership(sent, message.author);
13+
}
1314

15+
export function addMessageOwnership(message: Message, user: User) {
16+
messageToUserId.set(message.id, user.id);
1417
// Without this memory grows unboundedly... very slowly, but better to avoid the issue.
15-
if (messageIdToMemberId.size > MAX_TRACKED_MESSAGES) {
18+
if (messageToUserId.size > MAX_TRACKED_MESSAGES) {
1619
// Keys returns an iterable in insertion order, so we remove the oldest message from the map.
17-
messageIdToMemberId.delete(messageIdToMemberId.keys().next().value);
20+
messageToUserId.delete(messageToUserId.keys().next().value);
1821
}
1922
}
2023

21-
export function ownsBotMessage(message: Message, member: GuildMember) {
22-
return messageIdToMemberId.get(message.id) === member.id;
24+
export function ownsBotMessage(message: Message, user: User) {
25+
return messageToUserId.get(message.id) === user.id;
2326
}
2427

2528
export function clearMessageOwnership(message: Message) {
26-
messageIdToMemberId.delete(message.id);
29+
messageToUserId.delete(message.id);
2730
}

0 commit comments

Comments
 (0)