我最近使用discord.js v12制作了Discord机器人,但无法设置该机器人的状态。
这是代码:
client.user.setPresence({ game: { name: '.help' }, status: 'online' });
错误是:TypeError: Cannot read property 'setPresence' of null
。
答案 0 :(得分:0)
如果您在此处阅读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(...)
答案 1 :(得分:0)
这不是相当的答案,但是太大了,无法发表评论。如果您想在机器人联机时立即设置其状态,则可以通过Discord.Client()
构造器本身来定义该机器人的状态。 Client()
constructer's options之一是presence
。
// at the beginning of your code:
const client = new Discord.Client({
presence: {
status: 'online',
activity: {
name: '.help',
type: 'PLAYING',
},
},
});
答案 2 :(得分:0)
您可以使用.setActivity()
函数
client.user.setActivity(".help" {type: "PLAYING"}) //the type can be "PLAYING", "WATCHING", "STREAMING", "LISTENING"
在您的
中使用它client.on('ready' () => {
client.user.setActivity(".help" {type: "PLAYING"})
})
答案 3 :(得分:0)
尝试在client.on('ready', () => {})
部分中设置状态:
client.on('ready', () => {
console.log(`Logged in as ${client.user.tag}!`);
client.user.setPresence({
status: 'online',
activity: {
name: ".help",
type: "PLAYING"
}
});
});
快速说明:
存在状态是您要设置的,它由多个变量组成。
status
可以是online
,idle
,dnd
或invisible
。 (不要打扰)
这里的另一个变量是activity
。它由两个变量组成:name
和type
。
机器人正在做name
。这是您选择的字符串。
type
是另一回事,可以帮助显示为。可以是"PLAYING"
,"STREAMING"
,"WATCHING"
,"LISTENING"
和"CUSTOM_STATUS"
。
希望我有帮助!! ???