#discord #discord.js #audio-player
#Discord #discord.js #аудиоплеер
Вопрос:
Мой бот подключается к каналу с включенным микрофоном, он имеет право говорить на этом канале. Но в то же время он не транслирует видео с YouTube.
import { AudioPlayer, AudioPlayerStatus, createAudioPlayer, createAudioResource, entersState, getVoiceConnection, StreamType } from "@discordjs/voice"; import { Guild, User } from "discord.js"; import { EventEmitter } from "events"; import * as YTDL from "ytdl-core"; import { PlayerOpts } from "../../../types"; import Queue from "./Queue"; export default class Player extends EventEmitter { public hasMusicEnded: boolean; public hasPlayerEnded: Boolean; public queue: Queue; private _audioPlayer: AudioPlayer; private _opts: PlayerOpts; private _waitingTimeLeaveTimeout: NodeJS.Timeout; constructor(opts: PlayerOpts) { super() this._opts = opts; this.queue = new Queue({ replay: false }); this.hasMusicEnded = true; this.hasPlayerEnded = true; } public async playMusic(guild: Guild) { this.hasPlayerEnded = false; this.hasMusicEnded = false; try { const connection = getVoiceConnection(guild.id); this._audioPlayer = await this._getSongPlayer(this.queue.getCurrentElement().link); connection.subscribe(this._audioPlayer); console.log(' ') this.emit('start', this.queue.getCurrentElement()); this._audioPlayer.on(AudioPlayerStatus.Idle, () =gt; { this.hasMusicEnded = true; this.emit('finish'); this._handleSongFinish(guild); if (this._waitingTimeLeaveTimeout) clearTimeout(this._waitingTimeLeaveTimeout); this._waitingTimeLeaveTimeout = setTimeout(() =gt; (this._waitingTimeLeave(guild), this._opts.waitingTime)); }); } catch(err) { this.emit('error', err); } } private async _getSongPlayer(url: string) : Promiselt;AudioPlayergt; { const player = createAudioPlayer(); const stream = YTDL(url, { filter: 'audioonly', highWaterMark: 1 lt;lt; 25 }); const resource = createAudioResource(stream, { inputType: StreamType.Arbitrary }); player.play(resource); return entersState(player, AudioPlayerStatus.Playing, 5_000); } private _handleSongFinish(guild: Guild): void { this.queue.queueShift(); if (this.queue.getCurrentElement()) this.playMusic(guild); }
Данные о видео с YouTube верны, из метода «_getSongPlayer» возвращается созданный аудиоплеер. Я подозреваю, что ошибка находится в очевидном месте, но уже второй день я не могу ее найти.