我正在使用 Discord.js 创建一个附加到嵌入的按钮。单击此按钮时,事件处理程序会触发,但会发送一条临时消息,指出“获取此按钮时出现问题!”。我不确定为什么要发送它。
版本:npm [email protected]https://www.npmjs.com/package/discord.js/v/14.7.1
用于设置按钮的代码
function createEmbed(){
...
const embed = createQueueEmbed(players, id, type);
const messageRow = createJoinLeaveRow(id);
await message.channel.send({ embeds: [embed], components: [messageRow] });
}
function createQueueEmbed(players, id, type){
var playerString = "";
for (var i = 0; i < players.length; i++) {
playerString += `${players[i]}` + "\r\n";
}
const embed = new EmbedBuilder()
.setColor("#FFFFFF")
.setTitle(`8's Queue [${type}]`)
.setDescription(`ID: ${id}\r\n\r\n${players.length}/8\r\n**Players**: \r\n${playerString}`);
return embed;
}
function createJoinLeaveRow(id) {
return new ActionRowBuilder()
.addComponents(
createJoin8sButton(id),
createLeave8sButton(id)
);
}
function createJoin8sButton(id) {
return new ButtonBuilder()
.setCustomId(`join8s-${id}`)
.setLabel("Join 8s")
.setStyle(ButtonStyle.Success);
}
function createLeave8sButton(id) {
return new ButtonBuilder()
.setCustomId(`leave8s-${id}`)
.setLabel("Leave 8s")
.setStyle(ButtonStyle.Danger);
}
为了处理交互,我有这个:
client.on(Events.InteractionCreate, async interaction => {
try{
if (!interaction.isButton()) return;
// Determine if the id starts with 'join8s'
if (interaction.customId.startsWith("join8s")) {
console.log("Join 8s button pressed");
console.log("Reached the end of the function!");
return;
}
// Determine if the id starts with 'leave8s'
if (interaction.customId.startsWith("leave8s")) {
console.log("Leave 8s button pressed");
return;
}
} catch (error) {
console.error(error);
}
});
事件处理程序中的那些 console.log 在按钮单击时触发,但消息仍然发送
我已经尽可能地简化了功能。输入的任何逻辑似乎都运行良好。这个短暂的信息似乎只是视觉上的