From c8851d6e4d4b29a9c2584d69a63d1920916dac09 Mon Sep 17 00:00:00 2001 From: Jonny_Bro <48434875+JonnyBro@users.noreply.github.com> Date: Sat, 15 Mar 2025 10:32:34 +0500 Subject: [PATCH] feat: rewrite shorturl (waiting for api update) refactor: sort imports in some files --- OLD/commands/Administration/config.js | 255 ------------------------ OLD/commands/Beatrun/courses.js | 100 ---------- src/commands/Administration/addemoji.ts | 5 +- src/commands/Administration/config.ts | 4 +- src/commands/General/shorturl.ts | 51 +++++ 5 files changed, 55 insertions(+), 360 deletions(-) delete mode 100644 OLD/commands/Administration/config.js delete mode 100644 OLD/commands/Beatrun/courses.js create mode 100644 src/commands/General/shorturl.ts diff --git a/OLD/commands/Administration/config.js b/OLD/commands/Administration/config.js deleted file mode 100644 index e4b5236a..00000000 --- a/OLD/commands/Administration/config.js +++ /dev/null @@ -1,255 +0,0 @@ -const { SlashCommandBuilder, PermissionsBitField, ChannelType, InteractionContextType, ApplicationIntegrationType } = require("discord.js"); -const BaseCommand = require("../../base/BaseCommand"); - -class Config extends BaseCommand { - /** - * - * @param {import("../../base/Client")} client - */ - constructor(client) { - super({ - command: new SlashCommandBuilder() - .setName("config") - .setDescription(client.translate("administration/config:DESCRIPTION")) - .setDescriptionLocalizations({ - uk: client.translate("administration/config:DESCRIPTION", null, "uk-UA"), - ru: client.translate("administration/config:DESCRIPTION", null, "ru-RU"), - }) - .setIntegrationTypes([ApplicationIntegrationType.GuildInstall]) - .setContexts([InteractionContextType.Guild]) - .setDefaultMemberPermissions(PermissionsBitField.Flags.ManageGuild) - .addSubcommand(subcommand => - subcommand - .setName("list") - .setDescription(client.translate("administration/config:LIST")) - .setDescriptionLocalizations({ - uk: client.translate("administration/config:LIST", null, "uk-UA"), - ru: client.translate("administration/config:LIST", null, "ru-RU"), - }), - ) - .addSubcommand(subcommand => - subcommand - .setName("set") - .setDescription(client.translate("administration/config:SET")) - .setDescriptionLocalizations({ - uk: client.translate("administration/config:SET", null, "uk-UA"), - ru: client.translate("administration/config:SET", null, "ru-RU"), - }) - .addStringOption(option => - option - .setName("setting") - .setDescription(client.translate("administration/config:SETTING")) - .setDescriptionLocalizations({ - uk: client.translate("administration/config:SETTING", null, "uk-UA"), - ru: client.translate("administration/config:SETTING", null, "ru-RU"), - }) - .setChoices( - { name: client.translate("administration/config:BIRTHDAYS"), value: "birthdays" }, - { name: client.translate("administration/config:MODLOGS"), value: "modlogs" }, - { name: client.translate("administration/config:REPORTS"), value: "reports" }, - { name: client.translate("administration/config:SUGGESTIONS"), value: "suggestions" }, - { name: client.translate("administration/config:TICKETSCATEGORY"), value: "tickets.ticketsCategory" }, - { name: client.translate("administration/config:TICKETLOGS"), value: "tickets.ticketLogs" }, - { name: client.translate("administration/config:TRANSCRIPTIONLOGS"), value: "tickets.transcriptionLogs" }, - { name: client.translate("administration/config:MESSAGEUPDATE"), value: "monitoring.messageUpdate" }, - { name: client.translate("administration/config:MESSAGEDELETE"), value: "monitoring.messageDelete" }, - ) - .setRequired(true), - ) - .addBooleanOption(option => - option - .setName("state") - .setDescription(client.translate("common:STATE")) - .setDescriptionLocalizations({ - uk: client.translate("common:STATE", null, "uk-UA"), - ru: client.translate("common:STATE", null, "ru-RU"), - }) - .setRequired(true), - ) - .addChannelOption(option => - option - .setName("channel") - .setDescription(client.translate("common:CHANNEL")) - .setDescriptionLocalizations({ - uk: client.translate("common:CHANNEL", null, "uk-UA"), - ru: client.translate("common:CHANNEL", null, "ru-RU"), - }), - ), - ), - dirname: __dirname, - ownerOnly: false, - }); - } - - /** - * - * @param {import("../../base/Client")} client - * @param {import("discord.js").ChatInputCommandInteraction} interaction - */ - async execute(client, interaction) { - const guildData = interaction.data.guild, - command = interaction.options.getSubcommand(); - - if (command === "list") { - const embed = client.embed({ - author: { - name: interaction.guild.name, - iconURL: interaction.guild.iconURL(), - }, - fields: [ - { - name: interaction.translate("administration/config:WELCOME_TITLE"), - value: guildData.plugins.welcome.enabled - ? interaction.translate("administration/config:WELCOME_CONTENT", { - channel: `<#${guildData.plugins.welcome.channel}>`, - withImage: guildData.plugins.welcome.withImage ? interaction.translate("common:YES") : interaction.translate("common:NO"), - }) : interaction.translate("common:DISABLED"), - inline: true, - }, - { - name: interaction.translate("administration/config:GOODBYE_TITLE"), - value: guildData.plugins.goodbye.enabled - ? interaction.translate("administration/config:GOODBYE_CONTENT", { - channel: `<#${guildData.plugins.goodbye.channel}>`, - withImage: guildData.plugins.goodbye.withImage ? interaction.translate("common:YES") : interaction.translate("common:NO"), - }) : interaction.translate("common:DISABLED"), - inline: true, - }, - { - name: interaction.translate("administration/config:AUTOROLE_TITLE"), - value: guildData.plugins.autorole.enabled ? `<@&${guildData.plugins.autorole.role}>` : interaction.translate("common:DISABLED"), - }, - { - name: interaction.translate("administration/config:AUTO_SANCTIONS"), - value: - (guildData.plugins.warnsSanctions.kick - ? interaction.translate("administration/config:KICK_CONTENT", { - count: guildData.plugins.warnsSanctions.kick, - }) : interaction.translate("administration/config:KICK_NOT_DEFINED")) + - "\n" + - (guildData.plugins.warnsSanctions.ban - ? interaction.translate("administration/config:BAN_CONTENT", { - count: guildData.plugins.warnsSanctions.ban, - }) : interaction.translate("administration/config:BAN_NOT_DEFINED")), - }, - { - name: interaction.translate("administration/config:AUTOMOD_TITLE"), - value: guildData.plugins.automod.enabled - ? interaction.translate("administration/config:AUTOMOD_CONTENT", { - channels: guildData.plugins.automod.ignored.map(ch => ` ${ch}`), - }) : interaction.translate("common:DISABLED"), - }, - { - name: interaction.translate("administration/config:MONITORING_CHANNELS"), - value: - `${interaction.translate("administration/config:MESSAGEUPDATE")}: ${guildData.plugins?.monitoring?.messageUpdate ? `<#${guildData.plugins?.monitoring?.messageUpdate}>` : `*${interaction.translate("common:NOT_DEFINED")}*`}\n` + - `${interaction.translate("administration/config:MESSAGEDELETE")}: ${guildData.plugins?.monitoring?.messageDelete ? `<#${guildData.plugins?.monitoring?.messageDelete}>` : `*${interaction.translate("common:NOT_DEFINED")}*`}\n`, - }, - { - name: interaction.translate("administration/config:SPECIAL_CHANNELS"), - value: - `${interaction.translate("administration/config:BIRTHDAYS")}: ${guildData.plugins?.birthdays ? `<#${guildData.plugins.birthdays}>` : `*${interaction.translate("common:NOT_DEFINED")}*`}\n` + - `${interaction.translate("administration/config:MODLOGS")}: ${guildData.plugins?.modlogs ? `<#${guildData.plugins.modlogs}>` : `*${interaction.translate("common:NOT_DEFINED")}*`}\n` + - `${interaction.translate("administration/config:REPORTS")}: ${guildData.plugins?.reports ? `<#${guildData.plugins.reports}>` : `*${interaction.translate("common:NOT_DEFINED")}*`}\n` + - `${interaction.translate("administration/config:SUGGESTIONS")}: ${guildData.plugins?.suggestions ? `<#${guildData.plugins.suggestions}>` : `*${interaction.translate("common:NOT_DEFINED")}*`}\n` + - `${interaction.translate("administration/config:TICKETSCATEGORY")}: ${guildData.plugins?.tickets?.ticketsCategory ? `<#${guildData.plugins?.tickets?.ticketsCategory}>` : `*${interaction.translate("common:NOT_DEFINED")}*`}\n` + - `${interaction.translate("administration/config:TICKETLOGS")}: ${guildData.plugins?.tickets?.ticketLogs ? `<#${guildData.plugins?.tickets?.ticketLogs}>` : `*${interaction.translate("common:NOT_DEFINED")}*`}\n` + - `${interaction.translate("administration/config:TRANSCRIPTIONLOGS")}: ${guildData.plugins?.tickets?.transcriptionLogs ? `<#${guildData.plugins?.tickets?.transcriptionLogs}>` : `*${interaction.translate("common:NOT_DEFINED")}*`}\n`, - }, - ], - }); - - interaction.reply({ - embeds: [embed], - ephemeral: true, - }); - } else { - const setting = interaction.options.getString("setting"), - state = interaction.options.getBoolean("state"), - channel = interaction.options.getChannel("channel"); - - await changeSetting(interaction, setting, state, channel); - } - } -} - -/** - * - * @param {import("discord.js").ChatInputCommandInteraction} interaction - * @param {String} setting - * @param {Boolean} state - * @param {import("discord.js").GuildTextBasedChannel | import("discord.js").CategoryChannel} channel - * @returns - */ -async function changeSetting(interaction, setting, state, channel) { - const settingSplitted = setting.split("."), - data = interaction.data.guild; - - if (settingSplitted.length === 2) { - if (data.plugins[settingSplitted[0]] === undefined) data.plugins[settingSplitted[0]] = {}; - - if (!state) { - data.plugins[settingSplitted[0]][settingSplitted[1]] = null; - - data.markModified(`plugins.${setting}`); - await data.save(); - - return interaction.reply({ - content: `${interaction.translate(`administration/config:${settingSplitted.length === 2 ? settingSplitted[1].toUpperCase() : setting.toUpperCase()}`)}: **${interaction.translate("common:DISABLED")}**`, - ephemeral: true, - }); - } else { - if (settingSplitted[1] === "ticketsCategory" && channel.type !== ChannelType.GuildCategory) return interaction.reply({ content: interaction.translate("administration/config:TICKETS_NOT_CATEGORY"), ephemeral: true }); - - if (channel) { - data.plugins[settingSplitted[0]][settingSplitted[1]] = channel.id; - - data.markModified(`plugins.${setting}`); - await data.save(); - - return interaction.reply({ - content: `${interaction.translate(`administration/config:${settingSplitted.length === 2 ? settingSplitted[1].toUpperCase() : setting.toUpperCase()}`)}: **${interaction.translate("common:ENABLED")}** (${channel.toString()})`, - ephemeral: true, - }); - } else - return interaction.reply({ - content: `${interaction.translate(`administration/config:${settingSplitted.length === 2 ? settingSplitted[1].toUpperCase() : setting.toUpperCase()}`)}: ${ - data.plugins[setting] ? `**${interaction.translate("common:ENABLED")}** (<#${data.plugins[setting]}>)` : `**${interaction.translate("common:DISABLED")}**` - }`, - ephemeral: true, - }); - } - } else { - if (!state) { - data.plugins[setting] = null; - - data.markModified(`plugins.${setting}`); - await data.save(); - - return interaction.reply({ - content: `${interaction.translate(`administration/config:${setting.toUpperCase()}`)}: **${interaction.translate("common:DISABLED")}**`, - ephemeral: true, - }); - } else { - if (channel) { - data.plugins[setting] = channel.id; - - data.markModified(`plugins.${setting}`); - await data.save(); - - return interaction.reply({ - content: `${interaction.translate(`administration/config:${setting.toUpperCase()}`)}: **${interaction.translate("common:ENABLED")}** (${channel.toString()})`, - ephemeral: true, - }); - } else - return interaction.reply({ - content: `${interaction.translate(`administration/config:${setting.toUpperCase()}`)}: ${ - data.plugins[setting] ? `**${interaction.translate("common:ENABLED")}** (<#${data.plugins[setting]}>)` : `**${interaction.translate("common:DISABLED")}**` - }`, - ephemeral: true, - }); - } - } -} - -module.exports = Config; diff --git a/OLD/commands/Beatrun/courses.js b/OLD/commands/Beatrun/courses.js deleted file mode 100644 index da83d253..00000000 --- a/OLD/commands/Beatrun/courses.js +++ /dev/null @@ -1,100 +0,0 @@ -const { SlashCommandBuilder, InteractionContextType, ApplicationIntegrationType } = require("discord.js"); -const BaseCommand = require("../../base/BaseCommand"), - fetch = require("node-fetch"); - -class Courses extends BaseCommand { - /** - * - * @param {import("../base/Client")} client - */ - constructor(client) { - super({ - command: new SlashCommandBuilder() - .setName("courses") - .setDescription(client.translate("beatrun/courses:DESCRIPTION")) - .setDescriptionLocalizations({ - uk: client.translate("beatrun/courses:DESCRIPTION", null, "uk-UA"), - ru: client.translate("beatrun/courses:DESCRIPTION", null, "ru-RU"), - }) - .setIntegrationTypes([ApplicationIntegrationType.GuildInstall, ApplicationIntegrationType.UserInstall]) - .setContexts([InteractionContextType.Guild, InteractionContextType.BotDM, InteractionContextType.PrivateChannel]) - .addStringOption(option => - option - .setName("code") - .setDescription(client.translate("common:CODE")) - .setDescriptionLocalizations({ - uk: client.translate("common:CODE", null, "uk-UA"), - ru: client.translate("common:CODE", null, "ru-RU"), - }) - .setRequired(true), - ) - .addBooleanOption(option => - option - .setName("ephemeral") - .setDescription(client.translate("misc:EPHEMERAL_RESPONSE")) - .setDescriptionLocalizations({ - uk: client.translate("misc:EPHEMERAL_RESPONSE", null, "uk-UA"), - ru: client.translate("misc:EPHEMERAL_RESPONSE", null, "ru-RU"), - }), - ), - dirname: __dirname, - ownerOnly: false, - }); - } - - /** - * - * @param {import("../../base/Client")} client - * @param {import("discord.js").ChatInputCommandInteraction} interaction - * @param {Object} data - */ - async execute(client, interaction) { - await interaction.deferReply({ ephemeral: interaction.options.getBoolean("ephemeral") || false }); - - const code = interaction.options.getString("code"); - const response = await fetch(`https://courses.jonnybro.ru/api/info/${code}`).then(res => res.json()), - { data } = response; - - if (response.res === 401) return interaction.error("beatrun/courses:NOT_FOUND", null, { ephemeral: true, edit: true }); - - const embed = client.embed({ - title: data.name, - description: `[${interaction.translate("beatrun/courses:DOWNLOAD")}](https://courses.jonnybro.ru/${data.path})`, - thumbnail: data.mapimg, - url: `https://courses.jonnybro.ru/?search=${code}`, - fields: [ - { - name: interaction.translate("beatrun/courses:MAP"), - value: `[${data.map}](https://steamcommunity.com/sharedfiles/filedetails/?id=${data.mapid})`, - inline: true, - }, - { - name: interaction.translate("beatrun/courses:UPLOADER"), - value: `[${data.uploader.name || data.uploader.userid}](https://steamcommunity.com/profiles/${data.uploader.userid})`, - inline: true, - }, - { - name: "\u200B", - value: "\u200B", - inline: true, - }, - { - name: interaction.translate("beatrun/courses:DATE"), - value: ``, - inline: true, - }, - { - name: interaction.translate("beatrun/courses:PLAYS"), - value: `${data.plays || 0}`, - inline: true, - }, - ], - }); - - interaction.editReply({ - embeds: [embed], - }); - } -} - -module.exports = Courses; diff --git a/src/commands/Administration/addemoji.ts b/src/commands/Administration/addemoji.ts index 661bb537..17f7a8f0 100644 --- a/src/commands/Administration/addemoji.ts +++ b/src/commands/Administration/addemoji.ts @@ -27,12 +27,11 @@ export const data: CommandData = { export const run = async ({ interaction }: SlashCommandProps) => { await interaction.deferReply({ flags: MessageFlags.Ephemeral }); - const attachment = interaction.options.getString("link") || ""; - const name = interaction.options.getString("name") || ""; + const attachment = interaction.options.getString("link", true); + const name = interaction.options.getString("name", true); try { const emoji = await interaction.guild?.emojis.create({ name, attachment }); - if (!emoji) return replyError(interaction, "administration/addemoji:ERROR", { name }, { edit: true }); return replySuccess(interaction, "administration/addemoji:SUCCESS", { emoji: emoji.toString() }, { edit: true }); diff --git a/src/commands/Administration/config.ts b/src/commands/Administration/config.ts index 6e9d70ae..8d8333ee 100644 --- a/src/commands/Administration/config.ts +++ b/src/commands/Administration/config.ts @@ -1,10 +1,10 @@ import { getLocalizedDesc, replyError, translateContext } from "@/helpers/extenders.js"; +import GuildModel from "@/models/GuildModel.js"; import { CommandData, SlashCommandProps } from "@/types.js"; +import { generateFields } from "@/utils/config-fields.js"; import { createEmbed } from "@/utils/create-embed.js"; import useClient from "@/utils/use-client.js"; import { ApplicationCommandOptionType, ApplicationIntegrationType, Channel, ChannelType, ChatInputCommandInteraction, InteractionContextType, MessageFlags, PermissionsBitField } from "discord.js"; -import GuildModel from "@/models/GuildModel.js"; -import { generateFields } from "@/utils/config-fields.js"; const client = useClient(); diff --git a/src/commands/General/shorturl.ts b/src/commands/General/shorturl.ts new file mode 100644 index 00000000..722359b6 --- /dev/null +++ b/src/commands/General/shorturl.ts @@ -0,0 +1,51 @@ +import { getLocalizedDesc, replyError } from "@/helpers/extenders.js"; +import { CommandData, SlashCommandProps } from "@/types.js"; +import useClient from "@/utils/use-client.js"; +import { ApplicationCommandOptionType, ApplicationIntegrationType, InteractionContextType, MessageFlags } from "discord.js"; + +const client = useClient(); + +export const data: CommandData = { + name: "shorturl", + ...getLocalizedDesc("general/shorturl:DESCRIPTION"), + // eslint-disable-next-line camelcase + integration_types: [ApplicationIntegrationType.GuildInstall], + contexts: [InteractionContextType.Guild], + options: [ + { + name: "url", + ...getLocalizedDesc("common:URL"), + type: ApplicationCommandOptionType.String, + required: true, + }, + { + name: "ephemeral", + ...getLocalizedDesc("misc:EPHEMERAL_RESPONSE"), + type: ApplicationCommandOptionType.Boolean, + required: false, + }, + ], +}; + +export const run = async ({ interaction }: SlashCommandProps) => { + return interaction.reply("Doesn't work right now, waiting for API to update."); + + // eslint-disable-next-line no-unreachable + await interaction.deferReply({ flags: interaction.options.getBoolean("ephemeral") ? MessageFlags.Ephemeral : undefined }); + + const url = interaction.options.getString("url", true); + if (!url.startsWith("http")) return replyError(interaction, "general/shorturl:NOT_A_LINK", null, { edit: true }); + + const res = await fetch("https://i.jonnybro.ru/api/shorten", { // old v3 API, waiting for v4 API + method: "POST", + headers: { + "Authorization": client.configService.get("apiKeys.zipline"), + "Max-Views": "0", + }, + body: JSON.stringify({ url: url }), + }).then(res => res.json()); + + interaction.editReply({ + content: `<${res.url}>`, + }); +};