#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
}