【问题标题】:Discord.js UnhandledPromiseRejectionWarning: TypeError: message.guild.channels.cache.array.forEach is not a functionDiscord.js UnhandledPromiseRejectionWarning:TypeError:message.guild.channels.cache.array.forEach 不是函数
【发布时间】:2021-06-17 08:30:19
【问题描述】:

我正在尝试为我的 discord.js 机器人创建票证功能,但是当我单击表情符号时,它会引发错误。代码如下:

let messageEmbed = await message.channel.send(ticketEmbed);
messageEmbed.react("1️⃣");
messageEmbed.react("2️⃣");
messageEmbed.react("3️⃣");
messageEmbed.react("4️⃣");

client.on('messageReactionAdd', async (reaction, user) => {
  if (reaction.message.partial) await reaction.message.fetch();
  if (reaction.partial) await reaction.fetch();
  if (user.bot) return;
  if (!reaction.message.guild) return;


  if (reaction.emoji.name === firstreaction) {
    const categoryId = "822577084223586364"
    var username =  reaction.message.guild.members.cache.get(user.id)
    var userDiscriminator =  reaction.message.guild.members.cache.get(user.id).discriminator
    var ticketExists = false

    message.guild.channels.cache.array.forEach(channel => {
      if(channel.name == userName.toLowerCase() + "-" + userDiscriminator){
        var ticketExists = true
        message.username.send("You already have an open ticket!")

        return
      }
    })
    if (ticketExists) return

    message.guild.channels.create("Playerreport-" +username.toLowerCase + userDiscriminator, {type: "text"})

【问题讨论】:

  • 你不需要将message.guild.channels.cache转换为数组,缓存存储为一个集合,它继承了Map的属性。您可以在集合上致电.forEach()

标签: javascript discord.js


【解决方案1】:

首先 Collection.array 是一个方法而不是一个属性,所以你需要像 Collection.array() 一样调用它。

其次,Collections 有一个继承自 Maps 的 forEach 方法,你可以直接调用它

message.guild.channels.cache.forEach(...)

【讨论】:

  • 谢谢,成功了!但我遇到了另一个问题。当我重新启动机器人时,对表情符号的反应不再起作用。你知道怎么解决吗?
猜你喜欢
  • 2020-12-31
  • 2020-12-07
  • 2020-08-23
  • 2020-01-22
  • 2020-11-13
  • 2017-11-28
  • 2021-06-15
  • 2020-12-22
  • 2021-01-27
相关资源
最近更新 更多