Discord.js中,与message.author.username对应的机器人用户名获取属性是什么?
Discord.js: 获取机器人自身用户名的正确属性
问题描述
我正在基于Discord.js框架升级我的Discord机器人的Ban命令,当前核心代码如下:
const target = message.mentions.users.first(); if (target) { const memberTarget = message.guild.members.cache.get(target.id); memberTarget.ban(); message.channel.send( `<@${memberTarget.user.id}> got 360 no-scoped by ${message.bot.username}` ); } else { message.channel.send(process.env.MSGERR); }
现在遇到的问题是message.bot.username无法正常工作。因为我管理多个机器人,希望把机器人用户名作为变量使用。试了message.author.username是正常的,所以想请教:和message.author.username对应的、用来获取机器人自身用户名的属性是什么?
解决方案
嘿,这个问题我之前也踩过坑!在Discord.js里,message.bot其实是机器人的客户端(Client)实例,但客户端本身没有username属性——你需要访问客户端的user对象,这个对象才包含机器人的账号信息,包括用户名。
所以正确的写法应该是message.client.user.username,或者如果你在代码里已经有了全局的client实例(比如初始化机器人时的const client = new Discord.Client()),直接用client.user.username也完全可以。
修改后的代码片段如下:
const target = message.mentions.users.first(); if (target) { const memberTarget = message.guild.members.cache.get(target.id); memberTarget.ban(); message.channel.send( `<@${memberTarget.user.id}> got 360 no-scoped by ${message.client.user.username}` ); } else { message.channel.send(process.env.MSGERR); }
简单理清楚逻辑:
message.author是触发命令的用户的User对象,所以它自带username这类用户属性message.client是你的机器人的客户端实例,message.client.user才是机器人自己的User对象,和message.author是同类型的对象,所以同样拥有username、avatarURL()等用户专属属性
这样修改后,就能正确显示机器人的用户名啦!
内容的提问来源于stack exchange,提问作者Puffin Kwadraat
相关产品推荐
相关产品推荐

