Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | import { LavalinkManagerEvents, NodeManagerEvents } from "@/modules/bot/music/types/lavalink-client"; import { Config } from "@/modules/shared/config/types"; import { Logger } from "@nestjs/common"; import { ConfigService } from "@nestjs/config"; import { EventEmitter2 } from "@nestjs/event-emitter"; import { Client } from "discord.js"; import { LavalinkManager, ManagerQueueOptions } from "lavalink-client"; export class BaseManager extends LavalinkManager { public constructor( private readonly client: Client, private readonly config: ConfigService, private readonly eventEmitter: EventEmitter2, { clientOptions, queueOptions, debugOptions }: Options, ) { const logger = new Logger(clientOptions.username); super({ nodes: [ { regions: ["us-east", "us-central", "us-south", "us-west", "brazil"], id: "localhost", host: process.env.LavalinkHOST, port: 2333, authorization: process.env.LavalinkPassword, retryAmount: 22, retryDelay: 5000, }, ], client: { id: config.getOrThrow<Config["Discord"]>("Discord").Client.ID, username: clientOptions.username, }, autoSkip: true, playerOptions: { applyVolumeAsFilter: false, clientBasedPositionUpdateInterval: 100, defaultSearchPlatform: "ytmsearch", volumeDecrementer: config.getOrThrow<Config["Music"]>("Music").Volumes.Lavalink, useUnresolvedData: true, onDisconnect: { autoReconnect: false, destroyPlayer: false, }, }, queueOptions, sendToShard(id, payload) { const guild = client.guilds.cache.get(id); if (!guild) { return logger.error("sendToShard - guild not found: ", id); } if (!guild.shard) { return logger.error("sendToShard - guild has no shard not found: ", guild); } return guild.shard.send(payload); }, advancedOptions: { debugOptions, }, }); this.setMaxListeners(15); this.nodeManager.setMaxListeners(8); const LavalinkManagerEvents: Partial<LavalinkManagerEvents> = { trackStart: (player, track, payload) => this.eventEmitter.emit("track.start", player, track, payload), trackEnd: (player, track, payload) => this.eventEmitter.emit("track.end", player, track, payload), trackStuck: (player, track, payload) => this.eventEmitter.emit("track.stuck", player, track, payload), trackError: (player, track, payload) => this.eventEmitter.emit("track.error", player, track, payload), queueEnd: (player, track, payload) => this.eventEmitter.emit("queue.end", player, track, payload), playerCreate: (player) => this.eventEmitter.emit("player.create", player), playerMove: (player, oldVoiceChannelId, newVoiceChannelId) => this.eventEmitter.emit("player.move", player, oldVoiceChannelId, newVoiceChannelId), playerDisconnect: (player, voiceChannelId) => this.eventEmitter.emit("player.disconnect", player, voiceChannelId), // playerSocketClosed: (player, payload) => this.eventEmitter.emit("player.socketClosed", player, payload), playerDestroy: (player, destroyReason) => this.eventEmitter.emit("player.destroy", player, destroyReason), // playerUpdate: (oldPlayerJson, newPlayer) => this.eventEmitter.emit("player.update", oldPlayerJson, newPlayer), // SegmentsLoaded: (player, track, payload) => this.eventEmitter.emit("segments.loaded", player, track, payload), // SegmentSkipped: (player, track, payload) => this.eventEmitter.emit("segments.skipped", player, track, payload), // ChapterStarted: (player, track, payload) => this.eventEmitter.emit("chapter.started", player, track, payload), // ChaptersLoaded: (player, track, payload) => this.eventEmitter.emit("chapter.loaded", player, track, payload), }; const NodeManagerEvents: Partial<NodeManagerEvents> = { create: (node) => this.eventEmitter.emit("node.create", node, clientOptions.username), destroy: (node, destroyReason) => this.eventEmitter.emit("node.destroy", node, destroyReason, clientOptions.username), connect: (node) => this.eventEmitter.emit("node.connect", node, clientOptions.username), reconnecting: (node) => this.eventEmitter.emit("node.reconnecting", node, clientOptions.username), disconnect: (node, reason) => this.eventEmitter.emit("node.disconnect", node, reason, clientOptions.username), error: (node, error, payload) => this.eventEmitter.emit("node.error", node, error, payload, clientOptions.username), raw: (node, payload) => this.eventEmitter.emit("node.raw", node, payload, clientOptions.username), // resumed: (node, payload, players) => // this.eventEmitter.emit("node.resumed", node, payload, players, clientOptions.username), }; for (const event in LavalinkManagerEvents) { this.on(event as keyof LavalinkManagerEvents, LavalinkManagerEvents[event]); } for (const event in NodeManagerEvents) { this.nodeManager.on(event as keyof NodeManagerEvents, NodeManagerEvents[event]); } client.on("raw", (data) => { this.sendRawData(data); }); } public async load(): Promise<void> { try { await this.init({ ...this.client.user }); } catch (error) { console.log(error); } } } interface Options { clientOptions: { username: string; }; queueOptions: ManagerQueueOptions; debugOptions?: { noAudio: boolean; }; } |