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() 将成员对象解析为提及,无需从头开始构建它们 (&lt;@id&gt;)
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 或提及获取用户的主要内容,如果未能解决你的问题,请参考以下文章

使用 Regex 通过 Discord.js 定义变量?

(discord.js) 如何提及对机器人消息做出反应的用户?

Discord.js 在欢迎时提及玩家

Discord.js 如何提及消息作者?

如何通过 ID 获取特定服务器? [discord.js]

discord.js 如何在不提及已记录用户的情况下记录用户名以供将来使用?