From ee53e2ddd076d0abf849836704f85804536cb3bd Mon Sep 17 00:00:00 2001 From: rubyowo Date: Fri, 20 May 2022 14:41:54 +0400 Subject: [PATCH] transfered code from `TagListAliasesCmd` into `TagListCmd` and refactored `TagListCmd` --- backend/src/plugins/Tags/TagsPlugin.ts | 2 - .../Tags/commands/TagListAliasesCmd.ts | 28 ------------ .../src/plugins/Tags/commands/TagListCmd.ts | 44 +++++++++++++++++-- .../Tags/util/matchAndRenderTagFromString.ts | 1 + 4 files changed, 42 insertions(+), 33 deletions(-) delete mode 100644 backend/src/plugins/Tags/commands/TagListAliasesCmd.ts diff --git a/backend/src/plugins/Tags/TagsPlugin.ts b/backend/src/plugins/Tags/TagsPlugin.ts index 63930a21..d7453076 100644 --- a/backend/src/plugins/Tags/TagsPlugin.ts +++ b/backend/src/plugins/Tags/TagsPlugin.ts @@ -16,7 +16,6 @@ import { TagCreateCmd } from "./commands/TagCreateCmd"; import { TagDeleteCmd } from "./commands/TagDeleteCmd"; import { TagEvalCmd } from "./commands/TagEvalCmd"; import { TagListCmd } from "./commands/TagListCmd"; -import { TagListAliasesCmd } from "./commands/TagListAliasesCmd"; import { TagSourceCmd } from "./commands/TagSourceCmd"; import { ConfigSchema, TagsPluginType } from "./types"; import { findTagByName } from "./util/findTagByName"; @@ -84,7 +83,6 @@ export const TagsPlugin = zeppelinGuildPlugin()({ TagEvalCmd, TagDeleteCmd, TagListCmd, - TagListAliasesCmd, TagSourceCmd, TagCreateCmd, ], diff --git a/backend/src/plugins/Tags/commands/TagListAliasesCmd.ts b/backend/src/plugins/Tags/commands/TagListAliasesCmd.ts deleted file mode 100644 index b53a58fd..00000000 --- a/backend/src/plugins/Tags/commands/TagListAliasesCmd.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { commandTypeHelpers as ct } from "../../../commandTypes"; -import { createChunkedMessage } from "../../../utils"; -import { tagsCmd } from "../types"; - -export const TagListAliasesCmd = tagsCmd({ - trigger: ["tag list-aliases", "tagaliases"], - permission: "can_list", - - signature: { - tag: ct.string(), - }, - - async run({ message: msg, args, pluginData }) { - const prefix = (await pluginData.config.getForMessage(msg)).prefix; - const aliases = await pluginData.state.tagAliases.findAllWithTag(args.tag); - let aliasesArr: string[] = []; - if (!aliases) { - msg.channel.send(`No aliases found for tag \`${args.tag}\``); - return; - } - aliasesArr = aliases.map((a) => a.alias); - createChunkedMessage( - msg.channel, - `Available aliases for tag \`${args.tag}\` (use with \`${prefix}alias\`: \`\`\`${aliasesArr.join(", ")}\`\`\``, - ); - return; - }, -}); diff --git a/backend/src/plugins/Tags/commands/TagListCmd.ts b/backend/src/plugins/Tags/commands/TagListCmd.ts index 36f5595d..d59fd9f5 100644 --- a/backend/src/plugins/Tags/commands/TagListCmd.ts +++ b/backend/src/plugins/Tags/commands/TagListCmd.ts @@ -1,3 +1,5 @@ +import { sendErrorMessage } from "src/pluginUtils"; + import { commandTypeHelpers as ct } from "../../../commandTypes"; import { createChunkedMessage } from "../../../utils"; import { tagsCmd } from "../types"; @@ -8,23 +10,59 @@ export const TagListCmd = tagsCmd({ signature: { noaliases: ct.bool({ option: true, isSwitch: true, shortcut: "na" }), + aliasesonly: ct.bool({ option: true, isSwitch: true, shortcut: "ao" }), + tag: ct.string({ option: true }), }, async run({ message: msg, args, pluginData }) { const prefix = (await pluginData.config.getForMessage(msg)).prefix; const tags = await pluginData.state.tags.all(); - const aliases = await pluginData.state.tagAliases.all(); if (tags.length === 0) { msg.channel.send(`No tags created yet! Use \`tag create\` command to create one.`); return; } + const allAliases = await pluginData.state.tagAliases.all(); + + if (args.aliasesonly) { + let aliasesArr: string[] = []; + if (args.tag) { + const tag = await pluginData.state.tags.find(args.tag); + if (!tag) { + sendErrorMessage(pluginData, msg.channel, `Tag \`${args.tag}\` doesn't exist.`); + return; + } + const aliasesForTag = await pluginData.state.tagAliases.findAllWithTag(args.tag); + if (!aliasesForTag) { + sendErrorMessage(pluginData, msg.channel, `No aliases for tag \`${args.tag}\`.`); + return; + } + aliasesArr = aliasesForTag.map((a) => a.alias); + createChunkedMessage( + msg.channel, + `Available aliases for tag \`${args.tag}\` (use with \`${prefix}alias\`: \`\`\`${aliasesArr.join( + ", ", + )}\`\`\``, + ); + return; + } + aliasesArr = allAliases.map((a) => a.alias); + createChunkedMessage( + msg.channel, + `Available aliases (use with \`${prefix}alias\`: \`\`\`${aliasesArr.join(", ")}\`\`\``, + ); + return; + } + const tagNames = tags.map((tag) => tag.tag).sort(); - const tagAliasesNames = aliases.map((alias) => alias.alias).sort(); + const tagAliasesNames = allAliases.map((alias) => alias.alias).sort(); const tagAndAliasesNames = tagNames .join(", ") .concat(args.noaliases ? "" : tagAliasesNames.length > 0 ? `, ${tagAliasesNames.join(", ")}` : ""); - createChunkedMessage(msg.channel, `Available tags (use with ${prefix}tag): \`\`\`${tagAndAliasesNames}\`\`\``); + createChunkedMessage( + msg.channel, + `Available tags (use with ${prefix}tag/alias): \`\`\`${tagAndAliasesNames}\`\`\``, + ); }, }); diff --git a/backend/src/plugins/Tags/util/matchAndRenderTagFromString.ts b/backend/src/plugins/Tags/util/matchAndRenderTagFromString.ts index cc1e90a7..8502c3af 100644 --- a/backend/src/plugins/Tags/util/matchAndRenderTagFromString.ts +++ b/backend/src/plugins/Tags/util/matchAndRenderTagFromString.ts @@ -123,6 +123,7 @@ export async function matchAndRenderTagFromString( const content: StrictMessageContent = { content: `Did you mean:\n${lowest[1].join("\n")}`, }; + return { renderedContent: content, tagName: "",