首页 > 解决方案 > 如何检查消息是否包含表情符号 discord.js

问题描述

我需要检查用户发送的消息是否包含表情符号,因为我的数据库无法存储此类数据。所以我想我会使用a message.content.match()ormessage.content.includes()但是当我使用它时,它仍然不够。我正在考虑制作黑名单之类的东西,但对于表情符号,然后我意识到我需要保存所有表情符号的黑名单,所以我放弃了。我的问题是,你知道更简单的方法吗?我正在寻找解决问题的方法,但什么也没找到。非常感谢您的帮助。

if(message.author.id!='botid' && message.author.id===userdbId && message.content.match(/<a?:.+?:\d+>/)){
    const name = args.join(" "); 
    const username = name.slice(0);
    conn.query(`UPDATE users SET ignick='`+username+`' WHERE userID='${message.author.id}'`);
    console.log(username);
    message.channel.send("success message"); 
    conn.end(err => {
        if(err){
        throw error;
        }
        console.log('Disconnected from database');
       })
}
else{
console.log('bot has been stopped from adding his message to database');

}```
At top of this code i made a connect function and two constructors to pull from database userId

标签: discord.js

解决方案


每当在消息中使用表情时,它都遵循以下格式:<:OmegaStonks:723370807308582943>,其中表情的名称是“OmegaStonks”,id 链接到图像的链接,如下所示:https://cdn .discordapp.com/emojis/723370807308582943.png 使用正则表达式检测这种模式非常容易。 <a?:.+?:\d+> 它采用从第一个 : 到第二个 : 的任何字符(我使用 ? 使通配符 . 尽快停止)。你也不能在表情名称中使用冒号,所以它不会突然停在那里。

资源

这是你可以做到的

client.on('message', msg => {
if(msg.content.match(/<a?:.+?:\d+>/)) return; //or whatever action(s) you want to do
})

推荐阅读