<commit_before>package com.mrpowergamerbr.loritta.userdata

import com.mrpowergamerbr.loritta.utils.reminders.Reminder
import org.bson.codecs.pojo.annotations.BsonCreator
import org.bson.codecs.pojo.annotations.BsonIgnore
import org.bson.codecs.pojo.annotations.BsonProperty
import java.time.LocalDate
import java.util.*

/**
 * Perfil de um usuário que usa a Loritta
 */
class LorittaProfile @BsonCreator constructor(@BsonProperty("_id") _userId: String) {
    @BsonProperty("_id")
    val userId = _userId
    var xp: Long = 0 // XP do usuário
    var aboutMe: String = "A Loritta é minha amiga!" // TODO: null
    var isBanned = false;
    var banReason: String? = null;
    var reminders: MutableList<Reminder> = arrayListOf();
    var receivedReputations: MutableList<String> = ArrayList<String>(); // Nós salvamos os usuários que deram reputação em vez de só salvar um número
    var lastReputationGiven: Long = 0;
    var lastMessageSent: Long = 0; // Última vez que o usuário enviou uma mensagem
	var lastMessageSentHash: Int = 0; // HashCode da última mensagem enviada
    var usernameChanges: MutableList<UsernameChange> = arrayListOf()
    var spinnerScores = mutableListOf<SpinnerScore>()
    var dreams: Double = 0.0
    var hidePreviousUsernames: Boolean = false
    var hideSharedServers: Boolean = false
    var isAfk = false
    var afkReason: String? = null
    var usedEmotes = mutableMapOf<String, Int>()
    var receivedDailyAt = 0L
    var ip: String? = null

    @BsonIgnore
    fun getCurrentLevel(): LorittaProfile.XpWrapper {
        return LorittaProfile.XpWrapper((xp / 1000).toInt(), xp)
    }

    @BsonIgnore
    fun getExpToAdvanceFrom(lvl: Int): Int {
        return lvl * 1000
    }

    fun getReputation(): Int {
        return receivedReputations.size;
    }

    class XpWrapper @BsonCreator constructor(@BsonProperty("currentLevel") val currentLevel: Int, @BsonProperty("expLeft") val expLeft: Long)

    class UsernameChange @BsonCreator constructor(@BsonProperty("changedAt") val changedAt: Long = 0L, @BsonProperty("username") val username: String, @BsonProperty("discriminator") val discriminator: String)

    class SpinnerScore @BsonCreator constructor(@BsonProperty("emoji") val emoji: String, @BsonProperty("forTime") val forTime: Long)
}<commit_msg>:pencil: | Não precisamos guardar o número de reputações que o usuário já deu<commit_after>package com.mrpowergamerbr.loritta.userdata

import com.mrpowergamerbr.loritta.utils.reminders.Reminder
import org.bson.codecs.pojo.annotations.BsonCreator
import org.bson.codecs.pojo.annotations.BsonIgnore
import org.bson.codecs.pojo.annotations.BsonProperty
import java.time.LocalDate
import java.util.*

/**
 * Perfil de um usuário que usa a Loritta
 */
class LorittaProfile @BsonCreator constructor(@BsonProperty("_id") _userId: String) {
    @BsonProperty("_id")
    val userId = _userId
    var xp: Long = 0 // XP do usuário
    var aboutMe: String = "A Loritta é minha amiga!" // TODO: null
    var isBanned = false;
    var banReason: String? = null;
    var reminders: MutableList<Reminder> = arrayListOf();
    var receivedReputations: MutableList<String> = ArrayList<String>(); // Nós salvamos os usuários que deram reputação em vez de só salvar um número
    var lastReputationGiven: Long = 0;
    var lastMessageSent: Long = 0; // Última vez que o usuário enviou uma mensagem
	var lastMessageSentHash: Int = 0; // HashCode da última mensagem enviada
    var usernameChanges: MutableList<UsernameChange> = arrayListOf()
    var spinnerScores = mutableListOf<SpinnerScore>()
    var dreams: Double = 0.0
    var hidePreviousUsernames: Boolean = false
    var hideSharedServers: Boolean = false
    var isAfk = false
    var afkReason: String? = null
    var usedEmotes = mutableMapOf<String, Int>()
    var receivedDailyAt = 0L
    var ip: String? = null

    @BsonIgnore
    fun getCurrentLevel(): LorittaProfile.XpWrapper {
        return LorittaProfile.XpWrapper((xp / 1000).toInt(), xp)
    }

    @BsonIgnore
    fun getExpToAdvanceFrom(lvl: Int): Int {
        return lvl * 1000
    }

    @BsonIgnore
    fun getReputation(): Int {
        return receivedReputations.size;
    }

    class XpWrapper @BsonCreator constructor(@BsonProperty("currentLevel") val currentLevel: Int, @BsonProperty("expLeft") val expLeft: Long)

    class UsernameChange @BsonCreator constructor(@BsonProperty("changedAt") val changedAt: Long = 0L, @BsonProperty("username") val username: String, @BsonProperty("discriminator") val discriminator: String)

    class SpinnerScore @BsonCreator constructor(@BsonProperty("emoji") val emoji: String, @BsonProperty("forTime") val forTime: Long)
}
{'fraction_non_alphanumeric': 0.0962772785622593, 'fraction_numerical': 0.0068463842533162175, 'mean_word_length': 4.188679245283019, 'pattern_counts': {'":': 0, '<': 15, '<?xml version=': 0, '>': 15, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1088929', 'n_tokens_mistral': 1509, 'n_tokens_neox': 1461, 'n_words': 411}