【问题标题】:BroadcastDispatcher finish event only called once (discord.js)BroadcastDispatcher 完成事件仅调用一次 (discord.js)
【发布时间】:2020-11-22 02:29:58
【问题描述】:

我正在尝试为 Discord 制作 LoFi 收音机。每当机器人上线时,它都会加入服务器上每个名为 lofi 的频道(这是非常糟糕的编码,如果我知道的一台服务器中有两个以上的 lofi 频道将无法工作,稍后会修复。)我遇到的问题是广播调度程序的完成事件只被调用一次。我希望它在每次最后一首停止时播放一首新的随机歌曲,但它只在上线时播放一首,在那首歌曲之后播放一首,然后调度程序设置为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);
            });
        }
    });
});

【问题讨论】:

    标签: javascript discord discord.js voice


    【解决方案1】:

    我通过在客户端的就绪事件中创建一个函数来解决此问题。

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

    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;
        }
    });
    

    【讨论】:

      猜你喜欢
      • 2011-01-18
      • 2011-03-08
      • 2021-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多