UNPKG

invitron

Version:

A powerful Discord.js invite tracker with persistent storage, member analytics, vanity URL support, and comprehensive join monitoring system for Discord bots.

78 lines (63 loc) 2.36 kB
import { Client, GuildMember } from "discord.js"; import { EventEmitter } from "events"; import { InviteTracker, InviteJoinData } from "./InviteTracker"; export interface TrackerOptions { fetchGuilds?: boolean; fetchVanity?: boolean; fetchAuditLogs?: boolean; debug?: boolean; storage?: { enabled: boolean; path?: string; }; ignoreBots?: boolean; deductOnLeave?: boolean; } export class InvitesTracker extends EventEmitter { private tracker: InviteTracker; private constructor(tracker: InviteTracker) { super(); this.tracker = tracker; } static init(client: Client, options: TrackerOptions = {}) { const tracker = new InviteTracker(client, options); const wrapper = new InvitesTracker(tracker); // Event listener for when a member joins a guild client.on("guildMemberAdd", async (member: GuildMember) => { const data = await tracker.handleMemberJoin(member, options); if (data) wrapper.emit("guildMemberAdd", member, data); }); // Event listener for when a member leaves a guild client.on("guildMemberRemove", (member) => { tracker["handleMemberLeave"](member); // Deducts data and saves changes wrapper.emit("guildMemberRemove", member); // Allows external listeners to respond to the event }); // Event listener for when a new invite is created client.on("inviteCreate", (invite) => { wrapper.emit("inviteCreate", invite); }); // Event listener for when an invite is deleted client.on("inviteDelete", (invite) => { wrapper.emit("inviteDelete", invite); }); return wrapper; } // Retrieves all invites for a specific user in a guild getInvites(guildId: string, userId: string) { return this.tracker.getUserInvites(guildId, userId); } // Resets all invite data for a guild resetGuild(guildId: string) { this.tracker.resetGuild(guildId); } // Retrieves the top inviter in a guild getTopInviter(guildId: string) { return this.tracker.getTopInviter(guildId); } // Retrieves the leaderboard for a guild, limited by the specified number getLeaderboard(guildId: string, limit = 10) { return this.tracker.getLeaderboard(guildId, limit); } } export default InvitesTracker; export { InviteJoinData };