每当我尝试将我的机器人连接到两个语音连接时,它就会与前一个连接断开。有没有办法使用Discordie连接到多个语音插座?如果是这样,怎么样?
这是我的代码:
const Discordie = require("discordie");
const fs = require('fs');
const Events = Discordie.Events;
const client = new Discordie({autoReconnect: true});
client.autoReconnect.enable();
client.connect({token: token});
var channels = new Array();
var connections = new Object();
client.Dispatcher.on(Events.GATEWAY_READY, e => {
client.User.setStatus("online");
console.log("Connected as: " + client.User.username);
process.title = "Discord Bot: " + client.User.username;
client.Channels.forEach((channel) => {
if (channel.name == 'cantina') channels.push(channel.id);
});
r.context.client = client;
r.displayPrompt();
});
client.Dispatcher.on(Events.CHANNEL_CREATE, (e) => {
if (e.channel.name == 'cantina') {
channels.push(e.channel.id);
}
});
client.Dispatcher.on(Events.VOICE_CHANNEL_JOIN, (e) => {
if (channels.includes(e.channel.id) && e.channel.members.length <= 2) {
e.channel.join().then((info) => {
var connection = info.voiceConnection;
connections[e.channel.id] = {
channel: e.channel,
connectionInfo : info,
connection: connection
}
play(e.channel, connection);
});
}
});
function play(channel, connection) {
//function to play the song
}
答案 0 :(得分:1)
从有关“分片”的不和谐文档中查看此部分: https://discordapp.com/developers/docs/topics/gateway#sharding
随着僵尸程序的增长并被添加到越来越多的公会中,一些开发人员可能会发现有必要将其部分机器人操作分解或拆分为单独的逻辑进程。因此,Discord网关实现了一种用户控制的公会分片方法,允许在多个网关连接上分割事件。公会分片完全由用户控制,并且不需要在单独的连接之间进行状态共享即可运行。
这是指网关连接,但根据本节: https://discordapp.com/developers/docs/topics/voice-connections#voice
语音连接以与网关连接类似的方式运行,但它们在不同的有效负载集上运行,并利用单独的基于UDP的连接进行语音数据传输。
因此,您可以推断,如果可能有多个网关连接并且语音连接相似,那么是可能的。无论是否可能使用discordie,我都无法在文档中找到任何可以说明你能不能的内容。
如需更多帮助,请发布您尝试执行的操作的代码示例,有人可能会在您的代码中发现问题。