【问题标题】:player.stop not stopping discord music botplayer.stop 不停止不和谐音乐机器人
【发布时间】:2021-11-24 08:52:24
【问题描述】:

我制作了一个仅适用于 URL 的简单音乐机器人,我想做的是检查命令参数中是否有“停止”(已经完成并正在工作),然后停止音乐播放器。问题是当 player.stop() 播放音乐时它不会停止。 这是我的代码:

    const ytdl = require('ytdl-core');
module.exports ={
    name:'play',
    description:'aaaaaaaaaaaam',
    async execute(message, args, Discord){
        const { joinVoiceChannel, createAudioPlayer, createAudioResource} = require('@discordjs/voice');
            const stream = ytdl(args[0], {filter: 'audioonly', quality:'highestaudio', highWaterMark: 1<<25 });
            const player = createAudioPlayer();
            const resource = createAudioResource(stream);
            const {AudioPlayerStatus} = require('@discordjs/voice');
        if(ytdl.validateURL(args[0])){
            const connection = joinVoiceChannel({
                channelId: message.member.voice.channel.id,
                guildId: message.guild.id,
                adapterCreator: message.guild.voiceAdapterCreator
            })
        connection.subscribe(player);
        player.play(resource);

        } else if(args[0] === undefined){
            const embed = new Discord.MessageEmbed()
            .setColor('#0000FF')
            .setTitle('Da me chevvoi, te posso canta na canzone')
            message.channel.send({ embeds: [embed] });
        } 
        if (args[0] === 'stop'){
            player.on(AudioPlayerStatus.Playing, () => {
                player.stop();
            });
        }
        const {generateDependencyReport} = require('@discordjs/voice');
        console.log(args[0]);
        console.log(generateDependencyReport());
        
    }
}

【问题讨论】:

  • 我假设 args[0] 应该是用户提供的用于搜索 YouTube 的 URL。但是为什么“停止”也是一个值呢?那不应该也是它自己的命令吗?
  • 是的,我想这样,但我不知道怎么做。

标签: javascript discord discord.js


【解决方案1】:

您的 AudioPlayer 没有停止的原因是因为从未到达 player.stop() 行。在您的停止命令的if-block 中,您创建一个AudioPlayer 的侦听器。它的作用是监听 AudioPlayerStatus.Playing 到达,当它到达时,它将运行您提供的代码块,在这种情况下将停止播放器。

不过,监听器的工作方式是只有在进入该状态时才会触发。因此,当您的播放器从任何状态进入播放状态时,该代码将在侦听器创建后触发。如果您在播放器正在播放时调用停止命令,它将不会进入播放状态(因为它已经处于播放状态)并且不会触发其代码块并且不会停止播放。

我猜您是在尝试停止播放器之前检查播放器是否正在播放。你可以通过检查player.state.status来做到这一点。

【讨论】:

  • 能写出如何实现吗?我试图用你告诉我的代码替换我的代码,但有 100% 的可能性是我的错,因为它不起作用,因为我不知道如何在我的情况下使用它。
  • @Gio23 像这样:`if(player.state.status === 'playing') { player.stop() }
猜你喜欢
  • 2019-04-04
  • 2020-11-16
  • 2020-06-20
  • 2018-08-24
  • 2019-02-26
  • 2019-08-03
  • 2020-09-23
  • 2021-05-23
  • 2021-11-03
相关资源
最近更新 更多