mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-09 12:17:40 +00:00
refactor(discord): share member access state
This commit is contained in:
@@ -24,7 +24,7 @@ import {
|
|||||||
resolveDiscordAllowListMatch,
|
resolveDiscordAllowListMatch,
|
||||||
resolveDiscordChannelConfigWithFallback,
|
resolveDiscordChannelConfigWithFallback,
|
||||||
resolveDiscordGuildEntry,
|
resolveDiscordGuildEntry,
|
||||||
resolveDiscordMemberAllowed,
|
resolveDiscordMemberAccessState,
|
||||||
} from "./allow-list.js";
|
} from "./allow-list.js";
|
||||||
import { formatDiscordUserTag } from "./format.js";
|
import { formatDiscordUserTag } from "./format.js";
|
||||||
|
|
||||||
@@ -217,15 +217,15 @@ async function ensureGuildComponentMemberAllowed(params: {
|
|||||||
scope: channelCtx.isThread ? "thread" : "channel",
|
scope: channelCtx.isThread ? "thread" : "channel",
|
||||||
});
|
});
|
||||||
|
|
||||||
const channelUsers = channelConfig?.users ?? guildInfo?.users;
|
const { memberAllowed } = resolveDiscordMemberAccessState({
|
||||||
const channelRoles = channelConfig?.roles ?? guildInfo?.roles;
|
channelConfig,
|
||||||
const memberAllowed = resolveDiscordMemberAllowed({
|
guildInfo,
|
||||||
userAllowList: channelUsers,
|
|
||||||
roleAllowList: channelRoles,
|
|
||||||
memberRoleIds,
|
memberRoleIds,
|
||||||
userId: user.id,
|
sender: {
|
||||||
userName: user.username,
|
id: user.id,
|
||||||
userTag: user.discriminator ? `${user.username}#${user.discriminator}` : undefined,
|
name: user.username,
|
||||||
|
tag: user.discriminator ? `${user.username}#${user.discriminator}` : undefined,
|
||||||
|
},
|
||||||
});
|
});
|
||||||
if (memberAllowed) {
|
if (memberAllowed) {
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -202,6 +202,28 @@ export function resolveDiscordMemberAllowed(params: {
|
|||||||
return userOk || roleOk;
|
return userOk || roleOk;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function resolveDiscordMemberAccessState(params: {
|
||||||
|
channelConfig?: DiscordChannelConfigResolved | null;
|
||||||
|
guildInfo?: DiscordGuildEntryResolved | null;
|
||||||
|
memberRoleIds: string[];
|
||||||
|
sender: { id: string; name?: string; tag?: string };
|
||||||
|
}) {
|
||||||
|
const channelUsers = params.channelConfig?.users ?? params.guildInfo?.users;
|
||||||
|
const channelRoles = params.channelConfig?.roles ?? params.guildInfo?.roles;
|
||||||
|
const hasAccessRestrictions =
|
||||||
|
(Array.isArray(channelUsers) && channelUsers.length > 0) ||
|
||||||
|
(Array.isArray(channelRoles) && channelRoles.length > 0);
|
||||||
|
const memberAllowed = resolveDiscordMemberAllowed({
|
||||||
|
userAllowList: channelUsers,
|
||||||
|
roleAllowList: channelRoles,
|
||||||
|
memberRoleIds: params.memberRoleIds,
|
||||||
|
userId: params.sender.id,
|
||||||
|
userName: params.sender.name,
|
||||||
|
userTag: params.sender.tag,
|
||||||
|
});
|
||||||
|
return { channelUsers, channelRoles, hasAccessRestrictions, memberAllowed } as const;
|
||||||
|
}
|
||||||
|
|
||||||
export function resolveDiscordOwnerAllowFrom(params: {
|
export function resolveDiscordOwnerAllowFrom(params: {
|
||||||
channelConfig?: DiscordChannelConfigResolved | null;
|
channelConfig?: DiscordChannelConfigResolved | null;
|
||||||
guildInfo?: DiscordGuildEntryResolved | null;
|
guildInfo?: DiscordGuildEntryResolved | null;
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ import {
|
|||||||
resolveDiscordAllowListMatch,
|
resolveDiscordAllowListMatch,
|
||||||
resolveDiscordChannelConfigWithFallback,
|
resolveDiscordChannelConfigWithFallback,
|
||||||
resolveDiscordGuildEntry,
|
resolveDiscordGuildEntry,
|
||||||
resolveDiscordMemberAllowed,
|
resolveDiscordMemberAccessState,
|
||||||
resolveDiscordShouldRequireMention,
|
resolveDiscordShouldRequireMention,
|
||||||
resolveGroupDmAllow,
|
resolveGroupDmAllow,
|
||||||
} from "./allow-list.js";
|
} from "./allow-list.js";
|
||||||
@@ -476,18 +476,11 @@ export async function preflightDiscordMessage(
|
|||||||
surface: "discord",
|
surface: "discord",
|
||||||
});
|
});
|
||||||
const hasControlCommandInMessage = hasControlCommand(baseText, params.cfg);
|
const hasControlCommandInMessage = hasControlCommand(baseText, params.cfg);
|
||||||
const channelUsers = channelConfig?.users ?? guildInfo?.users;
|
const { hasAccessRestrictions, memberAllowed } = resolveDiscordMemberAccessState({
|
||||||
const channelRoles = channelConfig?.roles ?? guildInfo?.roles;
|
channelConfig,
|
||||||
const hasAccessRestrictions =
|
guildInfo,
|
||||||
(Array.isArray(channelUsers) && channelUsers.length > 0) ||
|
|
||||||
(Array.isArray(channelRoles) && channelRoles.length > 0);
|
|
||||||
const memberAllowed = resolveDiscordMemberAllowed({
|
|
||||||
userAllowList: channelUsers,
|
|
||||||
roleAllowList: channelRoles,
|
|
||||||
memberRoleIds,
|
memberRoleIds,
|
||||||
userId: sender.id,
|
sender,
|
||||||
userName: sender.name,
|
|
||||||
userTag: sender.tag,
|
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!isDirectMessage) {
|
if (!isDirectMessage) {
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ import {
|
|||||||
normalizeDiscordSlug,
|
normalizeDiscordSlug,
|
||||||
resolveDiscordChannelConfigWithFallback,
|
resolveDiscordChannelConfigWithFallback,
|
||||||
resolveDiscordGuildEntry,
|
resolveDiscordGuildEntry,
|
||||||
resolveDiscordMemberAllowed,
|
resolveDiscordMemberAccessState,
|
||||||
resolveDiscordOwnerAllowFrom,
|
resolveDiscordOwnerAllowFrom,
|
||||||
} from "./allow-list.js";
|
} from "./allow-list.js";
|
||||||
import { resolveDiscordChannelInfo } from "./message-utils.js";
|
import { resolveDiscordChannelInfo } from "./message-utils.js";
|
||||||
@@ -657,18 +657,11 @@ async function dispatchDiscordCommandInteraction(params: {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!isDirectMessage) {
|
if (!isDirectMessage) {
|
||||||
const channelUsers = channelConfig?.users ?? guildInfo?.users;
|
const { hasAccessRestrictions, memberAllowed } = resolveDiscordMemberAccessState({
|
||||||
const channelRoles = channelConfig?.roles ?? guildInfo?.roles;
|
channelConfig,
|
||||||
const hasAccessRestrictions =
|
guildInfo,
|
||||||
(Array.isArray(channelUsers) && channelUsers.length > 0) ||
|
|
||||||
(Array.isArray(channelRoles) && channelRoles.length > 0);
|
|
||||||
const memberAllowed = resolveDiscordMemberAllowed({
|
|
||||||
userAllowList: channelUsers,
|
|
||||||
roleAllowList: channelRoles,
|
|
||||||
memberRoleIds,
|
memberRoleIds,
|
||||||
userId: sender.id,
|
sender,
|
||||||
userName: sender.name,
|
|
||||||
userTag: sender.tag,
|
|
||||||
});
|
});
|
||||||
const authorizers = useAccessGroups
|
const authorizers = useAccessGroups
|
||||||
? [
|
? [
|
||||||
|
|||||||
Reference in New Issue
Block a user