openskynet / src /agents /tools /discord-actions-moderation-shared.ts
Darochin's picture
Mirror OpenSkyNet workspace snapshot from Git HEAD
fc93158 verified
import { PermissionFlagsBits } from "discord-api-types/v10";
import { readNumberParam, readStringParam } from "./common.js";
export type DiscordModerationAction = "timeout" | "kick" | "ban";
export type DiscordModerationCommand = {
action: DiscordModerationAction;
guildId: string;
userId: string;
durationMinutes?: number;
until?: string;
reason?: string;
deleteMessageDays?: number;
};
const moderationPermissions: Record<DiscordModerationAction, bigint> = {
timeout: PermissionFlagsBits.ModerateMembers,
kick: PermissionFlagsBits.KickMembers,
ban: PermissionFlagsBits.BanMembers,
};
export function isDiscordModerationAction(action: string): action is DiscordModerationAction {
return action === "timeout" || action === "kick" || action === "ban";
}
export function requiredGuildPermissionForModerationAction(
action: DiscordModerationAction,
): bigint {
return moderationPermissions[action];
}
export function readDiscordModerationCommand(
action: string,
params: Record<string, unknown>,
): DiscordModerationCommand {
if (!isDiscordModerationAction(action)) {
throw new Error(`Unsupported Discord moderation action: ${action}`);
}
return {
action,
guildId: readStringParam(params, "guildId", { required: true }),
userId: readStringParam(params, "userId", { required: true }),
durationMinutes: readNumberParam(params, "durationMinutes", { integer: true }),
until: readStringParam(params, "until"),
reason: readStringParam(params, "reason"),
deleteMessageDays: readNumberParam(params, "deleteMessageDays", { integer: true }),
};
}