首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用户信息命令

用户信息命令
EN

Stack Overflow用户
提问于 2020-10-29 06:07:51
回答 1查看 174关注 0票数 1

在大多数情况下,我尝试执行userinfo命令,但我似乎无法从下面的状态字段中获取状态字段,它说:“当我联机时脱机,并且不管我尝试什么权限,它都发送给我一个终端错误,上面写着未定义,对于昵称字段,它在嵌入中给了我未定义的字段。

代码语言:javascript
复制
const Discord = require('discord.js');
module.exports = {
name: 'user',
description: 'Get your or someone else\'s user info',
aliases: ['u',],
cooldown: 2,
execute(message) {
    if (!message.mentions.users.size) {
        const embed = new Discord.MessageEmbed()
            .setTitle(message.author.username)
            .addField('Created',message.author.createdAt)
            .addField('ID',message.author.id)
            .addField('Nickname',message.author.nickname, true)
            .addField("Status",`${ message.author.presence.status}`, true)
            .addField('Joined current server on', message.member.joinedAt)
            .addField('Currently in', message.guild.name)
            .addField('Roles', `<@&${message.guild.member(message.author)._roles.join('> <@&')}>`, true)
            .addField('Permissions',`${message.author.permissions}` )
            .addField('Status',message.author.presence.status)
            .setColor(0x00ffff)
            .setThumbnail(message.author.displayAvatarURL({ format: 'png' }))
            .setFooter(`Requested By:${message.author.username}`)
            .setTimestamp();
        return message.channel.send(embed);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-29 12:07:11

这段代码有几处问题。首先,Message.author返回一个没有nicknameUser。因为每个服务器都可以修改昵称,所以您需要一个GuildMember

此外,如果GuildMember.nickname实际上没有昵称,GuildMember将返回未定义的昵称。有几种方法你可以修复它。您可以使用GuildMember.displayName,这将尝试显示昵称,但如果找不到用户名,则显示用户名,或者您可以使用逻辑或运算符||来处理它。

代码语言:javascript
复制
// method 1:
.addField('Nickname', message.author.displayName, true)

// method 2:
.addField('Nickname', message.author.nickname || 'This user has no nickname', true)

谈到GuildMembersUsers,您正在使用一种非常复杂的方法来获取作者的GuildMember实例:

代码语言:javascript
复制
message.guild.member(message.author);

实际上,有一种更容易使用的方法:Message.member。它与Message.author相同,但返回一个GuildMember。另外,我不知道为什么要使用_roles getter而不是效率更高的roles

message.author.permissions也有同样的问题,因为每个行会都会修改权限,并且没有一个全局值。即使如此,它仍将返回[object Object]。即使没有,它也可能返回一般不和谐用户无法保存的位域表示。

相反,您应该使用Permissions.toArray()方法,它将根据可用位(所有成员的权限)返回一个位字段名数组。它看起来可能有点像这样:

代码语言:javascript
复制
[
 CREATE_INSTANT_INVITE,
 ADD_REACTIONS,
 STREAM,
 VIEW_CHANNEL,
 SEND_MESSAGES,
 EMBED_LINKS,
 ATTACH_FILES,
 READ_MESSAGE_HISTORY,
 USE_EXTERNAL_EMOJIS,
 CONNECT,
 SPEAK,
 USE_VAD,
 CHANGE_NICKNAME,
];

您可以使用Array.prototype.join()通过换行、逗号和空格等方式连接这些元素。

另外,您不应该使用模板文本,除非您想要向一个带有其他字符/模板文本的字符串中添加一个变量,或者您需要强制该变量的数据类型为string。例如,message.author.presence.status已经是一个字符串,因此:

代码语言:javascript
复制
- `${ message.author.presence.status}`
+ message.author.presence.status

Presence.status返回“脱机”是因为you don't have the GUILD_PRESENCES intent enabled

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64585850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档