fix: put /interaction to try catch

This commit is contained in:
xHyroM 2022-07-13 07:57:13 +02:00
parent 7e08e12fec
commit a6e7afc01d

View file

@ -24,57 +24,61 @@ const app = new Hono();
app.get('*', (c) => c.redirect('https://www.youtube.com/watch?v=FMhScnY0dME'));
app.post('/interaction', bodyParse(), async(c) => {
const signature = c.req.headers.get('X-Signature-Ed25519');
const timestamp = c.req.headers.get('X-Signature-Timestamp');
if (!signature || !timestamp) return c.redirect('https://www.youtube.com/watch?v=FMhScnY0dME'); // fireship :D
if (!await verifyKey(JSON.stringify(c.req.parsedBody), signature, timestamp, config.client.public_key)) return c.redirect('https://www.youtube.com/watch?v=FMhScnY0dME'); // fireship :D
const interaction = c.req.parsedBody as unknown as APIPingInteraction | APIApplicationCommandInteraction | APIMessageComponentInteraction | APIApplicationCommandAutocompleteInteraction;
if (interaction.type === InteractionType.Ping) {
return new CommandContext(c).respond({
type: InteractionResponseType.Pong
});
}
if (interaction.type === InteractionType.ApplicationCommandAutocomplete && interaction.data.type === ApplicationCommandType.ChatInput) {
const command = Commands.get(interaction.data.name);
let options = command.options;
const subCommandGroup = interaction.data.options.find(option => option.type === ApplicationCommandOptionType.SubcommandGroup)
const subCommand = interaction.data.options.find(option => option.type === ApplicationCommandOptionType.Subcommand);
// @ts-expect-error ?? find
if (subCommandGroup) options = options.find(option => option.name === subCommandGroup.name)?.options;
// @ts-expect-error ?? find
if (subCommand) options = options.find(option => option.name === subCommand.name)?.options;
// @ts-expect-error i dont want waste time
const focused: APIApplicationCommandBasicOption = interaction.data.options.find(option => option.focused === true);
// @ts-expect-error ?? find
const option: Option | OptionOptions = options.find(option => option.name === focused.name);
return option.run(new AutocompleteContext(
c,
option,
focused.value
));
}
if (interaction.type === InteractionType.ApplicationCommand && interaction.data.type === ApplicationCommandType.ChatInput) {
const commands = Commands.get(interaction.data.name);
return await commands.run(new CommandContext(
c,
commands,
interaction
));
}
return new CommandContext(c).respond({
type: InteractionResponseType.ChannelMessageWithSource,
data: {
content: 'Beep boop. Boop beep?'
try {
const signature = c.req.headers.get('X-Signature-Ed25519');
const timestamp = c.req.headers.get('X-Signature-Timestamp');
if (!signature || !timestamp) return c.redirect('https://www.youtube.com/watch?v=FMhScnY0dME'); // fireship :D
if (!await verifyKey(JSON.stringify(c.req.parsedBody), signature, timestamp, config.client.public_key)) return c.redirect('https://www.youtube.com/watch?v=FMhScnY0dME'); // fireship :D
const interaction = c.req.parsedBody as unknown as APIPingInteraction | APIApplicationCommandInteraction | APIMessageComponentInteraction | APIApplicationCommandAutocompleteInteraction;
if (interaction.type === InteractionType.Ping) {
return new CommandContext(c).respond({
type: InteractionResponseType.Pong
});
}
});
if (interaction.type === InteractionType.ApplicationCommandAutocomplete && interaction.data.type === ApplicationCommandType.ChatInput) {
const command = Commands.get(interaction.data.name);
let options = command.options;
const subCommandGroup = interaction.data.options.find(option => option.type === ApplicationCommandOptionType.SubcommandGroup)
const subCommand = interaction.data.options.find(option => option.type === ApplicationCommandOptionType.Subcommand);
// @ts-expect-error ?? find
if (subCommandGroup) options = options.find(option => option.name === subCommandGroup.name)?.options;
// @ts-expect-error ?? find
if (subCommand) options = options.find(option => option.name === subCommand.name)?.options;
// @ts-expect-error i dont want waste time
const focused: APIApplicationCommandBasicOption = interaction.data.options.find(option => option.focused === true);
// @ts-expect-error ?? find
const option: Option | OptionOptions = options.find(option => option.name === focused.name);
return option.run(new AutocompleteContext(
c,
option,
focused.value
));
}
if (interaction.type === InteractionType.ApplicationCommand && interaction.data.type === ApplicationCommandType.ChatInput) {
const commands = Commands.get(interaction.data.name);
return await commands.run(new CommandContext(
c,
commands,
interaction
));
}
return new CommandContext(c).respond({
type: InteractionResponseType.ChannelMessageWithSource,
data: {
content: 'Beep boop. Boop beep?'
}
});
} catch(e) {
console.log(e);
}
})
await Bun.serve({