Discord.js TypeError:无法读取未定义发送到特定通道的属性“发送”

时间:2020-05-21 04:21:13

标签: javascript discord.js

我正在尝试制作一个不和谐的机器人,该机器人在特定的时间/日期宣布事件。
代码:

const Discord = require('discord.js');
const client = new Discord.Client();


client.on('ready', () => {
 console.log('Logged in as ${client.user.tag}!');
 client.channels.cache.get('id').send('test')
});
while (true){
  var today = new Date();
  var time = today.getHours();
  var day = today.getDay();
  if (day == 5) {
    if (time == 0) {
      client.channels.cache.get('id').send('event1');
    }
  }
  if (day = 3) {
    if (time = 15) {
      client.channels.cache.get('id').send('event2')
    }
  }
}

client.login('token');

(显然我已经更换了一些零件)
错误消息是:
TypeError:无法读取未定义的属性“发送”

它仅在事件2出现。它还不会发送“测试”消息。

1 个答案:

答案 0 :(得分:0)

您的代码中有几个问题。您正在这里按日期和时间执行作业:

问题1-分配

if (day = 3) {
  if (time = 15) {
    client.channels.cache.get('id').send('event2')
  }
}

此代码的意思是,如果javascript成功将day设置为3(并且将成功),并且javascript成功将time设置为{{1} }(同样也是),然后应执行15

您需要使用双倍或三倍等于来检查是否相等。

这是您的client.channels.cache.get('id').send('event2')首先引发错误的原因。这是实际上正在运行的第一行。

问题2-通过ID获取频道

您正在使用client.channels.cache.get('id').send('event2')尝试获取要广播的频道。

client.channels.cache.get('id')只是一个占位符,需要替换为通道ID。

问题3-直接访问缓存

没有直接访问缓存的真正原因,您应该使用'id'-再次,用通道ID替换ID。

它会自动访问缓存或查询服务器,这取决于哪个更合适。

client.channels.fetch('id')

专家的额外礼物

您的代码还有其他一些问题(const Discord = require('discord.js'); const client = new Discord.Client(); client.on('ready', () => { console.log('Logged in as ${client.user.tag}!'); client.channels.fetch('id').send('test') }); while (true){ var today = new Date(); var time = today.getHours(); var day = today.getDay(); if (day == 5) { if (time == 0) { client.channels.fetch('id').send('event1'); } } if (day == 3) { if (time == 15) { client.channels.fetch('id').send('event2') } } } client.login('token'); 循环将继续循环,即使它仅检查99.9%的时间)。我建议搜索人们习惯于使用discord.js实施基于时间的任务的其他模式。