惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Microsoft Azure Blog
Microsoft Azure Blog
aimingoo的专栏
aimingoo的专栏
F
Fortinet All Blogs
Blog — PlanetScale
Blog — PlanetScale
GbyAI
GbyAI
MongoDB | Blog
MongoDB | Blog
月光博客
月光博客
The Cloudflare Blog
量子位
T
Tailwind CSS Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
B
Blog
MyScale Blog
MyScale Blog
T
The Blog of Author Tim Ferriss
The GitHub Blog
The GitHub Blog
G
Google Developers Blog
D
DataBreaches.Net
V
Visual Studio Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Last Week in AI
Last Week in AI
U
Unit 42
博客园 - 聂微东
有赞技术团队
有赞技术团队
A
About on SuperTechFans

Recent Commits to openclaw:main

test: merge chat side-result checks · openclaw/openclaw@ddd2c2a test: merge cron history checks · openclaw/openclaw@f7eb746 test: merge responsive navigation shell checks · openclaw/openclaw@c2e4b47 docs(changelog): add codex oauth fixes · openclaw/openclaw@628e6cd test: merge navigation routing cases · openclaw/openclaw@5d8cecb Tests: mock channel registry bundled fallback · openclaw/openclaw@2b08233 Secrets: avoid broad web search discovery for single plugin config · openclaw/openclaw@a464f59 test: merge config view browser checks · openclaw/openclaw@20cf511 fix(status): align oauth health with runtime · openclaw/openclaw@eed7116 feat: add macOS screen snapshots for monitor preview (#67954) thanks … · openclaw/openclaw@f377db1 fix: report shared auth scopes in hello-ok (#67810) thanks @BunsDev · openclaw/openclaw@0b6c39b Auto-reply: avoid eager bundled route fallback · openclaw/openclaw@3ea1bf4 Tests: narrow session binding contract setup · openclaw/openclaw@54e4e16 fix(macOS): enable undo/redo in webchat composer text input (#34962) · openclaw/openclaw@00951dc Tests: speed up channel setup promotion · openclaw/openclaw@82b529a Docs: refresh agent instructions · openclaw/openclaw@5775fe2 fix(auth): serialize OAuth refresh across agents to fix #26322 (#67876) · openclaw/openclaw@8e79080 test: allow ollama public surface boundary test · openclaw/openclaw@7d4f1a6 Docs: add test performance guardrails · openclaw/openclaw@89706d3 Tests: restore context-engine usage proof · openclaw/openclaw@e4c4f95 Tests: slim context engine runtime coverage · openclaw/openclaw@74c198f ci: retry failed custom checkouts · openclaw/openclaw@0ee5baf test: trim duplicate provider auth onboarding cases · openclaw/openclaw@1ffc02e matrix: fix sessions_spawn --thread subagent session spawning (#67643) · openclaw/openclaw@1ce2596 test: reduce auth choice fixture churn · openclaw/openclaw@857b9cd test: mock health status config boundaries · openclaw/openclaw@9d5ab4a test: mock onboard config io boundary · openclaw/openclaw@299694d test: mock legacy state plugin boundaries · openclaw/openclaw@2713089 test: mock channel install boundaries · openclaw/openclaw@b945248 test: mock doctor preview channel boundaries · openclaw/openclaw@b1a3ad4
Revert "feat(discord): add server management helper actio...
hannesrudolp · 2026-06-23 · via Recent Commits to openclaw:main

@@ -36,20 +36,6 @@ import {

3636

uploadEmojiDiscord,

3737

uploadStickerDiscord,

3838

resolveEventCoverImage,

39-

fetchGuildSettingsDiscord,

40-

editGuildSettingsDiscord,

41-

listGuildRolesDiscord,

42-

createGuildRoleDiscord,

43-

editGuildRoleDiscord,

44-

deleteGuildRoleDiscord,

45-

listAutoModerationRulesDiscord,

46-

createAutoModerationRuleDiscord,

47-

editAutoModerationRuleDiscord,

48-

deleteAutoModerationRuleDiscord,

49-

listChannelWebhooksDiscord,

50-

createChannelWebhookDiscord,

51-

editWebhookDiscord,

52-

deleteWebhookDiscord,

5339

} from "../send.js";

5440

import {

5541

createDiscordActionOptions,

@@ -82,20 +68,6 @@ export const discordGuildActionRuntime = {

8268

setChannelPermissionDiscord,

8369

uploadEmojiDiscord,

8470

uploadStickerDiscord,

85-

fetchGuildSettingsDiscord,

86-

editGuildSettingsDiscord,

87-

listGuildRolesDiscord,

88-

createGuildRoleDiscord,

89-

editGuildRoleDiscord,

90-

deleteGuildRoleDiscord,

91-

listAutoModerationRulesDiscord,

92-

createAutoModerationRuleDiscord,

93-

editAutoModerationRuleDiscord,

94-

deleteAutoModerationRuleDiscord,

95-

listChannelWebhooksDiscord,

96-

createChannelWebhookDiscord,

97-

editWebhookDiscord,

98-

deleteWebhookDiscord,

9971

};

1007210173

type DiscordRoleMutationOpts = { cfg: OpenClawConfig; accountId?: string };

@@ -162,84 +134,6 @@ const guildAdminActionGuards: Partial<Record<string, GuildAdminActionGuard>> = {

162134

disabledMessage: "Discord role changes are disabled.",

163135

permissions: [PermissionFlagsBits.ManageRoles],

164136

},

165-

roleCreate: {

166-

gate: "roleManagement",

167-

defaultEnabled: false,

168-

disabledMessage: "Discord role management is disabled.",

169-

permissions: [PermissionFlagsBits.ManageRoles],

170-

},

171-

roleEdit: {

172-

gate: "roleManagement",

173-

defaultEnabled: false,

174-

disabledMessage: "Discord role management is disabled.",

175-

permissions: [PermissionFlagsBits.ManageRoles],

176-

},

177-

roleDelete: {

178-

gate: "roleManagement",

179-

defaultEnabled: false,

180-

disabledMessage: "Discord role management is disabled.",

181-

permissions: [PermissionFlagsBits.ManageRoles],

182-

},

183-

serverInfo: {

184-

gate: "server",

185-

defaultEnabled: false,

186-

disabledMessage: "Discord server inspection is disabled.",

187-

permissions: [PermissionFlagsBits.ManageGuild],

188-

},

189-

serverEdit: {

190-

gate: "server",

191-

defaultEnabled: false,

192-

disabledMessage: "Discord server management is disabled.",

193-

permissions: [PermissionFlagsBits.ManageGuild],

194-

},

195-

automodList: {

196-

gate: "automod",

197-

defaultEnabled: false,

198-

disabledMessage: "Discord AutoMod management is disabled.",

199-

permissions: [PermissionFlagsBits.ManageGuild],

200-

},

201-

automodCreate: {

202-

gate: "automod",

203-

defaultEnabled: false,

204-

disabledMessage: "Discord AutoMod management is disabled.",

205-

permissions: [PermissionFlagsBits.ManageGuild],

206-

},

207-

automodEdit: {

208-

gate: "automod",

209-

defaultEnabled: false,

210-

disabledMessage: "Discord AutoMod management is disabled.",

211-

permissions: [PermissionFlagsBits.ManageGuild],

212-

},

213-

automodDelete: {

214-

gate: "automod",

215-

defaultEnabled: false,

216-

disabledMessage: "Discord AutoMod management is disabled.",

217-

permissions: [PermissionFlagsBits.ManageGuild],

218-

},

219-

webhookList: {

220-

gate: "webhooks",

221-

defaultEnabled: false,

222-

disabledMessage: "Discord webhook management is disabled.",

223-

permissions: [PermissionFlagsBits.ManageWebhooks],

224-

},

225-

webhookCreate: {

226-

gate: "webhooks",

227-

defaultEnabled: false,

228-

disabledMessage: "Discord webhook management is disabled.",

229-

permissions: [PermissionFlagsBits.ManageWebhooks],

230-

},

231-

webhookEdit: {

232-

gate: "webhooks",

233-

defaultEnabled: false,

234-

disabledMessage: "Discord webhook management is disabled.",

235-

permissions: [PermissionFlagsBits.ManageWebhooks],

236-

},

237-

webhookDelete: {

238-

gate: "webhooks",

239-

defaultEnabled: false,

240-

disabledMessage: "Discord webhook management is disabled.",

241-

permissions: [PermissionFlagsBits.ManageWebhooks],

242-

},

243137

eventCreate: {

244138

gate: "events",

245139

disabledMessage: "Discord events are disabled.",

@@ -457,18 +351,6 @@ function readChannelPermissionTarget(params: Record<string, unknown>) {

457351

};

458352

}

459353460-

function readManagementPayload(params: Record<string, unknown>, excluded: readonly string[]) {

461-

const excludedSet = new Set(["action", "accountId", "senderUserId", ...excluded]);

462-

return Object.fromEntries(

463-

Object.entries(params)

464-

.filter(([key]) => !excludedSet.has(key))

465-

.map(([key, value]) => [

466-

key.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`),

467-

value,

468-

]),

469-

);

470-

}

471-472354

export async function handleDiscordGuildAction(

473355

action: string,

474356

params: Record<string, unknown>,

@@ -600,128 +482,6 @@ export async function handleDiscordGuildAction(

600482

});

601483

return jsonResult({ ok: true });

602484

}

603-

case "roleCreate": {

604-

const guildId = readStringParam(params, "guildId", { required: true });

605-

const role = await discordGuildActionRuntime.createGuildRoleDiscord(

606-

guildId,

607-

readManagementPayload(params, ["guildId"]),

608-

withOpts(),

609-

);

610-

return jsonResult({ ok: true, role });

611-

}

612-

case "roleEdit": {

613-

const guildId = readStringParam(params, "guildId", { required: true });

614-

const roleId = readStringParam(params, "roleId", { required: true });

615-

const role = await discordGuildActionRuntime.editGuildRoleDiscord(

616-

guildId,

617-

roleId,

618-

readManagementPayload(params, ["guildId", "roleId"]),

619-

withOpts(),

620-

);

621-

return jsonResult({ ok: true, role });

622-

}

623-

case "roleDelete": {

624-

const guildId = readStringParam(params, "guildId", { required: true });

625-

const roleId = readStringParam(params, "roleId", { required: true });

626-

return jsonResult(

627-

await discordGuildActionRuntime.deleteGuildRoleDiscord(guildId, roleId, withOpts()),

628-

);

629-

}

630-

case "serverInfo": {

631-

const guildId = readStringParam(params, "guildId", { required: true });

632-

return jsonResult({

633-

ok: true,

634-

guild: await discordGuildActionRuntime.fetchGuildSettingsDiscord(guildId, withOpts()),

635-

});

636-

}

637-

case "serverEdit": {

638-

const guildId = readStringParam(params, "guildId", { required: true });

639-

return jsonResult({

640-

ok: true,

641-

guild: await discordGuildActionRuntime.editGuildSettingsDiscord(

642-

guildId,

643-

readManagementPayload(params, ["guildId"]),

644-

withOpts(),

645-

),

646-

});

647-

}

648-

case "automodList": {

649-

const guildId = readStringParam(params, "guildId", { required: true });

650-

return jsonResult({

651-

ok: true,

652-

rules: await discordGuildActionRuntime.listAutoModerationRulesDiscord(guildId, withOpts()),

653-

});

654-

}

655-

case "automodCreate": {

656-

const guildId = readStringParam(params, "guildId", { required: true });

657-

return jsonResult({

658-

ok: true,

659-

rule: await discordGuildActionRuntime.createAutoModerationRuleDiscord(

660-

guildId,

661-

readManagementPayload(params, ["guildId"]),

662-

withOpts(),

663-

),

664-

});

665-

}

666-

case "automodEdit": {

667-

const guildId = readStringParam(params, "guildId", { required: true });

668-

const ruleId = readStringParam(params, "ruleId", { required: true });

669-

return jsonResult({

670-

ok: true,

671-

rule: await discordGuildActionRuntime.editAutoModerationRuleDiscord(

672-

guildId,

673-

ruleId,

674-

readManagementPayload(params, ["guildId", "ruleId"]),

675-

withOpts(),

676-

),

677-

});

678-

}

679-

case "automodDelete": {

680-

const guildId = readStringParam(params, "guildId", { required: true });

681-

const ruleId = readStringParam(params, "ruleId", { required: true });

682-

return jsonResult(

683-

await discordGuildActionRuntime.deleteAutoModerationRuleDiscord(

684-

guildId,

685-

ruleId,

686-

withOpts(),

687-

),

688-

);

689-

}

690-

case "webhookList": {

691-

const channelId = readStringParam(params, "channelId", { required: true });

692-

return jsonResult({

693-

ok: true,

694-

webhooks: await discordGuildActionRuntime.listChannelWebhooksDiscord(channelId, withOpts()),

695-

});

696-

}

697-

case "webhookCreate": {

698-

const channelId = readStringParam(params, "channelId", { required: true });

699-

return jsonResult({

700-

ok: true,

701-

webhook: await discordGuildActionRuntime.createChannelWebhookDiscord(

702-

channelId,

703-

readManagementPayload(params, ["channelId"]),

704-

withOpts(),

705-

),

706-

});

707-

}

708-

case "webhookEdit": {

709-

const webhookId = readStringParam(params, "webhookId", { required: true });

710-

return jsonResult({

711-

ok: true,

712-

webhook: await discordGuildActionRuntime.editWebhookDiscord(

713-

webhookId,

714-

readManagementPayload(params, ["webhookId"]),

715-

withOpts(),

716-

),

717-

});

718-

}

719-

case "webhookDelete": {

720-

const webhookId = readStringParam(params, "webhookId", { required: true });

721-

return jsonResult(

722-

await discordGuildActionRuntime.deleteWebhookDiscord(webhookId, withOpts()),

723-

);

724-

}

725485

case "channelInfo": {

726486

if (!isActionEnabled("channelInfo")) {

727487

throw new Error("Discord channel info is disabled.");