refactor(agents): share discord role mutation parsing

This commit is contained in:
Peter Steinberger
2026-02-18 18:54:34 +00:00
parent 9362e0f9a9
commit 8d4ffe350e

View File

@@ -39,6 +39,35 @@ function readParentIdParam(params: Record<string, unknown>): string | null | und
return readStringParam(params, "parentId");
}
type DiscordRoleMutation = (params: {
guildId: string;
userId: string;
roleId: string;
}) => Promise<unknown>;
type DiscordRoleMutationWithAccount = (
params: {
guildId: string;
userId: string;
roleId: string;
},
options: { accountId: string },
) => Promise<unknown>;
async function runRoleMutation(params: {
accountId?: string;
values: Record<string, unknown>;
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<string, unknown>,
@@ -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": {