为什么“ message.channel.find”不是一个函数?

时间:2018-12-27 04:01:41

标签: javascript node.js discord.js

我正在创建一个discord机器人,并且我想为其创建一个“警告”命令,以在不正常的服务器上警告用户的行为。但是,当我运行代码并尝试使用命令时,它仅到达一半,在弹出未处理的承诺拒绝消息时,即使我已经完全定义了,我也没有定义我的message.channel.find()函数它。

在某些背景下,我正在用javascript node.js对该机器人进行编码,以使其更加具体。我也在使用discord.js库。我尝试重新启动代码,重新输入括号内的内容,甚至尝试重新格式化几次。但是,这些都不起作用。我包含了我的代码,以帮助大家更好地了解我的问题。

// Here is where it starts to get shakey
let firstslice = message.content.slice(6);
let membertag = membertobewarned.tag;
let reason = firstslice.slice(membertag);
message.channel.send("Second debugging check, check!");

// Here is where it stops working, and the line below this text is where I 
// am getting unhandled promise rejection errors from.
let warnchannel = message.channel.find(`name`, "logs");
if (message.author.bot) return;
if (!message.author.hasPermission("MANAGE_MESSAGES")) return message.channel.send("Sorry, but you do not have permission to use this command.");
if (!membertobewarned.hasPermission("MANAGE_MESSAGES")) return message.channel.send("Sorry, but you cannot warn this member.");

message.channel.send("Third debugging thing, check!");

let warnembed = new Discord.RichEmbed()
  .setDescription("Warning")
  .setColor("#FFA500")
  .addField("User:", membertobewarned)
  .addField("Warned By:", commanduser)
  .addField("For Reason:", reason)
  .addField("Time:", timewarned);
warnchannel.send(warnembed);

message.channel.send("I'm all done!");

应该发生的是,该机器人将获得消息发送的渠道,要警告的人,警告该人的人,他们的提及以及发出警告的原因。 然后,它将获取该信息,并将其编译为不和谐的RichEmbed,然后将其发送到#logs通道。
但是,实际上发生的是在命令运行时,它将获取所有信息,然后在检查#logs通道的位置,将引发错误:

UnhandledPromiseRejectionWarning TypeError: message.channel.find is not a function. 

我希望能够弄清楚为什么我会收到此错误,以及如何解决该错误。谢谢大家阅读本文,希望大家能尽快为我提供帮助,并度过美好的一天。

1 个答案:

答案 0 :(得分:1)

那是因为message.channel是一个对象,而不是数组或Map(在Discord.js中,它称为Collection)。

我不太确定要完成什么,但是如果要选择其他频道,则需要使用其中一个

message.guild.channels.find('name', 'logs')

或更新的Discord.js版本

message.guild.channels.find(channel => channel.name === 'logs')