Discord.js TypeError:无法读取未定义发送到特定频道的属性“发送”
Posted
技术标签:
【中文标题】Discord.js TypeError:无法读取未定义发送到特定频道的属性“发送”【英文标题】:Discord.js TypeError: Cannot read property 'send' of undefined Sending to specific channel 【发布时间】:2020-09-07 15:40:40 【问题描述】:我正在尝试制作一个在特定时间/日期宣布事件的不和谐机器人。 代码:
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');
(显然我已经更换了一些零件) 错误信息是: 类型错误:无法读取未定义的属性“发送”
而且它只在 event2 出现。它也不会发送消息“test”。
【问题讨论】:
抛出这个错误是因为cache.get('id')
的结果是未定义的。
为什么它只会在event2之后抛出它?
尝试console.log(client.channels)
查看输出结果,您可以从那里进行故障排除。
【参考方案1】:
您的代码中存在一些问题。您正在这里按您的日期和时间执行任务:
问题 1 - 作业
if (day = 3)
if (time = 15)
client.channels.cache.get('id').send('event2')
这段代码的意思是,如果 javascript 成功地将 day
设置为 3
(它将),并且如果 javascript 成功地将 time
设置为 15
,再次(它也将),那么它应该执行client.channels.cache.get('id').send('event2')
。
您需要使用双等号或三等号来检查是否相等。
这就是您的client.channels.cache.get('id').send('event2')
首先抛出错误的原因。这是实际运行的第一条这样的线路。
问题 2 - 通过 id 获取频道
您正在使用client.channels.cache.get('id')
尝试获取您想要广播到的频道。
'id'
只是一个占位符,需要替换为频道id。
问题3——直接访问缓存
没有真正的理由直接访问缓存,您应该使用client.channels.fetch('id')
- 再次,将 id 替换为频道 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');
专家补充
您的代码还有一些其他问题(while(true)
循环将继续循环,即使它仅在 99.9% 的时间检查时间)。我建议搜索人们用来使用 discord.js 实现基于时间的任务的其他模式。
【讨论】:
现在它抛出 TypeError: client.channels.fetch(...).send is not a function (谢谢你的其他事情!) 因此,有相当大的错误区域会破坏您的代码。您的client.channels.fetch('id').send()
调用在检查客户端是否成功登录之外被调用。如果您强制您的条件之一为真,代码将尝试在客户端登录之前发送消息。跨度>
以上是关于Discord.js TypeError:无法读取未定义发送到特定频道的属性“发送”的主要内容,如果未能解决你的问题,请参考以下文章
TypeError:无法读取未定义的“获取”函数(discord.js)
Discord.js:TypeError:无法读取未定义的属性“删除”
(Discord.js)TypeError:无法读取未定义的属性“添加”
Discord.js:TypeError:无法读取未定义的属性“get”