interaction collector discord.js 收集在收集器声明之后执行的所有交互
interaction collector discord.js collects all interactions that are executed after the collector declaration
意思:斜杠命令的响应中有一些内容和一个按钮。按钮的任务是删除消息。我们设法做到的是强制按钮删除消息,但问题是不仅删除了按钮所在的消息,还有其他消息。
const {
MessageEmbed,
MessageActionRow,
MessageButton
} = require('discord.js')
const {
SlashCommandBuilder
} = require('@discordjs/builders')
const Color = 'RANDOM'
module.exports = {
name: 'Name',
data: new SlashCommandBuilder()
.setName('Name')
.setDescription('Description')
.addStringOption(option => option.setName('choice')
.setDescription('Description')
.setRequired(true)
.addChoice('choice1', 'choice1')
.addChoice('choice2', 'choice2')
.addChoice('choice3', 'choice3')
async run(interaction) {
const Embed = new MessageEmbed()
.setColor(Color)
.setTimestamp()
.setImage(url)
const Btns = new MessageActionRow()
.addComponents(new MessageButton()
.setCustomId('DeleteMsg')
.setStyle('DANGER')
.setLabel('Удалить сообщение (Только автор или администратор)'))
interaction.reply({
embeds: [Embed],
components: [Btns]
})
try {
const collector = interaction.channel.createMessageComponentCollector({
time: 60000
})
collector.on('collect', async i => {
interaction.deleteReply()
})
} catch (error) {
console.log(error)
}
}
}
好的,首先,您应该始终向您的组件收集器添加一个过滤器。
(要收集多少项目,检查正确的用户是否使用了您的组件,...)
您还应该有一个 真实 自定义 ID(如 UUID 或类似的东西),因为如果在同一个频道中多次调用您的命令,那么您的自定义 ID 将不会'不再是自定义的,可以被频道中的每个收藏家 运行 收集。
意思:斜杠命令的响应中有一些内容和一个按钮。按钮的任务是删除消息。我们设法做到的是强制按钮删除消息,但问题是不仅删除了按钮所在的消息,还有其他消息。
const {
MessageEmbed,
MessageActionRow,
MessageButton
} = require('discord.js')
const {
SlashCommandBuilder
} = require('@discordjs/builders')
const Color = 'RANDOM'
module.exports = {
name: 'Name',
data: new SlashCommandBuilder()
.setName('Name')
.setDescription('Description')
.addStringOption(option => option.setName('choice')
.setDescription('Description')
.setRequired(true)
.addChoice('choice1', 'choice1')
.addChoice('choice2', 'choice2')
.addChoice('choice3', 'choice3')
async run(interaction) {
const Embed = new MessageEmbed()
.setColor(Color)
.setTimestamp()
.setImage(url)
const Btns = new MessageActionRow()
.addComponents(new MessageButton()
.setCustomId('DeleteMsg')
.setStyle('DANGER')
.setLabel('Удалить сообщение (Только автор или администратор)'))
interaction.reply({
embeds: [Embed],
components: [Btns]
})
try {
const collector = interaction.channel.createMessageComponentCollector({
time: 60000
})
collector.on('collect', async i => {
interaction.deleteReply()
})
} catch (error) {
console.log(error)
}
}
}
好的,首先,您应该始终向您的组件收集器添加一个过滤器。 (要收集多少项目,检查正确的用户是否使用了您的组件,...)
您还应该有一个 真实 自定义 ID(如 UUID 或类似的东西),因为如果在同一个频道中多次调用您的命令,那么您的自定义 ID 将不会'不再是自定义的,可以被频道中的每个收藏家 运行 收集。