具有许多成员的Discord服务器将标签的格式设置为<!@>类型,如何使discord.js机器人处理这些问题?

时间:2019-10-26 19:47:25

标签: discord.js

我有一条命令可以重复一条消息,并将消息的前两个部分替换为空,这是实际消息中的'c!fquote @user'。这适用于成员很少的任何服务器,但是在某个阈值(不确定何时)下,ordord使用将标签更改为格式。粘贴到聊天中后,它会标记该人,但我的机器人会读取实际的标记。

 let user = message.mentions.users.first()
 let saymsgchecked = saymsg.replace("c!fquote " + user," ")
     if(saymsgchecked.endsWith(" ")){
       message.channel.send(helpquoteEmbed)
     }
     else{
       const quoteEmbed = new Discord.RichEmbed()
       .setColor('#00abff')
       .setAuthor(user.username + " said:", user.avatarURL, '')
       .setTitle(saymsg.replace("c!fquote " + user,""))
       .setTimestamp()
       message.channel.send(quoteEmbed)
       message.delete(1)
     }

所以这里的主要部分; “(saymsg.replace(” c!fquote“ +用户,”“))”“将替换消息中的这两个。在小型服务器中,用户读为@username。效果不错!但是在较大的服务器中,它读为“ <!@ 659818749185728>”(例如,随机数字,不带空格),但是消息包含@username,而不是该数字字符串,因此它不会替换它。如何处理这种格式?我已经将漫游器放入了200个成员的2台服务器中,并将5个用户以下的3个随机新服务器投入了该机器人中,它在大型服务器中的功能相同,但是在小型服务器中的运行效果很好。

所以基本上我要寻找的是: 在大型服务器中,如何使其停止以数字字符串形式读取用户标签? 要么; 如何将“ +用户”更改为既包含实际标签文本(例如@username)又包含字符串(例如<!@ 4598572198454523>)的内容

3 个答案:

答案 0 :(得分:1)

该消息包含<@ID><@!ID,您必须对其进行过滤。 消息的显示可能会有所不同。 此外,您可以查看https://discord.js.org并搜索mention,以很容易地提及消息。

答案 1 :(得分:1)

更新:

我对ID进行了双重过滤:

setTitle(saymsg.replace("c!fquote <@!" + userlarge.id + "> ",""))

它可以工作,但是是无效的解决方案,因为一旦检查服务器是否有N个成员,我就会创建一个副本。我将其设置为如果服务器超过100,则使用此格式而不是标签格式,因为100是一个很好的整数。但是我不知道格式何时更改为<@!>,它可能是250甚至23。我不知道,所以我还在寻找替代方法。

答案 2 :(得分:0)

我认为最好的方法是在拥有用户后使用他们的ID。

// don't use this if you need the user object later, and not just the id.
const { id } = message.mentions.members.first();
// to mention that person as the bot
message.channel.send(`Hey there, <@${id}>`);

这应该没有问题,但是如果您可以在下面发表评论,请告诉我,如果问题发生了改变,会发生什么情况。