fix button implementation for updates
This commit is contained in:
parent
4bac943011
commit
ffc395b4aa
3 changed files with 34 additions and 18 deletions
|
@ -1,6 +1,7 @@
|
|||
import { readdir } from 'fs/promises';
|
||||
import { removeExtension } from '../utils/misc';
|
||||
import { Client } from 'discord.js';
|
||||
import { ChatInputCommandInteraction, Client, MessageComponentInteraction } from 'discord.js';
|
||||
import { getLocale } from '../utils/locales';
|
||||
|
||||
export default async (client: Client) => {
|
||||
// Dossier des buttons
|
||||
|
@ -34,3 +35,33 @@ export default async (client: Client) => {
|
|||
}),
|
||||
);
|
||||
};
|
||||
|
||||
/**
|
||||
* Collect interactions for buttons
|
||||
* @param client Client
|
||||
* @param interaction Chat interaction
|
||||
* @param id Button ID
|
||||
* @param deferUpdate defer update in case update take time
|
||||
*/
|
||||
export const collect = (client: Client, interaction: ChatInputCommandInteraction, id: string, deferUpdate = false) => {
|
||||
const loc = getLocale(client, interaction.locale);
|
||||
const button = client.buttons.list.get(id);
|
||||
|
||||
if (!button) {
|
||||
interaction.reply({
|
||||
content: loc.get('e_interacreate_no_button'),
|
||||
});
|
||||
}
|
||||
|
||||
const filter = (i: MessageComponentInteraction) => i.customId === id;
|
||||
const collector = interaction.channel?.createMessageComponentCollector({ filter });
|
||||
collector?.on('collect', async (i) => {
|
||||
if (deferUpdate) {
|
||||
await i.deferUpdate();
|
||||
}
|
||||
const msg = await button?.interaction(i, client);
|
||||
if (msg !== undefined) {
|
||||
await i.update(msg);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { Client, ComponentType, Interaction, InteractionType } from 'discord.js';
|
||||
import { Client, Interaction, InteractionType } from 'discord.js';
|
||||
import { getLocale } from '../../utils/locales';
|
||||
|
||||
/** https://discord.js.org/#/docs/discord.js/main/class/Client?scrollTo=e-interactionCreate */
|
||||
|
@ -29,21 +29,6 @@ export default (interaction: Interaction, client: Client) => {
|
|||
return modal.interaction(interaction, client);
|
||||
}
|
||||
|
||||
case InteractionType.MessageComponent:
|
||||
if (interaction.componentType == ComponentType.Button) {
|
||||
const button = client.buttons.list.get(interaction.customId);
|
||||
if (!button) {
|
||||
return interaction.reply({
|
||||
content: loc.get('e_interacreate_no_button'),
|
||||
});
|
||||
}
|
||||
|
||||
return button.interaction(interaction, client);
|
||||
}
|
||||
|
||||
// Handle only buttons for now
|
||||
throw RangeError;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -56,7 +56,7 @@ declare module 'discord.js' {
|
|||
name: string
|
||||
},
|
||||
/** How the button interact */
|
||||
interaction: (interaction: ButtonInteraction, client: Client) => unknown
|
||||
interaction: (interaction: MessageComponentInteraction, client: Client) => Promise<InteractionUpdateOptions>
|
||||
}
|
||||
>,
|
||||
},
|
||||
|
|
Loading…
Reference in a new issue