import { config } from "./config.js"; import { state } from "./store/store.js"; import { type IUser, type TRole } from "./store/types.js"; import type { ILevel } from "./types.js"; const fixUserData = (user: IUser) => { if (!user.experience) { user.experience = 0; } if (!user.money) { user.money = 0; } if (!user.aiCost) { user.aiCost = 0; } }; const getUserById = (userId: string): IUser => { const user = state.users.find((user) => user.id === userId); if (!user) { return { id: ":", role: "NONE", experience: 0, money: 0, aiCost: 0, lastMessageTimestamp: 0, lastExperienceGainTimestamp: 0, lastMoneyGainTimestamp: 0, }; } fixUserData(user); return user; }; const checkRoles = (roles: TRole[], userId: string) => { const user = getUserById(userId); return roles.includes(user.role); }; const getLevel = (experience: number): ILevel => { let tmpExperience = experience; let expToNextLevel = config.app.experience.startingRequirement; let level = 0; while (tmpExperience >= expToNextLevel) { level++; tmpExperience -= expToNextLevel; expToNextLevel = expToNextLevel *= config.app.experience.multiplier; } return { level: level, experience: Math.floor(experience), experienceInLevel: Math.floor(tmpExperience), expToNextLevel: Math.floor(expToNextLevel), }; }; const getUserName = (user: IUser): string => { const userPattern = /@[a-zA-Z0-9]*/; const match = user.id.match(userPattern)?.at(0); if (!match) { return ""; } return match.replaceAll("@", ""); }; const getUserFromMention = (mention: string | undefined): IUser | undefined => { if (!mention) { return undefined; } const regex = /\[\@\S*:aslan2142.space\]/; const match = mention .match(regex) ?.at(0) ?.replaceAll("[", "") .replaceAll("]", ""); const user = state.users.find((user) => user.id === match); if (!user) { return undefined; } fixUserData(user); return user; }; export { fixUserData, getUserById, checkRoles, getLevel, getUserName, getUserFromMention, };