























@@ -1,9 +1,12 @@
11import { resolveCommandAuthorizedFromAuthorizers } from "openclaw/plugin-sdk/command-auth-native";
2+import type { OpenClawConfig } from "openclaw/plugin-sdk/config-types";
23import {
34readStoreAllowFromForDmPolicy,
45resolveDmGroupAccessWithLists,
56type DmGroupAccessDecision,
67} from "openclaw/plugin-sdk/security-runtime";
8+import type { RequestClient } from "../internal/discord.js";
9+import { resolveDiscordDmAccessGroupEntries } from "./access-groups.js";
710import { normalizeDiscordAllowList, resolveDiscordAllowListMatch } from "./allow-list.js";
811912const DISCORD_ALLOW_LIST_PREFIXES = ["discord:", "user:", "pk:"];
@@ -39,13 +42,31 @@ function resolveDmPolicyCommandAuthorization(params: {
3942return params.commandAuthorized;
4043}
414445+async function expandAllowFromWithDiscordAccessGroups(params: {
46+cfg?: OpenClawConfig;
47+allowFrom: string[];
48+sender: { id: string };
49+accountId: string;
50+token?: string;
51+rest?: RequestClient;
52+}) {
53+const matchedGroups = await resolveDiscordDmAccessGroupEntries(params);
54+if (matchedGroups.length === 0) {
55+return params.allowFrom;
56+}
57+return [...params.allowFrom, `discord:${params.sender.id}`];
58+}
59+4260export async function resolveDiscordDmCommandAccess(params: {
4361accountId: string;
4462dmPolicy: DiscordDmPolicy;
4563configuredAllowFrom: string[];
4664sender: { id: string; name?: string; tag?: string };
4765allowNameMatching: boolean;
4866useAccessGroups: boolean;
67+cfg?: OpenClawConfig;
68+token?: string;
69+rest?: RequestClient;
4970readStoreAllowFrom?: () => Promise<string[]>;
5071}): Promise<DiscordDmCommandAccess> {
5172const storeAllowFrom = params.readStoreAllowFrom
@@ -58,13 +79,31 @@ export async function resolveDiscordDmCommandAccess(params: {
5879dmPolicy: params.dmPolicy,
5980shouldRead: params.dmPolicy !== "open",
6081});
82+const [configuredAllowFrom, effectiveStoreAllowFrom] = await Promise.all([
83+expandAllowFromWithDiscordAccessGroups({
84+cfg: params.cfg,
85+allowFrom: params.configuredAllowFrom,
86+sender: params.sender,
87+accountId: params.accountId,
88+token: params.token,
89+rest: params.rest,
90+}),
91+expandAllowFromWithDiscordAccessGroups({
92+cfg: params.cfg,
93+allowFrom: storeAllowFrom,
94+sender: params.sender,
95+accountId: params.accountId,
96+token: params.token,
97+rest: params.rest,
98+}),
99+]);
6110062101const access = resolveDmGroupAccessWithLists({
63102isGroup: false,
64103dmPolicy: params.dmPolicy,
65-allowFrom: params.configuredAllowFrom,
104+allowFrom: configuredAllowFrom,
66105groupAllowFrom: [],
67- storeAllowFrom,
106+storeAllowFrom: effectiveStoreAllowFrom,
68107isSenderAllowed: (allowEntries) =>
69108resolveSenderAllowMatch({
70109 allowEntries,
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。