我正在制作一个不和谐的机器人命令,该命令返回角色的成员。
interaction.deferReply()
工作正常,但 interaction.followUp(...)
不起作用。
交互停留在“--- 机器人正在思考...”,并且没有抛出任何错误消息。
我尝试使用
console.log
调试我的代码,让我了解代码崩溃的位置,但它告诉我一切都很好。
所以我不知道出了什么问题
这是代码,
const { SlashCommandBuilder, EmbedBuilder, ButtonBuilder, ButtonStyle, ActionRowBuilder, MessageButton } = require('@discordjs/builders')
const Data = require('../../data/data.json') // Data storage (Not used in this command)
命令数据
module.exports = {
data: new SlashCommandBuilder()
.setName('inrole')
.setDescription('Retrieve members of a role.')
.addRoleOption(option =>
option.setName("role")
.setDescription("Which role members to retrieve.")
.setRequired(true)
)
.addStringOption(option =>
option.setName("private")
.setDescription("Send a private or public message?")
.addChoices(
{ name: 'Public', value: '1' },
{ name: 'Private', value: '2' },)
)
.addIntegerOption(option =>
option.setName("offset")
.setDescription("Page offset, default is 0. Each page contains 10 users max.")
.setMinValue(0)
),
命令定义
async execute(interaction, client) { // Function that defines the command
await interaction.deferReply()
let guild = interaction.guild;
await guild.members.fetch()
var role = guild.roles.cache.get(interaction.options.getRole('role').id)
var p = interaction.options.getString("private")
if (p == '2') p = true; else p = false
var n = interaction.options.getInteger("offset") ?? 0
var mList = role.members.map(x => '<@' + x.id + '> ||' + x.username + '||').slice(n*10,n*10+10).join('\n')
if ((mList === "") && n > 0) {
mList = "Page is empty."
} else if (mList === "") {
mList = "No one has this role."
}
let len = role.members.map(x => '<@' + x.id + '> ||' + x.username + '||').slice(n*10,n*10+10).length
mList = '-# Page: ' + (Number(n) + 1) + ' | Showing ' + len + ' member' + (len != 1 ? 's' : '') + '\n** **\n' + mList + "\n** **"
var embed = new EmbedBuilder()
.setTitle('Users in the `' + role.name + '` role')
.setDescription(mList)
.setFooter({text: 'Total Members: ' + role.members.size})
await interaction.followUp({embeds: [embed],ephemeral: p})
}
}
有什么想法吗?谢谢。
更新:我的机器人拥有的所有其他命令也会发生这种情况,包括像
/ping
或 /coinflip
这样的简单命令,但使用前缀的聊天命令可以工作。
第二次更新:有时有效,有时无效。
interaction.deferReply() 允许您推迟对您的操作的响应。它不返回消息。要提交您的回复,尝试使用 editReply 而不是 followUp。
欲了解更多信息,请访问:
https://discordjs.guide/slash-commands/response-methods.html#deferred-responses