如何将用户标识添加到按钮交互中?
How to add the user id to the button interaction?
我正在开发 Discord 机器人,我正在尝试让按钮仅对使用该命令的用户起作用。
对不起,如果我听起来很蠢,但我不知道如何正确解释它。
到目前为止,我所拥有的是在频道中发送消息的命令 test,它附有 2 个按钮,而我想要的是附上用户的按钮的 ID。
.setCustomId(button1-${message.author.id}
)
如果所有代码都在一个文件中,这实际上是有效的。但是如果我拆分按钮的代码,它就不起作用了。
我尝试将 -${interaction.user.id} 添加到按钮名称,但它不起作用,因为它给我“未定义交互”。
module.exports = {
data: {
name: `button1`
},
async execute (interaction, client) {
interaction.channel.send({ content: "This button works!"})
}
}
有什么方法可以将用户的 id 添加到按钮名称中吗?
这应该对您有所帮助。任何时候使用应用程序命令时,该消息都有一个元素来标识发送者 interaction.message.interaction.user.id
,即发送命令的人的用户 ID。
但是在您的使用中,您使用的是一条消息,这很好,它仍然可以工作,因为消息有一个元素来指定要回复谁 interaction.message.mentions.users
,以便为您使用,试试下面的代码。您不需要将用户 ID 添加到按钮代码中。
if (message.content.startsWith(PREFIX + "test")) {
const row = new MessageActionRow().addComponents(
new MessageButton()
.setLabel("✔")
.setStyle("PRIMARY")
.setCustomId(`button1`),
new MessageButton()
.setLabel("✔")
.setStyle("SECONDARY")
.setCustomId(`button2`),
);
message.reply({
content: "Hello",
components: [row],
});
}
以下部分是您的 interactionCreate
代码的一部分,如果是主 bot.js 文件的一部分
client.on('interactionCreate', async interaction => {
if (interaction.isButton()) {
const buttonID = interaction.customId;
if (buttonID === 'button1') {
if (interaction.message.mentions.users.get(interaction.user.id)) {
interaction.channel.send({
content: "This button works!",
});
// This is the sender of the command
console.log(true);
} else {
// This is not the sender
console.log(false);
return;
}
} else if (buttonID === 'button2') {
if (interaction.message.mentions.users.get(interaction.user.id)) {
interaction.channel.send({
content: "This button works!",
});
console.log(true);
} else {
// This is not the sender
console.log(false);
return;
}
}
}
});
如果您将 interactionCreate
命令作为单独的文件,代码将如下所示
module.exports = {
data: {
name: `interactionCreate`,
},
async execute(interaction, client) {
const buttonID = interaction.customId;
if (buttonID === 'button1') {
if (interaction.message.mentions.users.get(interaction.user.id)) {
interaction.channel.send({
content: "This button works!",
});
// This is the sender of the command
console.log(true);
} else {
// This is not the sender
console.log(false);
return;
}
} else if (buttonID === 'button2') {
if (interaction.message.mentions.users.get(interaction.user.id)) {
interaction.channel.send({
content: "This button works!",
});
console.log(true);
} else {
// This is not the sender
console.log(false);
return;
}
}
},
};
我正在开发 Discord 机器人,我正在尝试让按钮仅对使用该命令的用户起作用。
对不起,如果我听起来很蠢,但我不知道如何正确解释它。
到目前为止,我所拥有的是在频道中发送消息的命令 test,它附有 2 个按钮,而我想要的是附上用户的按钮的 ID。
.setCustomId(button1-${message.author.id}
)
如果所有代码都在一个文件中,这实际上是有效的。但是如果我拆分按钮的代码,它就不起作用了。
我尝试将 -${interaction.user.id} 添加到按钮名称,但它不起作用,因为它给我“未定义交互”。
module.exports = {
data: {
name: `button1`
},
async execute (interaction, client) {
interaction.channel.send({ content: "This button works!"})
}
}
有什么方法可以将用户的 id 添加到按钮名称中吗?
这应该对您有所帮助。任何时候使用应用程序命令时,该消息都有一个元素来标识发送者 interaction.message.interaction.user.id
,即发送命令的人的用户 ID。
但是在您的使用中,您使用的是一条消息,这很好,它仍然可以工作,因为消息有一个元素来指定要回复谁 interaction.message.mentions.users
,以便为您使用,试试下面的代码。您不需要将用户 ID 添加到按钮代码中。
if (message.content.startsWith(PREFIX + "test")) {
const row = new MessageActionRow().addComponents(
new MessageButton()
.setLabel("✔")
.setStyle("PRIMARY")
.setCustomId(`button1`),
new MessageButton()
.setLabel("✔")
.setStyle("SECONDARY")
.setCustomId(`button2`),
);
message.reply({
content: "Hello",
components: [row],
});
}
以下部分是您的 interactionCreate
代码的一部分,如果是主 bot.js 文件的一部分
client.on('interactionCreate', async interaction => {
if (interaction.isButton()) {
const buttonID = interaction.customId;
if (buttonID === 'button1') {
if (interaction.message.mentions.users.get(interaction.user.id)) {
interaction.channel.send({
content: "This button works!",
});
// This is the sender of the command
console.log(true);
} else {
// This is not the sender
console.log(false);
return;
}
} else if (buttonID === 'button2') {
if (interaction.message.mentions.users.get(interaction.user.id)) {
interaction.channel.send({
content: "This button works!",
});
console.log(true);
} else {
// This is not the sender
console.log(false);
return;
}
}
}
});
如果您将 interactionCreate
命令作为单独的文件,代码将如下所示
module.exports = {
data: {
name: `interactionCreate`,
},
async execute(interaction, client) {
const buttonID = interaction.customId;
if (buttonID === 'button1') {
if (interaction.message.mentions.users.get(interaction.user.id)) {
interaction.channel.send({
content: "This button works!",
});
// This is the sender of the command
console.log(true);
} else {
// This is not the sender
console.log(false);
return;
}
} else if (buttonID === 'button2') {
if (interaction.message.mentions.users.get(interaction.user.id)) {
interaction.channel.send({
content: "This button works!",
});
console.log(true);
} else {
// This is not the sender
console.log(false);
return;
}
}
},
};