【发布时间】:2020-12-19 18:57:56
【问题描述】:
我一直在将为 discord.js v11 编写的 Discord 机器人代码转换为 v12。我仍然无法工作的唯一部分代码是一个利用 enmap 数据的循环: 我当前的代码:
exports.run = (client, message, args) => {
let serverlist = client.guilds.cache.array(); // Grabs the Guilds.
const server = message.guild.id; // Key for client.Networks
let Sender = client.Networks.get(server); // Key is already defined with 'server' there is no point typing it out again unless it is different.
const input = args.join(" "); // Joins the arguments together.
for (let i = 0; i < serverlist.length; i++) {
let Recipient = client.Networks.get(serverlist[i].id);
Recipient = parseInt(Recipient);
//if (Sender == Recipient) {
if (server === serverlist[i].id) {
try {
if (
!serverlist[i].channels.cache.find(
(channel) => channel.name === "broadcast"
)
)
continue; // If the channel it just skips it, and starts from the top again.
这是原始代码:
exports.run = (client, message, args) => {
var serverlist = client.guilds.array();
console.log(client.Networks);
var server = message.guild.channels;
var Sender = client.Networks.get(message.guild.name);
const input = args.join(" "); //rejoins arg array into string
for (var i = 0; i < serverlist.length; i++) {
//get network id of message sender
var Recipient = client.Networks.get(serverlist[i].name);
Recipient = parseInt(Recipient);
if (Sender == Recipient) {
try {
var serv = serverlist[i].channels.find(
(serv) => serv.name === "broadcast"
);
Enmap 数据似乎存储得很好。键是服务器 ID,每个键的值是服务器所属网络的名称。该循环应该将消息传输到网络中每个服务器上的#broadcast 频道。代码在发件人 === 收件人检查时失败。如果在机器人正在检查的服务器之一上找不到#broadcast 频道,则尝试以捕获结束。 为什么发件人和收件人不匹配,这个循环结构是否正确?
【问题讨论】:
标签: javascript node.js networking discord.js bots