使用用户 ID Discord.js v13 获取 GuildMember 对象
Posted
技术标签:
【中文标题】使用用户 ID Discord.js v13 获取 GuildMember 对象【英文标题】:Getting GuildMember Object with user ID Discord.js v13 【发布时间】:2021-11-03 09:59:52 【问题描述】:总的来说,我对 discord.js 和 javascript 还很陌生。在这里,我创建了一个简单的 userinfo 命令,它获取用户的数据并将其整齐地嵌入,如下所示。您还可以看到该命令要求作者/mod 提及用户以获取结果嵌入,但我想通过成员的不和谐用户 ID 获得相同的结果。
我试过message.mentions.users.first() || message.guild.member.length(args[0])
,但这会产生很多问题。所以基本上我如何通过不和谐 ID 使用相同的命令/代码。
const moment = require('moment');
const Discord = require('discord.js');
const MessageEmbed = require('discord.js')
module.exports =
description: 'whois',
run: async (client, message, args) =>
const user = message.mentions.users.first()
const embed = new MessageEmbed()
.setTitle(`**PASSION ISLAND MODERATIONS**`)
.setColor('#ffc0cb')
.setThumbnail(user.displayAvatarURL( dynamic: true ))
.addField('Username', user.username)
.addField('User Id', user.id)
.addField('Account Type', `$user.bot ? 'Bot' : 'Human'`)
.addField(`Roles`, `$message.member.roles.cache.size`)
.addField(`Joined At`, `$moment.utc(message.member.joinedAt).format('ddd, MMM Do, YYYY, h:mm a')`)
.addField(`created At`, `$moment.utc(message.member.createdAt).format('ddd, MMM Do, YYYY, h:mm a')`)
.setTimestamp()
.setFooter(`Requested by $message.author.username`)
message.channel.send( embeds: [embed] )
,
【问题讨论】:
【参考方案1】:这是我正在使用的代码,可以通过用户 id、用户名或用户标签找到。
let user = message.mentions.users.first()||null;
if (!user && args.length > 0)
let input = args.join(' ')
let temp = message.guild.members.cache.get(input) || message.guild.members.cache.find(mem => mem.user.username === input) || mmessage.guild.members.cache.find(mem => mem.user.discriminator === input) || null
if (temp) user = temp.user;
【讨论】:
【参考方案2】:你可以试试
let user;
if(message.mentions.members.first())
user = message.mentions.members.first()
else
let x = await message.guild.members.cache.get(`$args[0]`)
user = x.user;
这适用于 ID,因为您可以在 .get()
函数中传递雪花。
【讨论】:
我试过了,似乎也不起作用,因此整个代码崩溃了!它会在 displayavatarurl 和几乎所有内容中引发错误 你能把错误发过来吗? 如果我使用它会抛出这个错误我之前尝试过 .setThumbnail(user.displayAvatarURL( dynamic: true )) TypeError: user.displayAvatarURL is not a function 那是因为 displayAvatarURL() 是用户而不是 GuildMember 的函数,在这种情况下你必须做message.guild.members.cache.get(`$args[0]`).user;
是的,我做了那行不通,它抛出了同样的错误【参考方案3】:
如果你想 100% 确定你会找到用户,如果他存在于服务器中可以这样做:
message.mentions.users.first() || message.guild.members.fetch(args[0])
【讨论】:
如果我使用它会抛出这个错误我之前尝试过 .setThumbnail(user.displayAvatarURL( dynamic: true )) TypeError: user.displayAvatarURL is not a function 我知道您的错误是什么,您可以在定义用户的位置下方添加if (!user) return message.channel.send("User not found!")
如何修复哈哈用户肯定在公会@Newbie...也许
@JacyHarrington 您仍然可以进行该检查,但是是的,问题有所不同,并且与找到合适的用户无关。 displayAvatarURL 是 User 上的函数,而不是 GuildMember。你可以做.setThumbnail(user.user.displayAvatarURL( dynamic: true ))
【参考方案4】:
你可以试试
message.mentions.members.first().then((m) =>
if (!m)
// code
)
// or do this
const member = await message.mentions.members.first();
if (!member)
// Code
或将members
更改为users
正如其他人所展示的,您可以通过在服务器中查找 id 来做到这一点
message.guild.members.cache.get(args[0]);
// This will return null if it doesnt exist so you can do this
const member = await message.guild.members.cache.get(args[0]);
if (!member)
// code
您可以将两者结合起来进行检查,并确保该成员是这样存在的
const member = await message.mentions.members.first() || message.guild.members.cache.get(args[0]);
if (!member)
// Code
希望这会有所帮助
注意:我看到您正在使用多个.addField()
,您可以使用.addFields()
来优化您的代码
像这样
const embed = new MessageEmbed()
.addFields(
name: 'name', value: 'the description', inline: true || false ,
name: 'name', value: 'the description', inline: true || false ,
)
【讨论】:
我知道用户存在我要问的是如何使用!whois 736651621584601148
这样的用户ID运行代码
@JacyHarrington 你可以使用message.mentions.members.first() || message.guild.members.cache.get(args[0])
这会起作用,我也在答案中添加了这个
.get()
没有返回你不能使用 Promise.prototype.then() 的承诺以上是关于使用用户 ID Discord.js v13 获取 GuildMember 对象的主要内容,如果未能解决你的问题,请参考以下文章
如何将消息发送到指定的频道 - Discord.js v13 TypeScript
如何将斜杠命令隐藏到特定用户或频道 Discord.js v13