Javascript 为什么';t发送者=接收者?

Javascript 为什么';t发送者=接收者?,javascript,node.js,networking,discord.js,bots,Javascript,Node.js,Networking,Discord.js,Bots,我一直在将为Discord.jsv11编写的Discord bot代码转换为v12。代码中唯一一部分我仍然无法使用的是一个利用enmap数据的循环: 我当前的代码: exports.run = (client, message, args) => { let serverlist = client.guilds.cache.array(); // Grabs the Guilds. const server = message.guild.id; // Key for client

我一直在将为Discord.jsv11编写的Discord bot代码转换为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=(客户端、消息、参数)=>{
让serverlist=client.guilds.cache.array();//获取行会。
const server=message.guild.id;//client.Networks的密钥
让Sender=client.Networks.get(server);//密钥已使用“server”定义,除非它不同,否则没有必要再次键入它。
const input=args.join(“”;//将参数连接在一起。
for(设i=0;ichannel.name==“广播”
)
)
continue;//如果该通道被删除,它将跳过它,并再次从顶部开始。
以下是原始代码:

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"
        );
exports.run=(客户端、消息、参数)=>{
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(“”;//将arg数组重新连接到字符串中
对于(var i=0;iserv.name==“广播”
);
Enmap数据似乎存储得很好。密钥是服务器ID,每个密钥的值是服务器所属网络的名称。这个循环应该将消息传输到网络中每个服务器上的#广播频道。在发送方===接收方检查时,代码失败。尝试仅以捕获#广播频道是否为结束在bot正在检查的服务器之一上未找到annel。
为什么发送者和接收者不匹配,这个循环结构是否正确?

我注意到您使用的是
parseInt(接收者)
,而不是
parseInt(发送者)
。因此,您的
发件人
可能是一个字符串,而您的
收件人
可能是一个整数。在旧代码中,您使用了松散相等的
=
,这会执行。但在当前代码中,您使用的是严格相等的
==
,如果要检查的两个值的类型不同(字符串和int),则该值永远不会为真

如果您不特别需要发送者或接收者实际上是一个数字,我建议只删除
recipient=parseInt(recipient)
行。如果您需要,我建议使用:


是的,实际上我已经在v12代码中将其更改为用户服务器ID,而不是名称。我还考虑删除所有发送方/接收方代码,只使用类似Enmap.ForEach或Enmap.Filter的代码,因为循环正在检查一个Enmap,以发送到具有相同值(网络名称)的每台服务器那可能会简单得多。@Startropic1你是这么做的!原谅我,我没有注意到这个变化。我会划掉答案的那一部分,因为它不相关。
var Sender = +client.Networks.get(message.guild.name);
var Recipient = +client.Networks.get(serverlist[i].name);