我正在制作一个音乐机器人,当成员写入“~play”时,机器人会在文件夹中搜索一个随机文件(. mp3),并加入用户当前所在的语音通道。我希望我的机器人在所有用户离开语音通道时离开语音通道。
const fs = require('fs');
module.exports.run = async (bot, message, args) => {
let channel = message.member.voice.channel;
if(!channel) return message.reply("You're not connected to a voice channel!");
if (channel) {
channel.join()
.then(connection => {
const commandFiles = fs.readdirSync('./commands/Workout/').filter(file => file.endsWith('.mp3'));
let randomfile = commandFiles[Math.floor(Math.random() * commandFiles.length)]
const dispatcher = connection.play(`./commands/Workout/${randomfile}`);
dispatcher.on('start', () => {
dispatcher.setVolume(0.70);
message.reply(" started this song: " + ` ${randomfile}`)
}).catch(err => console.error(err))
//console.log("Playing music");
})
dispatcher.on('error', (err) => console.log(err));
if(channel.members == 1){ //this is the problem
channel.leave()
}
dispatcher.on('finish', finish => {
message.reply(" Song ended! - " + ` ${randomfile}`)
//console.log("Playing ended");
channel.leave()
})
}).catch(err => console.error(err))
}
我找到了答案。这是我的代码:
const fs = require('fs');
module.exports.run = async (bot, message, args) => {
let found = 0;
let channel = message.member.voice.channel;
if (channel) {
channel.join()
.then(connection => {
const commandFiles = fs.readdirSync('./commands/Workout/').filter(file => file.endsWith('.mp3'));
let randomfile = commandFiles[Math.floor(Math.random() * commandFiles.length)]
const dispatcher = connection.play(`./commands/Workout/${randomfile}`);
dispatcher.on('start', () => {
dispatcher.setVolume(0.70);
message.reply(" has started this song: " + ` ${randomfile}`).then(sent => {
sentmessage = sent;
//console.log(id);
}).catch(err => console.error(err))
//console.log("Playing music");
})
dispatcher.on('error', (err) => console.log(err));
const voicechannel = message.member.voice.channel; //saving the voicechannel to an array
for (const [memberID, member] of voicechannel.members) { //look for member in the voicechannel array
if(member.user) found++; //member gives giuld.user, when found, found++
if(found < 1) return channel.leave();
//console.log("when bot joins:" + found);
}
bot.on("voiceStateUpdate", (oldState, newState) => {
let oldVoice = oldState.channelID;
let newVoice = newState.channelID;
if (oldVoice != newVoice) {
if (oldVoice == null) {
//console.log("before join:" + found);
found++;
//console.log("after join:" + found);
//console.log("User joined!");
}
if (newVoice == null) {
//console.log("before leaving:" + found);
found--;
//console.log("after leaving:" + found);
if(found == 1) return channel.leave();
}
}
})
dispatcher.on('finish', finish => {
message.reply(" song ended! - " + ` ${randomfile}`)
//console.log("Playing end");
channel.leave()
})
}).catch(err => console.error(err))
}
};
module.exports.help = {
name: "play"
};
我不知道它是否已经是一个非数组,如果是的话
channel.members.length == 1
我想知道是否有可能知道任何成员连接到discord中的特定语音频道。jsv12。2.0. 最近几天我一直在问这个问题。如果你有什么线索,请告诉我。
YouTube频道可以包含多个“相关”频道的列表。例如,音乐频道 音乐频道:http://www.youtube.com/channel/UC-9-kyTW8ZkZNDHQJ6FgpwQ 我想以上链接渠道(类别)明智的数据 音乐频道相关频道:http://www . YouTube . com/Channel/UC-9-kytw 8 zkzndhqj 6 fg pwq/Channels
我试图制作一个不和谐机器人,用户可以分配某些语音频道,让机器人在用户加入时自动加入语音频道。 但是,我需要制作一个类似数据库的东西来保存分配为自动连接频道的语音频道列表,以防止在bot关闭时丢失分配的频道列表。 我写了一个代码来保存到. txt文件中,代码是: 但是,当我运行它时,会出现如下错误: 我不知道如何将语音频道id转换为str,在频道周围使用str()也不起作用。 有没有办法让我做到这一
键入命令后(如果键入命令的人在语音频道中),它会将同一语音呼叫中的每个成员移动到不同的语音呼叫。到目前为止,我已经尝试使用各种代码,但我不确定如何返回给定vc中的每个成员(键入命令的人) > 如何检查输入命令的人是否在语音通话中? 如何返回给定VC中的所有成员? 如何将所有成员批量移动到新的给定频道?
我对javascript和discord.js很陌生,有人知道如何让机器人加入一个频道,播放一个文件然后离开吗? 以下是我尝试过的: 现在,它将发送消息加入语音通道,而不管我是否在其中,如果我在其中,它就不会加入语音通道并播放文件。任何帮助都很感激。
问题出在下面的代码上: 此函数的作用是移动一个或多个已引用到specefic voice chanel的成员。 示例:“~send_to_channel@person” 调用该函数时,由于某种原因,“discord.Client().get_channel(*channel ID*)”不会返回语音频道或任何该频道的频道。我已经阅读了stack overflow中的文档和其他一些答案,但我不知道是什