オンラインで信頼できるボットを見つけられなかったので、私のディスカードサーバーのボットをオーディオYouTubeのビデオを再生するために構築しています。参加した直後にボイスチャンネルを残しているボット
!{play {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上のファイルをffmpegの使用しようとしているが、私は同じ結果を持っていたし、ボットはできるだけ早く音声チャネルを残しましたそれはつながった。
私は、ffmpegとyoutube-dlの両方がcmdウィンドウでコマンドを実行することで動作していて、どちらも正常に動作していることを確認しました。
で申し訳ありませんが、私は図書館を持っていることを言及するのを忘れてしまいました! – Forb