From a17625ac8f4ae9a8e7d482c6cd97d1792c17c2ae Mon Sep 17 00:00:00 2001 From: gnuxie Date: Mon, 11 Dec 2023 15:39:37 +0000 Subject: [PATCH] Update CommandHandler and Help for migrated commands. --- src/commands/CommandHandler.ts | 62 ++++++++-------------------------- src/commands/Help.tsx | 38 ++++----------------- 2 files changed, 21 insertions(+), 79 deletions(-) diff --git a/src/commands/CommandHandler.ts b/src/commands/CommandHandler.ts index f8bec264..9b54c10f 100644 --- a/src/commands/CommandHandler.ts +++ b/src/commands/CommandHandler.ts @@ -26,7 +26,6 @@ limitations under the License. */ import { LogService, RichReply } from "matrix-bot-sdk"; -import { parse as tokenize } from "shell-quote"; import { readCommand } from "./interface-manager/CommandReader"; import { BaseFunction, CommandTable, defineCommandTable, findCommandTable, findTableCommand } from "./interface-manager/InterfaceCommand"; import { findMatrixInterfaceAdaptor, MatrixContext } from "./interface-manager/MatrixInterfaceAdaptor"; @@ -42,21 +41,30 @@ export interface DraupnirContext extends MatrixContext { export type DraupnirBaseExecutor = (this: DraupnirContext, ...args: any[]) => Promise>; +// Plesae keep these in alphabetical order. defineCommandTable("synapse admin"); +import "./AliasCommands"; +import "./DeactivateCommand"; import "./HijackRoomCommand"; import "./ShutdownRoomCommand"; -import "./DeactivateCommand"; -import "./AliasCommands"; defineCommandTable("mjolnir").importTable(findCommandTable("synapse admin")); import "./Ban"; -import "./Unban"; -import "./StatusCommand"; +import "./CreateBanListCommand"; +import "./Help"; +import "./ImportCommand"; +import "./KickCommand"; +import "./PermissionCheckCommand"; +import "./ProtectionsCommands"; +import "./RedactCommand"; +import "./ResolveAlias"; import "./Rooms"; import "./Rules"; +import "./SetDisplayNameCommand" +import "./SetPowerLevelCommand"; +import "./StatusCommand"; +import "./Unban"; import "./WatchUnwatchCommand"; -import "./Help"; -import "./SetDisplayNameCommand"; export const COMMAND_PREFIX = "!draupnir"; @@ -68,46 +76,6 @@ export async function handleCommand( commandTable: CommandTable ) { try { - /** - * TODO Delete these: - - if (parts[1] === 'joins') { - return await showJoinsStatus(roomID, event, mjolnir, parts.slice(2)); // joins - } else if (parts[1] === 'sync') { - return await execSyncCommand(roomID, event, mjolnir); - } else if (parts[1] === 'verify') { - return await execPermissionCheckCommand(roomID, event, mjolnir); - } else if (parts.length >= 5 && parts[1] === 'list' && parts[2] === 'create') { - return await execCreateListCommand(roomID, event, mjolnir, parts); - } else if (parts[1] === 'redact' && parts.length > 1) { - return await execRedactCommand(roomID, event, mjolnir, parts); - } else if (parts[1] === 'import' && parts.length > 2) { - return await execImportCommand(roomID, event, mjolnir, parts); - } else if (parts[1] === 'default' && parts.length > 2) { - return await execSetDefaultListCommand(roomID, event, mjolnir, parts); - } else if (parts[1] === 'protections') { - return await execListProtections(roomID, event, mjolnir, parts); - } else if (parts[1] === 'enable' && parts.length > 1) { - return await execEnableProtection(roomID, event, mjolnir, parts); - } else if (parts[1] === 'disable' && parts.length > 1) { - return await execDisableProtection(roomID, event, mjolnir, parts); - } else if (parts[1] === 'config' && parts[2] === 'set' && parts.length > 3) { - return await execConfigSetProtection(roomID, event, mjolnir, parts.slice(3)) - } else if (parts[1] === 'config' && parts[2] === 'add' && parts.length > 3) { - return await execConfigAddProtection(roomID, event, mjolnir, parts.slice(3)) - } else if (parts[1] === 'config' && parts[2] === 'remove' && parts.length > 3) { - return await execConfigRemoveProtection(roomID, event, mjolnir, parts.slice(3)) - } else if (parts[1] === 'config' && parts[2] === 'get') { - return await execConfigGetProtection(roomID, event, mjolnir, parts.slice(3)) - } else if (parts[1] === 'resolve' && parts.length > 2) { - return await execResolveCommand(roomID, event, mjolnir, parts); - } else if (parts[1] === 'powerlevel' && parts.length > 3) { - return await execSetPowerLevelCommand(roomID, event, mjolnir, parts); - } else if (parts[1] === 'since') { - return await execSinceCommand(roomID, event, mjolnir, tokens); - } else if (parts[1] === 'kick' && parts.length > 2) { - return await execKickCommand(roomID, event, mjolnir, parts); - */ const readItems = readCommand(normalisedCommand).slice(1); // remove "!mjolnir" const stream = new ArgumentStream(readItems); const command = commandTable.findAMatchingCommand(stream) diff --git a/src/commands/Help.tsx b/src/commands/Help.tsx index fbf911e9..558f4395 100644 --- a/src/commands/Help.tsx +++ b/src/commands/Help.tsx @@ -30,33 +30,9 @@ import { CommandTable, defineInterfaceCommand, findCommandTable, findTableComman import { renderCommandSummary } from "./interface-manager/MatrixHelpRenderer"; import { JSXFactory } from "./interface-manager/JSXFactory"; import { findPresentationType, parameters, RestDescription } from "./interface-manager/ParameterParsing"; -import { CommandResult } from "./interface-manager/Validation"; import { defineMatrixInterfaceAdaptor } from "./interface-manager/MatrixInterfaceAdaptor"; import { renderMatrixAndSend } from "./interface-manager/DeadDocumentMatrix"; - -const oldHelpMenu = "" + -"!mjolnir - Print status information\n" + -"!mjolnir status - Print status information\n" + -"!mjolnir status protection [subcommand] - Print status information for a protection\n" + -"!mjolnir redact [room alias/ID] [limit] - Redacts messages by the sender in the target room (or all rooms), up to a maximum number of events in the backlog (default 1000)\n" + -"!mjolnir redact - Redacts a message by permalink\n" + -"!mjolnir kick [room alias/ID] [reason] - Kicks a user or all of those matching a glob in a particular room or all protected rooms\n" + -"!mjolnir sync - Force updates of all lists and re-apply rules\n" + -"!mjolnir verify - Ensures Mjolnir can moderate all your rooms\n" + -"!mjolnir list create - Creates a new ban list with the given shortcode and alias\n" + -"!mjolnir import - Imports bans and ACLs into the given list\n" + -"!mjolnir default - Sets the default list for commands\n" + -"!mjolnir protections - List all available protections\n" + -"!mjolnir enable - Enables a particular protection\n" + -"!mjolnir disable - Disables a particular protection\n" + -"!mjolnir config set . [value] - Change a protection setting\n" + -"!mjolnir config add . [value] - Add a value to a list protection setting\n" + -"!mjolnir config remove . [value] - Remove a value from a list protection setting\n" + -"!mjolnir config get [protection] - List protection settings\n" + -"!mjolnir resolve - Resolves a room alias to a room ID\n" + -"!mjolnir since / [rooms...] [reason] - Apply an action ('kick', 'ban', 'mute', 'unmute' or 'show') to all users who joined a room since / (up to users)\n" + -"!mjolnir powerlevel [room alias/ID] - Sets the power level of the user in the specified room (or all protected rooms)\n" + -"!mjolnir help - This menu\n"; +import { ActionResult, Ok, isError } from "matrix-protection-suite"; function renderTableHelp(table: CommandTable): DocumentNode { // FIXME: is it possible to force case of table names? @@ -71,10 +47,6 @@ function renderTableHelp(table: CommandTable): DocumentNode { function renderMjolnirHelp(mjolnirTable: CommandTable): DocumentNode { return -
- Old Commands: -
{oldHelpMenu}
-
{renderTableHelp(mjolnirTable)}
} @@ -82,15 +54,17 @@ function renderMjolnirHelp(mjolnirTable: CommandTable): DocumentNode { defineInterfaceCommand({ parameters: parameters([], new RestDescription('command parts', findPresentationType("any"))), table: "mjolnir", - command: async function() { return CommandResult.Ok(findCommandTable("mjolnir")) }, + command: async function() { + return Ok(findCommandTable("mjolnir")) + }, designator: ["help"], summary: "Display this message" }) defineMatrixInterfaceAdaptor({ interfaceCommand: findTableCommand("mjolnir", "help"), - renderer: async function(client, commandRoomId, event, result) { - if (result.isErr()) { + renderer: async function(client, commandRoomId, event, result: ActionResult) { + if (isError(result)) { throw new TypeError("This command isn't supposed to fail"); } await renderMatrixAndSend(