我想制作一个可分页队列命令,这样我就可以用反应控制整个队列。但是,每当我运行命令时,总是会出现错误。因此,我希望每当消息作者对⏹" 反应。这是我的密码:
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;
}
但是,即使在机器人对停止反应作出反应时删除它。我从bot收到一条消息,说发生了一个错误。我无法理解为什么,也无法理解如何解决它。你能帮我吗?提前谢谢!
错误是因为您试图删除嵌入后放置在嵌入上的反应。因此,您需要移动队列嵌入。delete()
在反应之后。用户。删除(message.author.id)
。或者在queueEmbed之后退出。删除()
。
我是一个初学者程序员(或者在我看来是这样),我需要帮助在音乐机器人中实现一个队列。 目前,只有当队列中有一首歌时,队列才能正常工作。如果有更多的歌曲,那么递归开始(在=wait serverQueue(语音,消息)之后从def play开始并等待play(queue.pop(0),语音,消息)从队列开始),并且所有歌曲只是跳过。 我试图以不同的方式解决这个问题,例如,引入了第二个变量,但这并没有带
我刚开始用node学习javascript。js和我正在尝试创建一个音乐机器人,我已经设置了命令处理程序和所有东西,但是,当我尝试运行play命令时,我一直会遇到这个错误 错误:未找到FFmpeg/avconv!在功能上。getInfo(C:\Users\johnd\OneDrive\Desktop\discordBot\node\u modules\prism media\src\core\FF
我已经在不和谐机器人上工作了几天。 起初只是简单的命令等,但慢慢地,我也致力于音乐机器人的主题。 我也使用YouTube数据API来实现这一点,到目前为止一切都正常。不过,我现在想合并一个Youtube搜索命令或将其构建到另一个(Play命令)中。我已经有半个搜索命令了。 到目前为止你可以做$play(歌名) 将选择找到的第一个轨迹。 然而,我希望能够看到前10个搜索结果,然后在它们之间进行选择。
尝试制作一个简单的音乐机器人,只播放一个链接,但它不连接到语音通道,因此不会出现任何错误,所以我只能放入所有代码。这是我的主要内容。js公司 这是我的音乐机器人命令,我认为它是正确的,因为我已经在这里请求了一些人的帮助。
当我在discord内部运行以下脚本(“cmd中的node musicbot.js”)和“!play ytlink”时,bot加入语音通道,并在控制台中记录命令和链接。然而,音乐并没有开始播放。我安装了ffmpeg、ytdl核心和discord。js。 有人能帮我吗?我不知道是哪一部分搞砸了。
下面是代码: 出于某种原因,即使我使用用户id,bot也总是输出“未找到用户”。机器人有权这么做,有人知道解决办法吗?