UNPKG

@tryforge/forge.linked

Version:

A package to extend forgescript to implement music capabilities via lavalink

100 lines 4.8 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ForgeLinked = void 0; const forgescript_1 = require("@tryforge/forgescript"); const lavalink_client_1 = require("lavalink-client"); const path_1 = __importDefault(require("path")); const tiny_typed_emitter_1 = require("tiny-typed-emitter"); const ForgeLinkedCommandManager_js_1 = require("./structures/ForgeLinkedCommandManager.js"); /* -------------------------------------------------------------------------- */ /* ForgeLink Class */ /* -------------------------------------------------------------------------- */ class ForgeLinked extends forgescript_1.ForgeExtension { options; name = 'ForgeLink'; description = 'ForgeScript integration with lavalink-client'; version = '2.1.0'; client; lavalink; commands; emitter = new tiny_typed_emitter_1.TypedEmitter(); constructor(options) { super(); this.options = options; } async init(client) { const start = Date.now(); this.client = client; this.lavalink = new lavalink_client_1.LavalinkManager({ nodes: this.options.nodes, sendToShard: (guildId, payload) => { const guild = this.client.guilds.cache.get(guildId); if (guild) guild.shard.send(payload); return Promise.resolve(); }, autoSkip: this.options.autoSkip ?? true, autoSkipOnResolveError: this.options.autoSkipOnResolveError ?? true, emitNewSongsOnly: this.options.emitNewSongsOnly ?? true, playerOptions: { applyVolumeAsFilter: this.options.playerOptions?.applyVolumeAsFilter ?? false, clientBasedPositionUpdateInterval: this.options.playerOptions?.clientBasedPositionUpdateInterval ?? 50, defaultSearchPlatform: this.options.playerOptions?.defaultSearchPlatform ?? 'ytsearch', volumeDecrementer: this.options.playerOptions?.volumeDecrementer ?? 0.75, useUnresolvedData: this.options.playerOptions?.useUnresolvedData ?? true, requesterTransformer: this.options.requesterTransformer, onDisconnect: { autoReconnect: this.options.playerOptions?.onDisconnect?.autoReconnect ?? true, destroyPlayer: this.options.playerOptions?.onDisconnect?.destroyPlayer ?? false, }, onEmptyQueue: { destroyAfterMs: this.options.playerOptions?.onEmptyQueue?.destroyAfterMs ?? 30000, autoPlayFunction: this.options.autoPlayFunction, }, }, queueOptions: { maxPreviousTracks: this.options.queueOptions?.maxPreviousTracks ?? 10, }, linksAllowed: this.options.linksAllowed ?? true, linksBlacklist: this.options.linksBlacklist ?? [], linksWhitelist: this.options.linksWhitelist ?? [], }); this.commands = new ForgeLinkedCommandManager_js_1.ForgeLinkedCommandManager(this.client); forgescript_1.EventManager.load('ForgeLinked', __dirname + `/events`); if (this.options.events?.length) { this.client.events.load('ForgeLinked', this.options.events); } client.on('raw', (packet) => { this.lavalink.sendRawData(packet).catch((err) => { console.error('Failed to send raw data to Lavalink:', err); }); }); this.load(path_1.default.join(__dirname, './natives')); client.on('ready', async () => { await new Promise((res) => setTimeout(res, 3000)); this.lavalink.init({ id: client.user.id, username: client.user.username, }); }); if (this.options.events?.length) { for (const linkedEvent of this.options.events) { const lavalinkEvent = linkedEvent.startsWith('linked') ? linkedEvent.charAt(6).toLowerCase() + linkedEvent.slice(7) : linkedEvent; this.lavalink.on(lavalinkEvent, (...args) => { this.emitter.emit(linkedEvent, ...args); }); } } this.lavalink.nodeManager.on('error', (error) => { forgescript_1.Logger.error('Lavalink Error:', error); }); console.debug(`ForgeLink: Initialized in ${Date.now() - start}ms`); } } exports.ForgeLinked = ForgeLinked; //# sourceMappingURL=index.js.map