From 4dd538d95291628b52267c070236b9c899584608 Mon Sep 17 00:00:00 2001 From: Rstar284 Date: Sat, 23 Apr 2022 17:19:34 +0400 Subject: [PATCH] add command for listing tag aliases by tag, add flag to not show aliases when listing tags --- backend/src/plugins/Tags/TagsPlugin.ts | 4 ++- .../Tags/commands/TagListAliasesCmd.ts | 28 +++++++++++++++++++ .../src/plugins/Tags/commands/TagListCmd.ts | 11 ++++++-- .../src/plugins/Tags/commands/TagSourceCmd.ts | 22 ++++++++++++--- 4 files changed, 57 insertions(+), 8 deletions(-) create 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 86305c2d..63930a21 100644 --- a/backend/src/plugins/Tags/TagsPlugin.ts +++ b/backend/src/plugins/Tags/TagsPlugin.ts @@ -16,6 +16,7 @@ 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"; @@ -69,7 +70,7 @@ export const TagsPlugin = zeppelinGuildPlugin()({ You use them by adding a \`{}\` on your tag. Here are the functions you can use in your tags: - + ${generateTemplateMarkdown(TemplateFunctions)} `), }, @@ -83,6 +84,7 @@ 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 new file mode 100644 index 00000000..4d5482bc --- /dev/null +++ b/backend/src/plugins/Tags/commands/TagListAliasesCmd.ts @@ -0,0 +1,28 @@ +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 \`${prefix + args.tag}\`: \`\`\`${aliasesArr.join(", ")}\`\`\``, + ); + return; + }, +}); diff --git a/backend/src/plugins/Tags/commands/TagListCmd.ts b/backend/src/plugins/Tags/commands/TagListCmd.ts index f339e27f..36f5595d 100644 --- a/backend/src/plugins/Tags/commands/TagListCmd.ts +++ b/backend/src/plugins/Tags/commands/TagListCmd.ts @@ -1,3 +1,4 @@ +import { commandTypeHelpers as ct } from "../../../commandTypes"; import { createChunkedMessage } from "../../../utils"; import { tagsCmd } from "../types"; @@ -5,7 +6,12 @@ export const TagListCmd = tagsCmd({ trigger: ["tag list", "tags", "taglist"], permission: "can_list", - async run({ message: msg, pluginData }) { + signature: { + noaliases: ct.bool({ option: true, isSwitch: true, shortcut: "na" }), + }, + + 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) { @@ -13,12 +19,11 @@ export const TagListCmd = tagsCmd({ return; } - const prefix = (await pluginData.config.getForMessage(msg)).prefix; const tagNames = tags.map((tag) => tag.tag).sort(); const tagAliasesNames = aliases.map((alias) => alias.alias).sort(); const tagAndAliasesNames = tagNames .join(", ") - .concat(tagAliasesNames.length > 0 ? `, ${tagAliasesNames.join(", ")}` : ""); + .concat(args.noaliases ? "" : tagAliasesNames.length > 0 ? `, ${tagAliasesNames.join(", ")}` : ""); createChunkedMessage(msg.channel, `Available tags (use with ${prefix}tag): \`\`\`${tagAndAliasesNames}\`\`\``); }, diff --git a/backend/src/plugins/Tags/commands/TagSourceCmd.ts b/backend/src/plugins/Tags/commands/TagSourceCmd.ts index 45d3b521..ad04c14c 100644 --- a/backend/src/plugins/Tags/commands/TagSourceCmd.ts +++ b/backend/src/plugins/Tags/commands/TagSourceCmd.ts @@ -15,27 +15,41 @@ export const TagSourceCmd = tagsCmd({ async run({ message: msg, args, pluginData }) { const alias = await pluginData.state.tagAliases.find(args.tag); - const tag = (await pluginData.state.tags.find(args.tag)) || (await pluginData.state.tags.find(alias?.tag ?? null)); + const aliasedTag = await pluginData.state.tags.find(alias?.tag ?? null); + const tag = (await pluginData.state.tags.find(args.tag)) || aliasedTag; if (args.delete) { const actualTag = await pluginData.state.tags.find(args.tag); - const aliasedTag = await pluginData.state.tags.find(alias?.tag ?? null); if (!actualTag && !aliasedTag) { sendErrorMessage(pluginData, msg.channel, "No tag with that name"); return; } - actualTag ? pluginData.state.tags.delete(args.tag) : pluginData.state.tagAliases.delete(args.tag); + if (actualTag) { + const aliasesOfTag = await pluginData.state.tagAliases.findAllWithTag(actualTag?.tag); + if (aliasesOfTag) { + // tslint:disable-next-line:no-shadowed-variable + aliasesOfTag.forEach((alias) => pluginData.state.tagAliases.delete(alias.alias)); + } + await pluginData.state.tags.delete(args.tag); + } else { + await pluginData.state.tagAliases.delete(alias?.alias); + } + sendSuccessMessage(pluginData, msg.channel, `${actualTag ? "Tag" : "Alias"} deleted!`); return; } - if (!tag) { + if (!tag && !aliasedTag) { sendErrorMessage(pluginData, msg.channel, "No tag with that name"); return; } + if (!tag?.body) { + return; + } + const archiveId = await pluginData.state.archives.create(tag.body, moment.utc().add(10, "minutes")); const url = pluginData.state.archives.getUrl(getBaseUrl(pluginData), archiveId);