Discord.js 机器人在提及时做出响应

Posted

技术标签:

【中文标题】Discord.js 机器人在提及时做出响应【英文标题】:Discord.js bot responds when mentioned 【发布时间】:2020-12-28 16:50:13 【问题描述】:

我正在尝试让我的 discord.js 机器人在被 ping 时发送一条消息。我不确定如何做到这一点,所以我参考了这段代码:

client.on('message', message => 
    if (message.content === '<@745648345216712825>') 
        message.channel.send('Message Here');
    
);

但是,这不起作用。

另外,当有人提到特定用户时,我的机器人是否可能会做出响应,例如,如果用户在机器人响应的消息中的任何位置提到了我?如果是的话,你能告诉我怎么做吗?

【问题讨论】:

如果你用一个简单的字符串替换&lt;@745648345216712825&gt;,比如hello,然后你在Discord上打个招呼,这行得通吗?另外,您是否收到任何可以提供帮助的错误消息? “这不起作用”到底是什么意思? 【参考方案1】:

Message 有一个名为mentions 的属性,其中包含消息中提到的所有频道、成员、角色和用户。您可以使用MessageMentions 的方法.has(data, [options]) 来查看您的机器人是否被提及。


client.on("messageCreate", (message) => 
    if (message.author.bot) return false;

    if (message.content.includes("@here") || message.content.includes("@everyone") || message.type == "REPLY") return false;

    if (message.mentions.has(client.user.id)) 
        message.channel.send("Hello there!");
    
);

在 Discord.JS v13 中,message 事件已重命名为 messageCreate。使用message 仍然有效,但在您切换之前,您会收到弃用警告。

【讨论】:

谢谢您...这行得通。但是,如果我 ping @here 或 @everyone,它仍然会显示 Hello There!无论如何,我可以防止这种情况发生吗? 之所以这样做是因为@everyone@here 也提到了机器人。您可以检查消息内容是否包含@everyone@here,然后返回。 More info. 对不起。但是,我无法理解你在说什么。能给我一个示例代码吗? @Jakye 在我的情况下,当我回复它的任何消息时它也会回复 @IrtizaKhanLabib 感谢您告诉我。我已经更新了代码。你能再试一次吗?【参考方案2】:

discord.js 刚刚更新,您可以使用

client.on('message', message => 
    if (message.mentions.has(client.user)) 
        message.channel.send('your message');
    
);

【讨论】:

【参考方案3】:

检查整条消息中是否仅提及您的机器人的最佳方法之一是正则表达式。你可以使用这个正则表达式来检查是否只提到了客户端:

/^<@!?$<client>.user.id>( |)$/

您可以使用Stringmatch 方法查看消息。在我们的例子中,Stringmessage.content

if (message.content.match(/^<@!?$client.user.id>( |)$/)) 
  return message.channel.send("Thanks for mentioning me! my prefix is ...");
;

【讨论】:

以上是关于Discord.js 机器人在提及时做出响应的主要内容,如果未能解决你的问题,请参考以下文章

当有人对消息做出反应时,我如何让我的 discord.js 机器人添加角色?

Discord JS //尝试通过响应消息来添加角色和删除角色

当用户对消息做出反应时,机器人会在 discord.js 中发送另一条消息

如何让我的 Discord.JS 机器人对其自己的直接消息做出反应?

从反应 discord.js 中获取消息 ID

Discord.js v12 如何获取对特定消息做出反应的人的 id?