Javascript BroadcastDispatcher仅调用一次完成事件(discord.js)

Javascript BroadcastDispatcher仅调用一次完成事件(discord.js),javascript,discord,discord.js,voice,Javascript,Discord,Discord.js,Voice,我正试着为“不和谐”制作一台LoFi收音机。每当bot联机时,它都会加入服务器上每个名为lofi的频道(这是非常糟糕的编码,如果一台服务器中有两个以上的lofi频道,它将无法工作,我知道,稍后会修复)。我遇到的问题是,广播调度器的finish事件只调用一次。我想让它在最后一首歌停止时播放一首新的随机歌曲,但它只在上线时播放一首,在那首歌之后播放一首,然后调度程序被设置为null,这让我很困惑 代码: var fs = require('fs'); var client = new Client(

我正试着为“不和谐”制作一台LoFi收音机。每当bot联机时,它都会加入服务器上每个名为lofi的频道(这是非常糟糕的编码,如果一台服务器中有两个以上的lofi频道,它将无法工作,我知道,稍后会修复)。我遇到的问题是,广播调度器的finish事件只调用一次。我想让它在最后一首歌停止时播放一首新的随机歌曲,但它只在上线时播放一首,在那首歌之后播放一首,然后调度程序被设置为
null
,这让我很困惑

代码:

var fs = require('fs');
var client = new Client();
var files = fs.readdirSync("./mp3/");

var broadcast;
var curSong;
var dispatcher;

client.on("ready", () => {
    console.log(`------------${client.user.tag}------------\n`);

    curSong = `./mp3/${files[Math.floor(Math.random() * files.length)]}`;
    broadcast = client.voice.createBroadcast();
    broadcast.play(curSong);
    broadcast.dispatcher.on("finish", () => {
        curSong = `./mp3/${files[Math.floor(Math.random() * files.length)]}`;
        broadcast.play(curSong);
        client.user.setPresence({ activity: { name: curSong.split("/")[2].replace(".mp3", ""), type: "STREAMING", url: "https://twitch.tv/TwitchChannel" }, status: "Online" });
    });

    client.user.setPresence({ activity: { name: curSong.split("/")[2].replace(".mp3", ""), type: "STREAMING", url: "https://twitch.tv/TwitchChannel" }, status: "Online" });

    client.channels.cache.array().forEach((chnl) => {
        if(chnl.name.toLowerCase() == "lofi") {
            chnl.join().then(connection => {
                connection.play(broadcast);
            });
        }
    });
});

我通过在客户端的ready事件中创建一个函数修复了这个问题

这是整个bot的代码(不包括登录和消息事件)


我通过在客户端的ready事件中创建一个函数修复了这个问题

这是整个bot的代码(不包括登录和消息事件)

var fs = require('fs');
var client = new Client();
var files = fs.readdirSync("./mp3/");

var broadcast;
var curSong;
var dispatcher;

client.on("ready", () => {
    console.log(`------------${client.user.tag}------------\n`);

    curSong = `./mp3/${files[Math.floor(Math.random() * files.length)]}`;
    broadcast = client.voice.createBroadcast();
    broadcast.play(curSong);
    dispatcherLol();

    client.user.setPresence({ activity: { name: curSong.split("/")[2].replace(".mp3", ""), type: "STREAMING", url: "https://twitch.tv/AtlasDevelopment" }, status: "Online" });

    client.channels.cache.array().forEach((chnl) => {
        if(chnl.name.toLowerCase() == "lofi") {
            chnl.join().then(connection => {
                connection.play(broadcast);
            });
        }
    });

    function dispatcherLol() {
        broadcast.dispatcher.on("finish", () => {
            curSong = `./mp3/${files[Math.floor(Math.random() * files.length)]}`;
            broadcast.play(curSong);
            client.user.setPresence({ activity: { name: curSong.split("/")[2].replace(".mp3", ""), type: "STREAMING", url: "https://twitch.tv/AtlasDevelopment" }, status: "Online" });
            dispatcherLol();
        });
        return;
    }
});