























@@ -0,0 +1,86 @@
1+import { logVerbose } from "openclaw/plugin-sdk/runtime-env";
2+import { logDebug } from "openclaw/plugin-sdk/text-runtime";
3+import {
4+isDiscordGroupAllowedByPolicy,
5+resolveGroupDmAllow,
6+type DiscordChannelConfigResolved,
7+type DiscordGuildEntryResolved,
8+} from "./allow-list.js";
9+10+export function resolveDiscordPreflightChannelAccess(params: {
11+isGuildMessage: boolean;
12+isGroupDm: boolean;
13+groupPolicy: "open" | "disabled" | "allowlist";
14+groupDmChannels?: string[];
15+messageChannelId: string;
16+displayChannelName?: string;
17+displayChannelSlug: string;
18+guildInfo: DiscordGuildEntryResolved | null;
19+channelConfig: DiscordChannelConfigResolved | null;
20+channelMatchMeta: string;
21+}): { allowed: boolean; channelAllowlistConfigured: boolean; channelAllowed: boolean } {
22+if (params.isGuildMessage && params.channelConfig?.enabled === false) {
23+logDebug(`[discord-preflight] drop: channel disabled`);
24+logVerbose(
25+`Blocked discord channel ${params.messageChannelId} (channel disabled, ${params.channelMatchMeta})`,
26+);
27+return { allowed: false, channelAllowlistConfigured: false, channelAllowed: false };
28+}
29+30+const groupDmAllowed =
31+params.isGroupDm &&
32+resolveGroupDmAllow({
33+channels: params.groupDmChannels,
34+channelId: params.messageChannelId,
35+channelName: params.displayChannelName,
36+channelSlug: params.displayChannelSlug,
37+});
38+if (params.isGroupDm && !groupDmAllowed) {
39+return { allowed: false, channelAllowlistConfigured: false, channelAllowed: false };
40+}
41+42+const channelAllowlistConfigured =
43+Boolean(params.guildInfo?.channels) && Object.keys(params.guildInfo?.channels ?? {}).length > 0;
44+const channelAllowed = params.channelConfig?.allowed !== false;
45+if (
46+params.isGuildMessage &&
47+!isDiscordGroupAllowedByPolicy({
48+groupPolicy: params.groupPolicy,
49+guildAllowlisted: Boolean(params.guildInfo),
50+ channelAllowlistConfigured,
51+ channelAllowed,
52+})
53+) {
54+if (params.groupPolicy === "disabled") {
55+logDebug(`[discord-preflight] drop: groupPolicy disabled`);
56+logVerbose(`discord: drop guild message (groupPolicy: disabled, ${params.channelMatchMeta})`);
57+} else if (!channelAllowlistConfigured) {
58+logDebug(`[discord-preflight] drop: groupPolicy allowlist, no channel allowlist configured`);
59+logVerbose(
60+`discord: drop guild message (groupPolicy: allowlist, no channel allowlist, ${params.channelMatchMeta})`,
61+);
62+} else {
63+logDebug(
64+`[discord] Ignored message from channel ${params.messageChannelId} (not in guild allowlist). Add to guilds.<guildId>.channels to enable.`,
65+);
66+logVerbose(
67+`Blocked discord channel ${params.messageChannelId} not in guild channel allowlist (groupPolicy: allowlist, ${params.channelMatchMeta})`,
68+);
69+}
70+return { allowed: false, channelAllowlistConfigured, channelAllowed };
71+}
72+73+if (params.isGuildMessage && params.channelConfig?.allowed === false) {
74+logDebug(`[discord-preflight] drop: channelConfig.allowed===false`);
75+logVerbose(
76+`Blocked discord channel ${params.messageChannelId} not in guild channel allowlist (${params.channelMatchMeta})`,
77+);
78+return { allowed: false, channelAllowlistConfigured, channelAllowed };
79+}
80+if (params.isGuildMessage) {
81+logDebug(`[discord-preflight] pass: channel allowed`);
82+logVerbose(`discord: allow channel ${params.messageChannelId} (${params.channelMatchMeta})`);
83+}
84+85+return { allowed: true, channelAllowlistConfigured, channelAllowed };
86+}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。