开发者问题收集

我在尝试使用 forEach 时遇到问题

2021-10-03
54

我尝试当有人在公会 A/B/C 中写消息时,位于例如 3 个服务器中的机器人向第 4 个服务器中的我发送消息,通过名为“公会 A”、“公会 B”和“公会 C ”的不同文本频道(而不是同一个频道)发送...

我收到以下错误:

channel.send(msgLog)

TypeError: Cannot read property 'send' of undefined

这是我的代码:

const msgLog = `[#${message.channel.name}]=[${message.author.username}#${message.author.discriminator}]=> ${message.content}` ```

client.guilds.cache.map(guild => server.channels.cache.find(channel => channel.name == guild.name)).forEach(channel => 
      channel.send(msgLog)
      );
1个回答

该错误意味着 channelundefined ,并且您不能将任何属性(例如 'send' )设置为 undefined

这意味着 server 对于某些公会来说没有名为 guild.name 的频道。

您可以使用 filter 来仅包含已定义的频道:

client.guilds.cache
  .map(guild => server.channels.cache.find(channel => channel.name == guild.name))
  .filter(channel => channel) // returns false if channel === undefined
  .forEach(channel => channel.send(msgLog));

这大致相当于

client.guilds.cache.forEach(guild => {
  const channel = server.channels.cache.find(channel => channel.name == guild.name));
  if (channel) {
    channel.send(msgLog);
  }
});
Lauren Yim
2021-10-03