diff --git a/src/agents/tools/discord-actions-guild.ts b/src/agents/tools/discord-actions-guild.ts index beccd855510..85fbdc572fb 100644 --- a/src/agents/tools/discord-actions-guild.ts +++ b/src/agents/tools/discord-actions-guild.ts @@ -39,6 +39,35 @@ function readParentIdParam(params: Record): string | null | und return readStringParam(params, "parentId"); } +type DiscordRoleMutation = (params: { + guildId: string; + userId: string; + roleId: string; +}) => Promise; +type DiscordRoleMutationWithAccount = ( + params: { + guildId: string; + userId: string; + roleId: string; + }, + options: { accountId: string }, +) => Promise; + +async function runRoleMutation(params: { + accountId?: string; + values: Record; + mutate: DiscordRoleMutation & DiscordRoleMutationWithAccount; +}) { + const guildId = readStringParam(params.values, "guildId", { required: true }); + const userId = readStringParam(params.values, "userId", { required: true }); + const roleId = readStringParam(params.values, "roleId", { required: true }); + if (params.accountId) { + await params.mutate({ guildId, userId, roleId }, { accountId: params.accountId }); + return; + } + await params.mutate({ guildId, userId, roleId }); +} + export async function handleDiscordGuildAction( action: string, params: Record, @@ -157,36 +186,14 @@ export async function handleDiscordGuildAction( if (!isActionEnabled("roles", false)) { throw new Error("Discord role changes are disabled."); } - const guildId = readStringParam(params, "guildId", { - required: true, - }); - const userId = readStringParam(params, "userId", { - required: true, - }); - const roleId = readStringParam(params, "roleId", { required: true }); - if (accountId) { - await addRoleDiscord({ guildId, userId, roleId }, { accountId }); - } else { - await addRoleDiscord({ guildId, userId, roleId }); - } + await runRoleMutation({ accountId, values: params, mutate: addRoleDiscord }); return jsonResult({ ok: true }); } case "roleRemove": { if (!isActionEnabled("roles", false)) { throw new Error("Discord role changes are disabled."); } - const guildId = readStringParam(params, "guildId", { - required: true, - }); - const userId = readStringParam(params, "userId", { - required: true, - }); - const roleId = readStringParam(params, "roleId", { required: true }); - if (accountId) { - await removeRoleDiscord({ guildId, userId, roleId }, { accountId }); - } else { - await removeRoleDiscord({ guildId, userId, roleId }); - } + await runRoleMutation({ accountId, values: params, mutate: removeRoleDiscord }); return jsonResult({ ok: true }); } case "channelInfo": {