diff --git a/extensions/discord/src/group-policy.ts b/extensions/discord/src/group-policy.ts index 9394e319818..e41145347a4 100644 --- a/extensions/discord/src/group-policy.ts +++ b/extensions/discord/src/group-policy.ts @@ -76,8 +76,12 @@ function resolveSenderToolsEntry( } function resolveDiscordPolicyContext(params: ChannelGroupContext) { + const guilds = + (params.accountId + ? params.cfg.channels?.discord?.accounts?.[params.accountId]?.guilds + : undefined) ?? params.cfg.channels?.discord?.guilds; const guildEntry = resolveDiscordGuildEntry( - params.cfg.channels?.discord?.guilds, + guilds, params.groupSpace, ); const channelEntries = guildEntry?.channels; diff --git a/extensions/discord/src/targets.test.ts b/extensions/discord/src/targets.test.ts index d06b15064a6..3175bd4c443 100644 --- a/extensions/discord/src/targets.test.ts +++ b/extensions/discord/src/targets.test.ts @@ -182,4 +182,71 @@ describe("discord group policy", () => { }), ).toEqual({ allow: ["message.guild"] }); }); + + it("honors account-scoped guild and channel overrides", () => { + const discordCfg = { + channels: { + discord: { + token: "discord-test", + guilds: { + guild1: { + requireMention: true, + tools: { allow: ["message.root"] }, + }, + }, + accounts: { + work: { + token: "discord-work", + guilds: { + guild1: { + requireMention: false, + tools: { allow: ["message.account"] }, + channels: { + "123": { + requireMention: true, + tools: { allow: ["message.account-channel"] }, + }, + }, + }, + }, + }, + }, + }, + }, + // oxlint-disable-next-line typescript/no-explicit-any + } as any; + + expect( + resolveDiscordGroupRequireMention({ + cfg: discordCfg, + accountId: "work", + groupSpace: "guild1", + groupId: "missing", + }), + ).toBe(false); + expect( + resolveDiscordGroupRequireMention({ + cfg: discordCfg, + accountId: "work", + groupSpace: "guild1", + groupId: "123", + }), + ).toBe(true); + expect( + resolveDiscordGroupToolPolicy({ + cfg: discordCfg, + accountId: "work", + groupSpace: "guild1", + groupId: "missing", + }), + ).toEqual({ allow: ["message.account"] }); + expect( + resolveDiscordGroupToolPolicy({ + cfg: discordCfg, + accountId: "work", + groupSpace: "guild1", + groupId: "123", + }), + ).toEqual({ allow: ["message.account-channel"] }); + }); });