我正在尝试制作 discord.js 头像命令,但提及部分无法正常工作
Posted
技术标签:
【中文标题】我正在尝试制作 discord.js 头像命令,但提及部分无法正常工作【英文标题】:I am trying to make a discord.js avatar command, and the mentioning portion doesn't work correctly 【发布时间】:2019-08-31 12:02:12 【问题描述】:我的 discord 机器人中有一个头像命令。当用户使用h.avatar
时,它会输出他们的头像,效果很好。每当他们尝试使用h.avatar @user
时,什么都没有发生。
这是我的代码:
if (message.content.startsWith(config.prefix + "avatar"))
if (!message.mentions.users.size)
const avatarAuthor = new Discord.RichEmbed()
.setColor(0x333333)
.setAuthor(message.author.username)
.setImage(message.author.avatarURL)
message.channel.send(avatarAuthor);
let mention = message.mentions.members.first();
const avatarMention = new Discord.RichEmbed()
.setColor(0x333333)
.setAuthor(mention.user.username)
.setImage(mention.user.avatarURL)
message.channel.send(avatarMention);
【问题讨论】:
此问题似乎仍未解决,能否将答案标记为已接受,或者如果您找到了解决方案,请自行回答? @cyliim 【参考方案1】:你有一个检查if (!message.mentions.users.size)
,它只会在你没有提到某人的情况下运行命令。您要么需要在代码中使用else
,要么这样做:
if (message.content.startsWith(config.prefix + 'avatar'))
const user = message.mentions.users.first() || message.author;
const avatarEmbed = new Discord.RichEmbed()
.setColor(0x333333)
.setAuthor(user.username)
.setImage(user.avatarURL);
message.channel.send(avatarEmbed);
const user = message.mentions.users.first() || message.author;
尝试获取提到的用户,但如果找不到任何人,它将使用作者使用的。
也可以这样使用:
if (!message.mentions.users.size)
message.channel.send('Nobody was mentioned');
return;
// continue command here, after guard clause
【讨论】:
【参考方案2】:没有像 avatarUrl
这样的东西,除非你已经定义了它。
使用此代码获取用户的 url:
message.channel.send("https://cdn.discordapp.com/avatars/"+message.author.id+"/"+message.author.avatar+".jpeg");
只需将message.author
替换为提到的用户
【讨论】:
有。它曾经是一个名为avatarUrl
的属性,但现在它是一个名为 displayAvatarURL()
discord.js.org/#/docs/main/stable/class/… 的方法这个问题来自 2019 年,当时 avatarUrl
是正确的。从那以后情况发生了变化。您不需要自己构建 URL。【参考方案3】:
if(message.content.startsWith(prefix+'av'))
if(message.mentions.users.size)
let member=message.mentions.users.first()
if(member)
const emb=new Discord.MessageEmbed().setImage(member.displayAvatarURL()).setTitle(member.username)
message.channel.send(emb)
else
message.channel.send("Sorry none found with that name")
else
const emb=new Discord.MessageEmbed().setImage(message.author.displayAvatarURL()).setTitle(message.author.username)
message.channel.send(emb)
【讨论】:
【参考方案4】:这些是有效答案的更新版本
if (message.content.startsWith(config.prefix + 'avatar'))
const user = msg.mentions.users.first() || msg.author;
const avatarEmbed = new MessageEmbed()
.setColor(0x333333)
.setAuthor(`$user.username's Avatar`)
.setImage(
`https://cdn.discordapp.com/avatars/$user.id/$user.avatar.png?size=256`
);
msg.lineReply(avatarEmbed);
这使用了 discord 的头像 url,和 msg.lineReply(avatarEmbed);是一个将嵌入作为消息回复发送的函数
【讨论】:
【参考方案5】:我的
if (msg.content.startsWith(prefix + 'avatar'))
const user = msg.mentions.users.first() || msg.author;
const avatarEmbed = new MessageEmbed()
.setColor('')
.setAuthor(`$user.username's Avatar`)
.setImage(
`https://cdn.discordapp.com/avatars/$user.id/$user.avatar.png?size=256`
);
msg.reply(avatarEmbed);
)
【讨论】:
正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。 如果您有新问题,请点击 按钮提出问题。如果有助于提供上下文,请包含指向此问题的链接。 - From Review【参考方案6】: if (message.content.startsWith(prefix + 'avatar'))
let user = message.mentions.users.first();
if(!user) user = message.author;
let color = message.member.displayHexColor;
if (color == '#000000') color = message.member.hoistRole.hexColor;
const embed = new Discord.RichEmbed()
.setImage(user.avatarURL)
.setColor(color)
message.channel.send(embed);
【讨论】:
欢迎来到 Stack Overflow!虽然这段代码可以解决问题,including an explanation 解决问题的方式和原因确实有助于提高帖子的质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请edit您的回答添加解释并说明适用的限制和假设。以上是关于我正在尝试制作 discord.js 头像命令,但提及部分无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章