【问题标题】:Discord.js - Get a user by ID or mentionDiscord.js - 通过 ID 或提及获取用户
【发布时间】: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 获取用户不会输出任何错误

标签: javascript discord.js


【解决方案1】:

如果args[0] 的id 对应于未缓存的成员,user 将返回false

  1. 如果未提及成员,请使用 GuildMemberManager#fetch() 获取成员
  2. 使用 (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 提及用户? 像这样:

【讨论】:

    猜你喜欢
    • 2021-05-01
    • 1970-01-01
    • 2016-12-20
    • 2017-12-17
    • 2018-09-01
    • 2021-07-30
    • 2023-04-04
    • 1970-01-01
    • 2021-12-08
    相关资源
    最近更新 更多