UNPKG

@elara-services/leveling

Version:

A package for XP/Leveling on Discord.

142 lines (128 loc) 5.33 kB
# Welcome to the leveling package ---- # Links: ## [![Docs](https://cdn.discordapp.com/emojis/792291458081095691.png?size=24) Docs](https://elara-services-leveling.pages.dev) ## [![Discord](https://cdn.discordapp.com/emojis/847624594717671476.png?size=24) Support](https://discord.gg/qafHJ63 "Support Server") ## [![Patreon](https://cdn.discordapp.com/emojis/920524344042606695.png?size=24) Patreon](https://patreon.com/elaraservices "Patreon") ## [![PayPal](https://cdn.discordapp.com/emojis/1106809124299214858.png?size=24) PayPal](https://paypal.me/superchiefyt "PayPal") ---- ## REQUIRED: - `client`: A v13/v14 discord.js client. (this will not work with any version below v13) - `mongodb_uri`: A mongodb connection uri. (this is for the package to save the data for servers/users/weekly) ## Features: - [x] XP Earning - Messages (with custom cooldown) - Voice - Toggle for if users should be unmuted to earn XP in voice channel(s) - [x] Custom Levels - Custom messages per-level - Custom roles to add/remove when a use gets to that level - Toggle to only announced when someone reaches a registered level - Toggle if the level roles should stack (default: they don't) - [x] Weekly Leaderboard - Automatic announcements - Weekly stats for the server's `messages`, `voice` and `xp` - Weekly stats for the user's `messages`, `level`, `voice` and `xp` earned that week - Custom ping role(s) for when the leaderboard gets announced - [x] Default rank image profiles - Currently supported types: `arcane` and `cavancord` - [x] Default leaderboard images - Currently supported types: `canvacord` - [x] Custom XP earned - Min/Max XP earned for when sending messages. - [x] Custom cooldown for earning XP - [x] Custom XP Multipliers - Can be limited to the entire server or only certain channels/roles. - [x] Ignore roles/channels/users - [x] Level up announcements - Supports: DM and Channel notifications - Custom content/embeds for both DM and Channel notifications. - Toggle for pinging the user in the level up message (can be disabled per-user as well) - [x] Reset a user's data when they leave the server. - Requires the bot to have "GuildMembers" intent - [x] User Customization - `stats`: For any stats for the user (by default: `messages`, `voice`) but this could be added with any stats for the user (just use `api.users.stats.inc`) - `background`: Sets the background for the user's rank profiles. - `colors`: Sets the custom color for certain rank profiles. - `toggles.locked`: Freezes the user's data from earning XP - `toggles.dms`: Makes the bot not DM them level announcements - `toggles.pings`: Makes the bot not mention them in level announcements ## Getting Started ```js const { Leveling } = require("@elara-services/leveling"); const lvls = new Leveling(client, "MONGODB_URI"); await lvls.start(); // This will tell the package to start listening for events. ``` ## Note: All data can be configured with `lvls.api.xxx` ------- ### Example API Functions: - [See the rest on the api docs](https://elara-services-leveling.pages.dev/classes/API) #### Servers: ```js const server = lvls.api.servers; // Get the server data. const serverData = await server.get("server_id"); if (serverData.status) { console.log(serverData.data); // Returns the settings for the server. } // Toggle leveling on/off for a server. (by default: Leveling is off for the server) const data = await server.toggle("server_id", "leveling"); console.log(data.message); ``` ---- #### Users: ```js const users = lvls.api.users; // Get a user's data const userData = await users.get("user_id", "server_id"); if (userData.status) { console.log(userData.data); // Returns the user's data for that server. } ``` ----- #### Rank Profile(s): ```js const data = await lvls.getRankCard("user_id", "server_id"); // OR const data = await lvls.getRankCard("user_id", "server_id", "rank_card_type"); // By default the "rank_card_type" is "arcane" if (data.status) { // Get the rank profile image then send it to the channel return channel.send({ files: [ { name: "profile.png", attachment: data.image, } ] }); } ``` ---- #### Get Leaderboard Image ```js const data = await lvls.getLeaderboard("server_id"); // OR const data = await lvls.getLeaderboard( "server_id", { page: 1, // The page for the leaderboard image perPage: 5, // Up to 10 users returned in the leaderbaord image sort: "top", // Sort by "top" or "bottom" sortBy: "xp", // Sortby "xp" or "level" }, "canvacord", false, // If you want the weekly leaderboard, set this to: true ) if (data.status) { // Get the leaderboard image then send it to the channel. return channel.send({ files: [ { name: "lb.png", attachment: data.image, } ] }); } ``` ----