我有一条命令可以重复一条消息,并将消息的前两个部分替换为空,这是实际消息中的'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>)的内容
答案 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}>`);
这应该没有问题,但是如果您可以在下面发表评论,请告诉我,如果问题发生了改变,会发生什么情况。