为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

HUH函数 2022-12-18 16:02:32
我正在尝试为 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);            });        }    });});
查看完整描述

1 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

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


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


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;

    }

});


查看完整回答
反对 回复 2022-12-18
  • 1 回答
  • 0 关注
  • 93 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号