用户信息命令

时间:2020-10-29 06:07:51

标签: javascript discord discord.js

在大多数情况下,我尝试执行userinfo命令时,我将大部分字段都关闭了,但是我似乎无法获取状态字段,它说在线时处于脱机状态,而无论我尝试什么,权限都不会发送它会在终端上向我发送一条错误消息,提示未定义,而对于昵称字段,它会在嵌入中给我未定义

correct = 42500
print("Enter correct amount and win")
for i in range(6):
    guess = int(input("Enter your guess :"))
    if i > 4:
        print("Too many guesses!")
        break
    if guess == correct:
        print("You won")
        break
    elif guess < correct:
        print("Too low")
    else:
        print("Too high!")

1 个答案:

答案 0 :(得分:0)

此代码有些错误。首先,Message.author返回一个User,它没有一个nickname。由于可以在每台服务器上修改昵称,因此您正在寻找GuildMember

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

进行处理。
// method 1:
.addField('Nickname', message.author.displayName, true)

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

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

message.guild.member(message.author);

实际上有一种更简单的使用方法:Message.member。它与Message.author相同,但是返回GuildMember。另外,我不确定您为什么使用_roles吸气剂,而不是效率更高的roles

message.author.permissions也有同样的问题,因为权限是按行会修改的,并且没有一个全局值。即使这样,它仍将返回[object Object]。即使没有,它也可能会返回一个位域表示形式,这对于一般的不和谐用户来说是无法理解的。

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

[
 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()通过换行符或逗号和空格等将这些元素连接起来。

此外,除非您想将变量与其他字符/模板文字添加到字符串中,否则您不应该使用模板文字,或者需要将变量的数据类型强制为字符串。例如,message.author.presence.status 一个字符串,因此:

- `${ message.author.presence.status}`
+ message.author.presence.status

Presence.status返回“离线”,因为you don't have the GUILD_PRESENCES intent enabled