【问题标题】:Discord.js Music bot Queue CommandDiscord.js 音乐机器人队列命令
【发布时间】:2021-02-07 21:48:48
【问题描述】:

我想制作一个可分页的队列命令,这样我就可以通过反应来控制整个队列。但是,每当我运行命令时,我都会收到错误消息。所以我希望机器人在消息作者对“⏹”反应做出反应时删除队列嵌入消息。这是我的代码:

const { MessageEmbed } = require("discord.js");

module.exports = {
  name: "queue",
  aliases: ["q"],
  description: "Show the music queue and now playing.",
  async execute(message) {
       const serverQueue = message.client.queue.get(message.guild.id);
        if (!serverQueue) return message.channel.send('❌ **Nothing playing in this server**');
      try {
        let currentPage = 0;
        const embeds = generateQueueEmbed(message, serverQueue.songs);
        const queueEmbed = await message.channel.send(`**Current Page - ${currentPage + 1}/${embeds.length}**`, embeds[currentPage]);
        await queueEmbed.react('⬅️');
        await queueEmbed.react('⏹');
        await queueEmbed.react('➡️');

        const filter = (reaction, user) => ['⬅️', '⏹', '➡️'].includes(reaction.emoji.name) && (message.author.id === user.id);
        const collector = queueEmbed.createReactionCollector(filter);
        
        collector.on('collect', async (reaction, user) => {
          try {
            if (reaction.emoji.name === '➡️') {
                if (currentPage < embeds.length - 1) {
                    currentPage++;
                    queueEmbed.edit(`**Current Page - ${currentPage + 1}/${embeds.length}**`, embeds[currentPage]);
                } 
            } else if (reaction.emoji.name === '⬅️') {
                if (currentPage !== 0) {
                    --currentPage;
                    queueEmbed.edit(`**Current Page - ${currentPage + 1}/${embeds.length}**`, embeds[currentPage]);
                }
            } else {
                collector.stop();
                reaction.message.reactions.removeAll();
                queueEmbed.delete();
            }
            await reaction.users.remove(message.author.id);
          } catch {
            console.log();
            return message.channel.send("An error occured");
          }
        });
      } catch {
        console.log();
          return message.channel.send("An error occured");
      }
    }
};

function generateQueueEmbed(message, queue) {
    const embeds = [];
    let k = 10;
    for (let i = 0; i< queue.length; i += 10) {
        const current = queue.slice(i, k);
        let j = i;
        k += 10;
        const info = current.map(track => `${++j} - [${track.title}](${track.url})`).join('\n');
        const embed = new MessageEmbed()
            .setTitle('Song Queue\n')
            .setThumbnail(message.guild.iconURL())
            .setColor("#F8AA2A")
            .setDescription(`**Current Song - [${queue[0].title}](${queue[0].url})**\n\n${info}`)
            .setTimestamp();
        embeds.push(embed);
    }
    return embeds;
}

但是,即使机器人在对停止反应做出反应时将其删除。我从机器人那里收到一条消息,上面写着An error occurred。我无法理解为什么,我无法理解如何解决它。你能帮我吗?提前致谢!

【问题讨论】:

    标签: javascript node.js discord discord.js


    【解决方案1】:

    该错误是因为您在删除嵌入后尝试删除放置在嵌入上的反应。所以你需要将queueEmbed.delete() 移动到reaction.users.remove(message.author.id) 之后。或者在queueEmbed.delete()之后退出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-21
      • 2021-12-19
      • 2018-07-18
      • 2019-04-05
      • 2020-09-23
      • 2020-09-22
      • 2021-05-24
      • 2019-05-05
      相关资源
      最近更新 更多