Discord Bot 更新:如何播放音频?

Posted

技术标签:

【中文标题】Discord Bot 更新:如何播放音频?【英文标题】:Discord Bot Update: How to play audio? 【发布时间】:2021-10-29 09:52:07 【问题描述】:

所以最近新版本的不和谐机器人 API 与交互和所有这些一起出现在 Node 上。而且,他们还改变了一些其他的东西,不知道为什么。但他们做到了。

当我遇到无法正常工作的问题时,我正试图尝试音频播放代码以了解其工作原理,并可能更新我的一些旧机器人。我一直在关注https://discordjs.guide/voice/voice-connections.html#life-cycle 和https://discordjs.guide/voice/audio-player.html#life-cycle 上的文档,但它们真的不起作用。

只是测试代码如下所示:

const Discord = require('discord.js');
const token = require("./config.json");
const  join  = require("path");
const joinVoiceChannel, createAudioPlayer, createAudioResource, AudioPlayerStatus, VoiceConnectionStatus, SubscriptionStatus, StreamType   = require("@discordjs/voice");
 
 
client.on("ready", async () => 
    const connection = joinVoiceChannel(
        channelId: channel.id,
        guildId: channel.guild.id,
        adapterCreator: channel.guild.voiceAdapterCreator,
    );
  

    const audioPlayer = createAudioPlayer();

    const resource = createAudioResource(createReadStream(join(__dirname, "plswork.mp3")));
    
    
    const subscription = connection.subscribe(audioPlayer);
    
    audioPlayer.play(resource);

    audioPlayer.on(AudioPlayerStatus.Playing, () => 
        console.log("currently playing");
        console.log("resource started:", resource.started);
    );
    
    audioPlayer.on('error', error => 
        console.error(`Error: $error.message with resource $error.resource.metadata.title`);
    );

    audioPlayer.on(AudioPlayerStatus.AutoPaused, () => 
        console.log("done?");
        
    );


我创建了一个连接、audioPlayer 和资源,但在订阅到 audioPlayer 的连接并播放资源后,没有播放音频,也没有引发错误(在 AudioPlayer.on("error"...) 中)并且立即调用 AutoPaused 状态。

通过记录资源,我看到 resource.playbackDuration 为 0,但我不知道如何解决这个问题,因为我在 Internet 上找不到太多关于此主题的信息。

【问题讨论】:

能否提供控制台日志? 另外,你是requireAudioPlayerStatus吗?例如:const VoiceConnectionStatus, AudioPlayerStatus = require('@discordjs/voice'); 我确实需要它,是的。你想要什么日志?我会着手处理所有内容 我不是指 json,我指的是您在运行机器人时收到的控制台输出。需要明确的是:您从console.log("currently playing") 获得输出的位置。 还有,请尝试avoid using pastebin 获取这么少的代码 【参考方案1】:

通过查看您的代码可以看出,您不需要来自@discordjs/voice 的正确json,您至少需要AudioPlayerStatuscreateAudioPlayer。另外,通过您的resource,我认为您正在尝试创建AudioResource,因此您也需要它。你需要类似的东西:

const  AudioPlayerStatus, createAudioPlayer, AudioResource, StreamType  = require('@discordjs/voice');
/* */
const audioPlayer = createAudioPlayer();
/* */
audioPlayer.play(resource);

audioPlayer.on(AudioPlayerStatus.Playing, () => 
        // Do whatever you need to do when playing
);
/* */

最后,我建议您查找life cycle of an AudioPlayer 和creation of an AudioPlayer。此外,请确保正确创建您的resource、here,如果您需要它,您会找到AudioResource 文档。

【讨论】:

以上是关于Discord Bot 更新:如何播放音频?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Discord.py Cogs 使 Discord Bot 加入语音频道并在成员加入频道时播放音频文件

Discord Bot 不播放音频 discord.js v13

使用 python Discord bot 播放 Youtube 音频

Discord Bot 不播放声音 - Discord.py

在 Discord bot 中播放本地音频文件的问题

如何让基于 Python 的 Discord Bot 随机播放不同的声音?