fix: handle discord dm reaction allowlist

This commit is contained in:
Shadow
2026-02-12 16:42:04 -06:00
committed by Shadow
parent f8c7ae9b5e
commit fb8e6156ec
2 changed files with 28 additions and 7 deletions

View File

@@ -836,6 +836,22 @@ describe("discord DM reaction handling", () => {
expect(opts.sessionKey).toBe("discord:acc-1:dm:user-1");
});
it("does not drop DM reactions when guild allowlist is configured", async () => {
enqueueSystemEventSpy.mockClear();
resolveAgentRouteMock.mockClear();
const data = makeReactionEvent({ botAsAuthor: true });
const client = makeReactionClient(ChannelType.DM);
const guildEntries = makeEntries({
"guild-123": { slug: "guild-123" },
});
const listener = new DiscordReactionListener(makeReactionListenerParams({ guildEntries }));
await listener.handle(data, client);
expect(enqueueSystemEventSpy).toHaveBeenCalledOnce();
});
it("still processes guild reactions (no regression)", async () => {
enqueueSystemEventSpy.mockClear();
resolveAgentRouteMock.mockClear();
@@ -877,7 +893,7 @@ describe("discord DM reaction handling", () => {
expect(text).not.toContain("undefined");
});
it("routes DM reactions with peer kind 'dm' and user id", async () => {
it("routes DM reactions with peer kind 'direct' and user id", async () => {
enqueueSystemEventSpy.mockClear();
resolveAgentRouteMock.mockClear();

View File

@@ -188,11 +188,14 @@ async function handleDiscordReactionEvent(params: {
if (!user || user.bot) {
return;
}
const guildInfo = resolveDiscordGuildEntry({
guild: data.guild ?? undefined,
guildEntries,
});
if (guildEntries && Object.keys(guildEntries).length > 0 && !guildInfo) {
const isGuildMessage = Boolean(data.guild_id);
const guildInfo = isGuildMessage
? resolveDiscordGuildEntry({
guild: data.guild ?? undefined,
guildEntries,
})
: null;
if (isGuildMessage && guildEntries && Object.keys(guildEntries).length > 0 && !guildInfo) {
return;
}
@@ -261,7 +264,9 @@ async function handleDiscordReactionEvent(params: {
const actorLabel = formatDiscordUserTag(user);
const guildSlug =
guildInfo?.slug ||
(data.guild?.name ? normalizeDiscordSlug(data.guild.name) : (data.guild_id ?? "dm"));
(data.guild?.name
? normalizeDiscordSlug(data.guild.name)
: (data.guild_id ?? (isGroupDm ? "group-dm" : "dm")));
const channelLabel = channelSlug
? `#${channelSlug}`
: channelName