Как заставить discord js ( V12) определять, сколько символов в сообщении

#javascript #discord.js

#javascript #discord.js

Вопрос:

Я создавал для него discord bot и систему уровней, это удалось, но на данный момент он добавляет XP для сообщения, я хочу, чтобы он добавлял XP на количество символов в сообщении.

Я также установил в нем прогрессивную систему XP, иначе говоря, у вас больше уровня, больше ОПЫТА, который вам нужно получить, чтобы получить следующий уровень.

И еще один вопрос, можно ли заставить бота каким-то образом обнаруживать спам? Например, если кто-то просто скажет «ААААААА», то человек не получит 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 } = resu<
             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:

Если 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
}