Discord.js - 通过 ID 或提及获取用户
Posted
技术标签:
【中文标题】Discord.js - 通过 ID 或提及获取用户【英文标题】:Discord.js - Get a user by ID or mention 【发布时间】:2021-12-03 11:39:27 【问题描述】:if (!message.mentions.members.first() && !(args[0])) return message.channel.send(`<@$message.author.id>: $insultList[Math.floor(Math.random() * insultList.length)]`);
const user = message.mentions.members.first() || message.guild.members.cache.get(args[0]);
if (!user) return message.inlineReply(new Discord.MessageEmbed().setColor("D9B3FF").setTitle("Error").setDescription("User not found."));
message.channel.send(`$user: $insultList[Math.floor(Math.random() * insultList.length)]`);
一个 !insult 命令; insultList
是一个字符串数组。但是,使用(公会成员的)用户 ID 调用命令只是偶尔有效;它通常返回User not found
。其他一切都按预期工作。
【问题讨论】:
您是要同时对少数人使用此命令还是仅对 1 人使用此命令? @MegaMix_Craft 一次一个;提及或有效的用户 ID 应该用侮辱来 ping 用户,无效的 args 应该发送错误消息,并且在没有输入的情况下调用命令应该用侮辱来 ping 消息作者 您能否也添加您遇到的问题的错误消息? 添加 try...catch 从 ID 获取用户不会输出任何错误 【参考方案1】:如果args[0]
的id 对应于未缓存的成员,user
将返回false
。
-
如果未提及成员,请使用 GuildMemberManager#fetch() 获取成员
使用 (GuildMember|User)#toString() 将成员对象解析为提及,无需从头开始构建它们 (
<@id>
)
const insult = insultList[Math.floor(Math.random() * insultList.length)];
if (!message.mentions.members.first() && !(args[0])) return message.channel.send(`$message.author.toString(): $insult`);
try
const user = message.mentions.members.first() || (await message.guild.members.fetch(args[0]));
if (!user) return message.inlineReply(new Discord.MessageEmbed().setColor("D9B3FF").setTitle("Error").setDescription("User not found."));
message.channel.send(`$user.toString(): $insult`);
catch (err)
console.error(err);
确保您启用了 Guild Member's Intent 并让您的父函数在此示例中是异步的。否则使用回调解决.fetch()
的承诺。
【讨论】:
我想你的意思是!user
会返回true
【参考方案2】:
您是否尝试过用他们的 id 提及用户? 像这样:
【讨论】:
以上是关于Discord.js - 通过 ID 或提及获取用户的主要内容,如果未能解决你的问题,请参考以下文章