mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-24 12:09:51 +02:00
feat: 1.29.12
This commit is contained in:
1 parent
1d8c823703
commit
c8ba6b1eca
24 files changed
+482
-404
No files matched your search
@@ -1,10 +1,10 @@
|
||||
import { AutocompleteInteraction, CacheType } from 'discord.js';
|
||||
import { commands } from '..';
|
||||
import { AutocompleteInteraction, CacheType } from "discord.js";
|
||||
import { commands } from "..";
|
||||
|
||||
export async function handleAutocomplete(
|
||||
interaction: AutocompleteInteraction<CacheType>,
|
||||
) {
|
||||
const command = (await commands)[interaction.commandName];
|
||||
const command = commands[interaction.commandName];
|
||||
|
||||
if (!command) {
|
||||
console.error(`No command matching ${interaction.commandName} was found.`);
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
import { ButtonInteraction, CacheType } from 'discord.js';
|
||||
import { commands } from '..';
|
||||
import { normalizeInteractionReturnable } from '../../../core/discord/normalizeInteractionReturnable';
|
||||
import { ButtonInteraction, CacheType } from "discord.js";
|
||||
import { commands } from "..";
|
||||
import { normalizeInteractionReturnable } from "../../../core/discord/normalizeInteractionReturnable";
|
||||
|
||||
export async function handleButton(interaction: ButtonInteraction<CacheType>) {
|
||||
await interaction.deferUpdate();
|
||||
|
||||
const url = new URL(`https://example.com/${interaction.customId}`);
|
||||
const commandName = url.pathname.split('/')[1];
|
||||
const button = (await commands)[commandName]?.button;
|
||||
const commandName = url.pathname.split("/")[1];
|
||||
const button = commands[commandName]?.button;
|
||||
|
||||
if (!button) {
|
||||
throw new Error(`Button handler not found for "${commandName}"`);
|
||||
@@ -16,7 +16,7 @@ export async function handleButton(interaction: ButtonInteraction<CacheType>) {
|
||||
if (interaction.message.interaction?.user.id !== interaction.user.id) {
|
||||
interaction.followUp({
|
||||
ephemeral: true,
|
||||
content: 'You are not the author of this command.',
|
||||
content: "You are not the author of this command.",
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -17,12 +17,11 @@ import { translator } from "../../../core/localization/translator";
|
||||
import type { Writeable } from "../../../types/writable";
|
||||
|
||||
export async function handleChatInputCommand(
|
||||
interaction: ChatInputCommandInteraction<CacheType>
|
||||
interaction: ChatInputCommandInteraction<CacheType>,
|
||||
) {
|
||||
await interaction.deferReply();
|
||||
|
||||
const awaitedCommands = await commands;
|
||||
const registry = awaitedCommands[interaction.commandName];
|
||||
const registry = commands[interaction.commandName];
|
||||
|
||||
try {
|
||||
const returnable = await registry.handler(interaction);
|
||||
@@ -36,7 +35,7 @@ export async function handleChatInputCommand(
|
||||
if (typeof object === "string") {
|
||||
chunks.push([object]);
|
||||
} else chunks.at(-1)?.push(object!);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
let index = 0;
|
||||
@@ -59,7 +58,7 @@ export async function handleChatInputCommand(
|
||||
} else if (psa.data.type === "image") {
|
||||
if (!reply.files) reply.files = [];
|
||||
(reply.files as Writeable<typeof reply.files>).push(
|
||||
new AttachmentBuilder(psa.data.image)
|
||||
new AttachmentBuilder(psa.data.image),
|
||||
);
|
||||
reply.content = reply.content ?? psa.data.title;
|
||||
}
|
||||
@@ -72,7 +71,7 @@ export async function handleChatInputCommand(
|
||||
(
|
||||
reply.components[0] as ActionRowBuilder<ButtonBuilder>
|
||||
).addComponents(
|
||||
psa.data.links.map(({ title, url }) => buttonLink(url, title))
|
||||
psa.data.links.map(({ title, url }) => buttonLink(url, title)),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -103,7 +102,7 @@ export async function handleChatInputCommand(
|
||||
} else if (psa.data.type === "image") {
|
||||
if (!followUp.files) followUp.files = [];
|
||||
(followUp.files as Writeable<typeof followUp.files>).push(
|
||||
new AttachmentBuilder(psa.data.image)
|
||||
new AttachmentBuilder(psa.data.image),
|
||||
);
|
||||
followUp.content = followUp.content ?? psa.data.title;
|
||||
}
|
||||
@@ -116,7 +115,7 @@ export async function handleChatInputCommand(
|
||||
(
|
||||
followUp.components[0] as ActionRowBuilder<ButtonBuilder>
|
||||
).addComponents(
|
||||
psa.data.links.map(({ title, url }) => buttonLink(url, title))
|
||||
psa.data.links.map(({ title, url }) => buttonLink(url, title)),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -133,7 +132,7 @@ export async function handleChatInputCommand(
|
||||
new ButtonBuilder()
|
||||
.setLabel(strings.bot.common.errors.get_help)
|
||||
.setURL("https://discord.gg/nDt7AjGJQH")
|
||||
.setStyle(ButtonStyle.Link)
|
||||
.setStyle(ButtonStyle.Link),
|
||||
),
|
||||
];
|
||||
if (error instanceof UserError) {
|
||||
|
||||
@@ -72,13 +72,13 @@ interface CommandRegistryImplicit extends CommandRegistryBase {
|
||||
interface CommandRegistryExplicit extends CommandRegistryBase {
|
||||
handlesInteraction?: false;
|
||||
handler: (
|
||||
interaction: ChatInputCommandInteraction<CacheType>
|
||||
interaction: ChatInputCommandInteraction<CacheType>,
|
||||
) => InteractionReturnable;
|
||||
}
|
||||
|
||||
export type CommandRegistry = CommandRegistryImplicit | CommandRegistryExplicit;
|
||||
|
||||
export const COMMANDS_RAW: Promise<CommandRegistry>[] = [
|
||||
export const commandsArray: Promise<CommandRegistry>[] = [
|
||||
// auctionCommand,
|
||||
permissionsCommand,
|
||||
debugCommand,
|
||||
@@ -101,34 +101,28 @@ export const COMMANDS_RAW: Promise<CommandRegistry>[] = [
|
||||
replayCommand,
|
||||
];
|
||||
|
||||
export const commands = Promise.allSettled(COMMANDS_RAW).then((rawCommands) => {
|
||||
return rawCommands.reduce<Record<string, CommandRegistry>>(
|
||||
(commands, registry, index) => {
|
||||
if (registry.status === "rejected") {
|
||||
console.warn(
|
||||
`Command ${index} failed to load; skipping...`,
|
||||
registry.reason
|
||||
);
|
||||
return commands;
|
||||
}
|
||||
return { ...commands, [registry.value.command.name]: registry.value };
|
||||
},
|
||||
{}
|
||||
);
|
||||
});
|
||||
export const commands: Record<string, CommandRegistry> = {};
|
||||
const commandsFulfilled: CommandRegistry[] = [];
|
||||
|
||||
let index = 0;
|
||||
for (const registry of await Promise.allSettled(commandsArray)) {
|
||||
if (registry.status === "rejected") {
|
||||
console.warn(`Command ${index} rejected`, registry.reason);
|
||||
continue;
|
||||
}
|
||||
|
||||
commandsFulfilled.push(registry.value);
|
||||
commands[registry.value.command.name] = registry.value;
|
||||
index++;
|
||||
}
|
||||
|
||||
const rest = new REST().setToken(assertSecret(import.meta.env.DISCORD_TOKEN));
|
||||
const body = commandsFulfilled.map((registry) => registry.command.toJSON());
|
||||
const applicationCommandsRoute = Routes.applicationCommands(
|
||||
assertSecret(import.meta.env.DISCORD_CLIENT_ID),
|
||||
);
|
||||
|
||||
commands.then((awaitedCommands) => {
|
||||
const body = Object.values(awaitedCommands).map((registry) =>
|
||||
registry.command.toJSON()
|
||||
);
|
||||
|
||||
rest.put(
|
||||
Routes.applicationCommands(assertSecret(import.meta.env.DISCORD_CLIENT_ID)),
|
||||
{ body }
|
||||
);
|
||||
});
|
||||
await rest.put(applicationCommandsRoute, { body });
|
||||
|
||||
export async function interactionCreate(interaction: Interaction<CacheType>) {
|
||||
if (interaction.isAutocomplete()) {
|
||||
|
||||
Reference in new issue
Block a user