import type { Command } from "commander"; import type { MessageCliHelpers } from "./helpers.js"; export function registerMessageDiscordAdminCommands(message: Command, helpers: MessageCliHelpers) { const role = message.command("role").description("Role actions"); helpers .withMessageBase( role.command("info").description("List roles").requiredOption("--guild-id ", "Guild id"), ) .action(async (opts) => { await helpers.runMessageAction("role-info", opts); }); helpers .withMessageBase( role .command("add") .description("Add role to a member") .requiredOption("--guild-id ", "Guild id") .requiredOption("--user-id ", "User id") .requiredOption("--role-id ", "Role id"), ) .action(async (opts) => { await helpers.runMessageAction("role-add", opts); }); helpers .withMessageBase( role .command("remove") .description("Remove role from a member") .requiredOption("--guild-id ", "Guild id") .requiredOption("--user-id ", "User id") .requiredOption("--role-id ", "Role id"), ) .action(async (opts) => { await helpers.runMessageAction("role-remove", opts); }); const channel = message.command("channel").description("Channel actions"); helpers .withMessageBase( helpers.withRequiredMessageTarget(channel.command("info").description("Fetch channel info")), ) .action(async (opts) => { await helpers.runMessageAction("channel-info", opts); }); helpers .withMessageBase( channel .command("list") .description("List channels") .requiredOption("--guild-id ", "Guild id"), ) .action(async (opts) => { await helpers.runMessageAction("channel-list", opts); }); const member = message.command("member").description("Member actions"); helpers .withMessageBase( member .command("info") .description("Fetch member info") .requiredOption("--user-id ", "User id"), ) .option("--guild-id ", "Guild id (Discord)") .action(async (opts) => { await helpers.runMessageAction("member-info", opts); }); const voice = message.command("voice").description("Voice actions"); helpers .withMessageBase( voice .command("status") .description("Fetch voice status") .requiredOption("--guild-id ", "Guild id") .requiredOption("--user-id ", "User id"), ) .action(async (opts) => { await helpers.runMessageAction("voice-status", opts); }); const event = message.command("event").description("Event actions"); helpers .withMessageBase( event .command("list") .description("List scheduled events") .requiredOption("--guild-id ", "Guild id"), ) .action(async (opts) => { await helpers.runMessageAction("event-list", opts); }); helpers .withMessageBase( event .command("create") .description("Create a scheduled event") .requiredOption("--guild-id ", "Guild id") .requiredOption("--event-name ", "Event name") .requiredOption("--start-time ", "Event start time"), ) .option("--end-time ", "Event end time") .option("--desc ", "Event description") .option("--channel-id ", "Channel id") .option("--location ", "Event location") .option("--event-type ", "Event type") .action(async (opts) => { await helpers.runMessageAction("event-create", opts); }); helpers .withMessageBase( message .command("timeout") .description("Timeout a member") .requiredOption("--guild-id ", "Guild id") .requiredOption("--user-id ", "User id"), ) .option("--duration-min ", "Timeout duration minutes") .option("--until ", "Timeout until") .option("--reason ", "Moderation reason") .action(async (opts) => { await helpers.runMessageAction("timeout", opts); }); helpers .withMessageBase( message .command("kick") .description("Kick a member") .requiredOption("--guild-id ", "Guild id") .requiredOption("--user-id ", "User id"), ) .option("--reason ", "Moderation reason") .action(async (opts) => { await helpers.runMessageAction("kick", opts); }); helpers .withMessageBase( message .command("ban") .description("Ban a member") .requiredOption("--guild-id ", "Guild id") .requiredOption("--user-id ", "User id"), ) .option("--reason ", "Moderation reason") .option("--delete-days ", "Ban delete message days") .action(async (opts) => { await helpers.runMessageAction("ban", opts); }); }