当前位置: 首页 > 知识库问答 >
问题:

加入后立即离开语音通道的Discord bot

史飞尘
2023-03-14

我正在为我的discord服务器构建一个机器人来播放YouTube视频,因为我还没有在网上找到一个可靠的机器人。

在我输入后,机器人会连接到我的语音频道!播放{url}命令,但即使url有效,也会立即离开。

我的代码如下:

[Command("play", RunMode = RunMode.Async)]
public async Task play(string url) {
    IVoiceChannel channel = (Context.User as IVoiceState).VoiceChannel;
    IAudioClient client = await channel.ConnectAsync();

    var output = CreateStream(url).StandardOutput.BaseStream;
    var stream = client.CreatePCMStream(AudioApplication.Music, 128 * 1024);
    output.CopyToAsync(stream);
    stream.FlushAsync().ConfigureAwait(false);
}

private Process CreateStream(string url) {
    Process currentsong = new Process();

    currentsong.StartInfo = new ProcessStartInfo {
        FileName = "cmd.exe",
        Arguments = $"/C youtube-dl -o - {url} | ffmpeg -i pipe:0 -ac 2 -f s16le -ar 48000 pipe:1",
        UseShellExecute = false,
        RedirectStandardOutput = true,
        CreateNoWindow = true
    };

    currentsong.Start();
    return currentsong;
}

我尝试过在我的PC上使用一个硬编码的文件,但我得到了相同的结果,机器人一连接就离开了语音通道。

我确实通过在cmd窗口中运行命令来验证ffmpeg和youtube-dl是否正常工作,它们都运行良好。

共有1个答案

孟均
2023-03-14

ffmpeg不是对语音的唯一要求。您需要Discord使用的语音编码和加密库。我建议加入DiscordAPI服务器内的DiscordNet通道,这是我们总是在回答此类问题的地方,以及我们拥有大量资源的地方,例如这些库的预编译版本的链接。

https://discord.gg/discord-api通道为#dotnet_discord-net

 类似资料:
  • 我正在尝试创建一个机器人,当有人加入特定的语音频道(例如VC1)时,它会向特定的文本频道(例如vc-text)发送消息。 这是机器人。js代码: 一些ID: 文本通道ID是712677731023716452-发送通知到(我知道我需要添加通道消息编码) 当我加入VC1时,我会收到控制台消息“Left VC1”,当我离开/加入另一个VC1时,我也会收到相同的控制台消息。 我从https://www.

  • 我正在开发一个播放音乐的discord机器人。我已经设法让机器人离开通道,但服务器中的任何人都可以断开它。 我试图添加一个if语句,该语句要求命令作者的语音通道连接等于该帮会中机器人的语音通道连接。 这返回: 我在留档上找不到任何定义机器人连接到哪个公会的语音频道的东西。

  • 我想制造一个播放音频文件的不和谐机器人。现在,它加入语音通道并播放音频文件,但之后拒绝离开。我的代码在下面。谁能建议一些修复,使我的机器人将离开语音频道?

  • 我有一个机器人,我正在使用C#和这个SDKhttps://github.com/RogueException/Discord.Net 我试图找出一种方法,该方法基于某人何时加入语音频道并离开,基于他是谁。Discord API频道说我需要使用网关和“语音状态更新”事件,但我不太清楚如何做到这一点。 有没有办法用文档,https://discord.foxbot.me/docs/api/index.

  • 这是我命令的代码部分!虽然只有这一部分我不能很好地理解!我正试图让机器人在队列结束后离开! 它说和工作只是让机器人离开语音通道是我无法解决的问题!我尝试了以下方法: 编辑:

  • 我想添加一个事件,如果用户在歌曲仍在播放时离开,我的音乐机器人会立即离开语音频道。如果频道中有多个用户,机器人当然应该留在频道中。我只有一种方法,但需要帮助。我会尝试以下操作: 但不知怎么的,这似乎不起作用。我知道事实上,有一个类似的职位,但这并不适用于我太多,因为我定义了一些不同的事情。 我的第二次尝试是: (也不起作用。) 定义:我现在以不同的方式构建函数: 这是一个完全不同的计数。我试图做的