From 8dce37fe0885ae1751807777c93addf89e3ab7d7 Mon Sep 17 00:00:00 2001 From: Lucid Date: Mon, 26 Jan 2026 19:35:24 -0500 Subject: [PATCH] Added functionality to fetch command list from bot stats site api. --- src/bot/features/helpCommand.ts | 37 +++++++++++++++++++++++---------- src/lib/getCommandsList.ts | 30 ++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 11 deletions(-) create mode 100644 src/lib/getCommandsList.ts diff --git a/src/bot/features/helpCommand.ts b/src/bot/features/helpCommand.ts index 9c1cad8..0e75235 100644 --- a/src/bot/features/helpCommand.ts +++ b/src/bot/features/helpCommand.ts @@ -3,19 +3,23 @@ import type { Context } from "#root/bot/context.js"; import { logHandle } from "#root/bot/helpers/logging.js"; import { urql } from "#root/main.js"; import increment from "#root/lib/graphql/mutations/incrementMutation.js"; +import getCommandsList, { Commands } from "#root/lib/getCommandsList.js"; const composer = new Composer(); const feature = composer.chatType(["group", "supergroup", "private"]); -const mutationKey = process.env.GRAPHQL_MUTATION_KEY || ""; - /** * What triggers this feature and adds to the log when it has been triggered. * The trigger is the command "/help" */ feature.hears(/^\/help/, logHandle("help"), async (ctx: Context) => { + const apiKey = process.env.GRAPHQL_API_TOKEN || ""; + const mutationKey = process.env.GRAPHQL_MUTATION_KEY || ""; + const statsSite = process.env.STATS_SITE || ""; + await urql.mutation(increment, { trigger: true, mutationKey }); + const commandsListArr = await getCommandsList(`${statsSite}api/bot`, apiKey); // const GROUP_IDS = process.env.GROUP_IDS // ? process.env.GROUP_IDS.split(",") @@ -32,7 +36,7 @@ feature.hears(/^\/help/, logHandle("help"), async (ctx: Context) => { if (ctx.chat.type === "private") { // Responds with message. await ctx.reply( - `Currently I have no commands for the public beta\\. I require no configuration\\. Simply add me to a group and make me an admin with the permission to delete messages\\. From there I will start deleting any Twitter\\/X and Meta links I detect\\. I also check embeds and forwards\\. Use /\\botInfo to learn more about my mission and why I was created\\.`, + `I require no configuration\\. Simply add me to a group and make me an admin with the permission to delete messages\\. From there I will start deleting any Twitter\\/X and Meta links I detect\\. I also check embeds and forwards\\.`, { parse_mode: "MarkdownV2", reply_parameters: { message_id: ctx.msg.message_id } @@ -48,7 +52,7 @@ feature.hears(/^\/help/, logHandle("help"), async (ctx: Context) => { if (["creator", "administrator"].includes(chatMember.status)) { // Respond with message. await ctx.reply( - `Currently I have no commands for the public beta\\. I require no configuration\\. If I am not working\\, make sure I have an admin role with the permission to delete messages\\. I should already be deleting any Twitter\\/X and Meta links I detect\\. I also check embeds and forwards\\. Use /\\botInfo to learn more about my mission and why I was created\\.`, + `I require no configuration\\. If I am not working\\, make sure I have an admin role with the permission to delete messages\\. I should already be deleting any Twitter\\/X and Meta links I detect\\. I also check embeds and forwards\\.`, { parse_mode: "MarkdownV2", reply_parameters: { message_id: ctx.msg.message_id } @@ -63,6 +67,17 @@ feature.hears(/^\/help/, logHandle("help"), async (ctx: Context) => { } } + const commandsListStr = commandsListArr.reduce((prev, curr) => { + const { command, description, groups } = curr; + + return (prev += `**Command**: ${command} \\- ${description}\\.\nGroups: ${groups ? "✔️" : "❌"} \\| Private: ${curr.private ? "✔️" : "❌"}\n\n`); + }, "Here are a list of my commands:\n\n"); + + await ctx.reply(commandsListStr, { + parse_mode: "MarkdownV2", + reply_parameters: { message_id: ctx.msg.message_id } + }); + await ctx.reply( `In the future a public GitHub repo will be set up with a mirror of the private git that the bot code is stored on\\. That repo will be used to handle bug reports and feature requests\\. Including requests to check for more domains\\.`, { @@ -71,13 +86,13 @@ feature.hears(/^\/help/, logHandle("help"), async (ctx: Context) => { } ); - return await ctx.reply( - `Down with fascism\\! Fuck MAGA\\! Fuck Trump\\! Fuck Nazis\\! Trans rights are human rights\\! Trans women are women\\! Trans men are men\\! Never let them take away your happiness\\!`, - { - parse_mode: "MarkdownV2", - reply_parameters: { message_id: ctx.msg.message_id } - } - ); + // return await ctx.reply( + // `Down with fascism\\! Fuck MAGA\\! Fuck Trump\\! Fuck Nazis\\! Trans rights are human rights\\! Trans women are women\\! Trans men are men\\! Never let them take away your happiness\\!`, + // { + // parse_mode: "MarkdownV2", + // reply_parameters: { message_id: ctx.msg.message_id } + // } + // ); } }); } diff --git a/src/lib/getCommandsList.ts b/src/lib/getCommandsList.ts new file mode 100644 index 0000000..6f6a506 --- /dev/null +++ b/src/lib/getCommandsList.ts @@ -0,0 +1,30 @@ +import axios from "axios"; + +export interface Commands { + command: String; + description: String; + groups: boolean; + private: boolean; +} + +const fetchCommandsList = async ( + url: string, + apiKey: string +): Promise => { + let commandsList = [] as Commands[]; + + await axios + .get(url, { + headers: { "x-api-key": apiKey } + }) + .then(res => { + commandsList = res.data; + }) + .catch(res => { + console.error(res); + }); + + return commandsList; +}; + +export default fetchCommandsList;