如何使Discord JS(V12)检测消息中有多少个字符

时间:2020-10-29 19:08:08

标签: javascript discord.js

我为此制作了不和谐的bot和关卡系统,它成功了,但是现在它为消息添加XP时,我想使其在消息中按字符数添加XP。

我也使它具有渐进XP系统,也就是您拥有更大的等级,要获得更高的等级,您还需要获得更多的XP。

还有一个问题,是否有可能使漫游器以某种方式检测垃圾邮件?例如,如果某人只是说“ AAAAAAA”,那么该人就不会为此获得XP。


 const addXp = async(profilepic, username, userObject, guildId, userId, xpToAdd, message) => {
     await mongo().then(async mongoose => {
         try {
        const result = await xpShema.findOneAndUpdate({
                 guildId,
                 userId,
                 username,
                 profilepic                       
             }, {
                 guildId,
                 userId,
                 username,
                 profilepic,
                 $inc: {
                     xp: xpToAdd,
                     level: 0
                 }
             }, {
                 upsert: true,
                 new: true
             }).catch(err => console.log(err));
                         
             var { xp, level } = result;
             const needed = getNeededXP(level)

             if(xp >= needed) {
                ++level;
                xp -= needed; 
 
                message.reply(`You are now **level ${level}** with **${xp} xp**! You now need **${getNeededXP (level)} XP** to level up again!`)
 
                await xpShema.updateOne({
                    guildId,
                    userId,
                    username,
                    profilepic
                }, {
                    level,
                    xp
                }).catch(err => console.log(err));
             }
 
             if(message.content.toLowerCase() === '!level') {
               const embedgoesbrr = new discord.MessageEmbed()
               embedgoesbrr.setColor("#fcfdff")
               embedgoesbrr.setTitle('Level!')
               embedgoesbrr.setFooter('If you need support move to #server-support and write "!ticket"')
               embedgoesbrr.setTimestamp()
               embedgoesbrr.setThumbnail("https://cdn.discordapp.com/attachments/570312043949981710/745387739285029010/CrysisOfClans_2.png")
               embedgoesbrr.setDescription(`Your level is ${level} and you have ${xp} xp, you need ${getNeededXP (level)} to reach level ${level + 1}`);
               message.channel.sendEmbed(embedgoesbrr)
             }
 
             console.log("Logged into Mongo");
         } catch(err) {
             console.log(err)
         }               
     })      
 }

// This part makes bot add XP ( in my case 5XP per message )

 let user = message.author;

     if(!message.author.bot) {
        addXp(message.author.avatarURL({format: "png", dynamic: "false"}), message.author.tag, user, message.guild.id, user.id, 5, message);
}

1 个答案:

答案 0 :(得分:0)

如果discord返回message作为字符串原语,则可以使用String.length属性来获取字符串中的字符数,然后应用一个系数来添加相对于该数字的XP。

let expGain = message.content.length * expModifier

或添加逻辑(可能需要非常健壮,并且需要进行其他整个对话才能避免垃圾邮件拉平)。硬编码示例为:

expGain !== "AAAAAAAAA" ? message.length * expModifier : "Nice Try!"

具有测试垃圾邮件的功能:

function spamCheck(msg){
  ...
  // some logic that returns true if spam, false if normal
  ...
}

if (spamCheck(message)) {
  sendMessage("Nice Try!")
}
else {
  let expGain = message * expModifier
}