javascript - Discord 机器人存在
问题描述
我最近使用 discord.js v12 制作了一个 Discord 机器人,但我无法为该机器人设置存在。
这是代码:
client.user.setPresence({ game: { name: '.help' }, status: 'online' });
错误是:TypeError: Cannot read property 'setPresence' of null
。
解决方案
如果您阅读此处的Client类文档,您可以看到该user
属性的类型?ClientUser
是?
没有前面的类型 - 这意味着它可能没有被定义(它是一个可选值)。
如果您访问ClientUser
文档,它会显示“代表已登录客户端的 Discord 用户”。
我猜如果客户端还没有完全登录,那么该user
属性将是未定义的。先调用client.login(token)
,这是一个异步函数,然后就可以改变存在了。
这意味着,使用承诺:
client.login(token).then((token) => {
// client.user is now defined
client.user.setPresence({
game: { name: '.help' },
status: 'online',
});
});
您可能还想client.user
在继续防止崩溃之前查询以任何一种方式定义的。
我怀疑您现有代码不起作用的原因是因为如果您没有在登录函数的回调中设置存在,那么在其余代码运行时您还没有完成登录。以下将导致错误:
client.login(token); // bad - this is async
client.user.setPresence(...)
推荐阅读
- apache-spark - Spark:如何删除 df 列值中的不必要字符
- ruby-on-rails - 我无法在 Ruby on Rails 中连接“localhost:3000”
- magento - 无法编译 Magento 2 主题
- node.js - 如何在 ADFS(作为 IDP)metadata.xml 中包含配置的声明或提前知道它们(在返回配置文件对象之前)?
- node.js - Mongoose Schema如何在数据库更新时更改date.now
- java - Xamarin Android Java 绑定库遭受运行时 OutOfMemoryError
- postgresql - 在 Postgres 中使用解释分析创建一个函数来检查执行时间
- c++ - 如何将 Ehlers 的 StochasticRSI 指标从 mql4 移植到 C++(从 MT4 到 QChartist)?
- mongodb - 对于聚合 Spring Data Mongo 中的嵌套文档,标准中的运算符无法按预期工作
- microsoft-graph-api - 适用于教育的 Office 365 开发人员计划