如何从消息中获取提及的用户 ID | Discord.js

时间:2021-06-05 01:20:11

标签: node.js discord.js

所以我试图为我的 discord.js bot 实现一个警告功能,我想从提到的用户那里获取用户 ID。我试过 message.user.idmessage.mentions.users.first().idmessage.mentions[0].id 都无济于事。

他们都返回 TypeError: Cannot read property 'id' of undefined

我该如何正确执行此操作?

(编辑) 我忘了说我想向提到的用户发送 DM。

2 个答案:

答案 0 :(得分:1)

message.mentions.users 返回一个集合,如果没有提及或提及的用户没有被缓存,则集合可能为空,您可以尝试的另一种方法是在消息内容上使用正则表达式

const id = message.content.match(/<?@?!?(\d{17,19})>?/)[1]

正则表达式匹配 <@id> 或普通 id 并给出 id 作为匹配

答案 1 :(得分:0)

那是因为消息中没有提及,您基本上可以在此处使用 if 语句(或三元运算符)来解决此问题

const user = message.mentions.users.first();
if (!user) return console.log('no user found');
const userID = user.id;

您也可以使用正则表达式,以便您可以同时使用用户 ID 和提及

const user = await message.client.users.fetch(/\D/g, '').catch(() => {});
if (!user) return console.log('no user found oof');
const userID = user.id;

正则表达式 /\D/g 删除所有非数字字符,因为在 discord <@ID> 中提及是这样组成的,正则表达式将删除 <@> 并将 ID 与所有可用用户进行匹配并返回承诺,因此使用 await。 (如果没有找到用户,则返回 false)