|
1 | | -import { Message, MessageEmbed, GuildMember } from 'discord.js'; |
| 1 | +import { Message, MessageEmbed, User } from 'discord.js'; |
2 | 2 |
|
3 | 3 | const MAX_TRACKED_MESSAGES = 1000; |
4 | 4 |
|
5 | | -const messageIdToMemberId = new Map<string, string>(); |
| 5 | +const messageToUserId = new Map<string, string>(); |
6 | 6 |
|
7 | 7 | export async function sendWithMessageOwnership( |
8 | 8 | message: Message, |
9 | | - toSend: string | MessageEmbed, |
| 9 | + toSend: string | { embed: MessageEmbed }, |
10 | 10 | ) { |
11 | 11 | const sent = await message.channel.send(toSend); |
12 | | - messageIdToMemberId.set(sent.id, message.author.id); |
| 12 | + addMessageOwnership(sent, message.author); |
| 13 | +} |
13 | 14 |
|
| 15 | +export function addMessageOwnership(message: Message, user: User) { |
| 16 | + messageToUserId.set(message.id, user.id); |
14 | 17 | // 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) { |
16 | 19 | // 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); |
18 | 21 | } |
19 | 22 | } |
20 | 23 |
|
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; |
23 | 26 | } |
24 | 27 |
|
25 | 28 | export function clearMessageOwnership(message: Message) { |
26 | | - messageIdToMemberId.delete(message.id); |
| 29 | + messageToUserId.delete(message.id); |
27 | 30 | } |
0 commit comments