From ad4ce0706f10fa30ee237cbc200ee8fba3dd9eb5 Mon Sep 17 00:00:00 2001 From: Catalan Lover <48515417+FSG-Cat@users.noreply.github.com> Date: Tue, 28 Apr 2026 13:51:04 +0200 Subject: [PATCH] Add command to set display name for main bot in AS mode (#1103) --- .changeset/brave-carrots-draw.md | 5 +++ .../appservice/bot/AppserviceBotCommands.ts | 2 + .../src/appservice/bot/DisplaynameCommand.tsx | 42 +++++++++++++++++++ 3 files changed, 49 insertions(+) create mode 100644 .changeset/brave-carrots-draw.md create mode 100644 apps/draupnir/src/appservice/bot/DisplaynameCommand.tsx diff --git a/.changeset/brave-carrots-draw.md b/.changeset/brave-carrots-draw.md new file mode 100644 index 00000000..2193baff --- /dev/null +++ b/.changeset/brave-carrots-draw.md @@ -0,0 +1,5 @@ +--- +"draupnir": patch +--- + +Add set display name command to appservice main bot. diff --git a/apps/draupnir/src/appservice/bot/AppserviceBotCommands.ts b/apps/draupnir/src/appservice/bot/AppserviceBotCommands.ts index 263a7b4a..ffd53cd9 100644 --- a/apps/draupnir/src/appservice/bot/AppserviceBotCommands.ts +++ b/apps/draupnir/src/appservice/bot/AppserviceBotCommands.ts @@ -20,12 +20,14 @@ import { } from "./ListCommand"; import { AppserviceProvisionForUserCommand } from "./ProvisionCommand"; import { AppserviceVersionCommand } from "./VersionCommand"; +import { AppserviceDisplaynameCommand } from "./DisplaynameCommand"; AppserviceBotCommands.internCommand(AppserviceBotHelpCommand, ["admin", "help"]) .internCommand(AppserviceAllowCommand, ["admin", "allow"]) .internCommand(AppserviceRemoveCommand, ["admin", "remove"]) .internCommand(AppserviceProvisionForUserCommand, ["admin", "provision"]) .internCommand(AppserviceVersionCommand, ["admin", "version"]) + .internCommand(AppserviceDisplaynameCommand, ["admin", "displayname"]) .internCommand(AppserviceRestartDraupnirCommand, ["admin", "restart"]) .internCommand(AppserviceListUnstartedCommand, [ "admin", diff --git a/apps/draupnir/src/appservice/bot/DisplaynameCommand.tsx b/apps/draupnir/src/appservice/bot/DisplaynameCommand.tsx new file mode 100644 index 00000000..4313fbe0 --- /dev/null +++ b/apps/draupnir/src/appservice/bot/DisplaynameCommand.tsx @@ -0,0 +1,42 @@ +// SPDX-FileCopyrightText: 2026 Catalan Lover +// +// SPDX-License-Identifier: Apache-2.0 + +import { AppserviceAdaptorContext } from "./AppserviceBotPrerequisite"; +import { ActionResult, isError, Ok } from "matrix-protection-suite"; +import { + StringPresentationType, + describeCommand, +} from "@the-draupnir-project/interface-manager"; +import { AppserviceBotInterfaceAdaptor } from "./AppserviceBotInterfaceAdaptor"; +import { resultifyBotSDKRequestError } from "matrix-protection-suite-for-matrix-bot-sdk"; + +export const AppserviceDisplaynameCommand = describeCommand({ + summary: "Sets the displayname of the main appservice admin bot.", + parameters: [], + rest: { + name: "displayname", + acceptor: StringPresentationType, + }, + async executor( + context: AppserviceAdaptorContext, + _info, + _keywords, + displaynameParts + ): Promise> { + const displayname = displaynameParts.join(" "); + const setDisplaynameResult = await context.client + .setDisplayName(displayname) + .then((_) => Ok(undefined), resultifyBotSDKRequestError); + if (isError(setDisplaynameResult)) { + return setDisplaynameResult.elaborate( + `Failed to set appservice bot displayname to ${displayname}` + ); + } + return setDisplaynameResult; + }, +}); + +AppserviceBotInterfaceAdaptor.describeRenderer(AppserviceDisplaynameCommand, { + isAlwaysSupposedToUseDefaultRenderer: true, +});