我为此制作了不和谐的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);
}
答案 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
}