>

Discus.Net Api를 사용하여 봇을 discord 서버에 연결하고 봇을 만들어 음악과 오디오를 재생하려고합니다. 봇을 채널에 참여시킬 수 있으며 훌륭하게 작동하지만 IAudioClient 를 얻으려고 할 때  채널 ( IAudioClient 에서)  오디오 출력 스트림을 가져 와서 음악을 쓸 수 있으며 음악을 전송하는 것입니다)) 예외가 발생합니다. 이것은 채널에 가입하고 IAudioClient 를 얻는 나의 코드입니다.  채널 :

   [Command("join")]
    public async Task JoinChannel(IVoiceChannel channel = null)
    {
        channel = channel ?? (callingUser as IGuildUser)?.VoiceChannel;
        if(channel == null)
        {
            await callingMsg.Channel.SendMessageAsync("You must be in a voice channel.");
            return;
        }
        Console.WriteLine("Channel: " + channel.Name + " - " + channel.Id);
        try
        {
            audioClient = await channel.ConnectAsync(); //crashes here
        }
        catch(Exception e)
        {
            Console.WriteLine(e.Message);
        }
    }

여기서 문제가되는지 모르겠지만 오디오 전송을 위해 "ffmpeg"만 설치했지만 지금까지는 오디오 채널을 가져 오기만하면 문제가 발생하지 않습니다. 이 튜토리얼을 사용했습니다 : https://discord.foxbot.me/docs /guides/voice/sending-voice.html 튜토리얼 상단에 튜토리얼이 오래되었다는 캡션이 표시됩니다.

내가 얻는 예외는 The operation has timed out 입니다 .

21:39:18 Discord Discord.Net v1.0.1 (API v6) 21:39:19 Gateway Connecting 21:39:20 Gateway Connected 21:39:20 Gateway Ready Channel: תודה תודה תודה תודה תודה - 334069917047455747 21:39:29 Gateway A MessageReceived handler is blocking the gateway task. at Discord.WebSocket.SocketGuild.d__160.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at Discord.WebSocket.SocketGuild.d__160.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Discord.WebSocket.SocketVoiceChannel.d__14.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() at ruin_counter.Program.d__9.MoveNext()

  • 답변 # 1

    명령이 시간 초과되면 '비동기'가 정확히 비동기 적이 지 않기 때문입니다. 명령의 RunMode를 비동기로 설정해야합니다

    [Command("name",RunMode = RunMode.Async)]

  • 답변 # 2

    방법 await channel.ConnectAsync()  값을 반환 할 때까지 시간이 걸릴 수 있으므로 대괄호 안에 다른 방법을 쓸 수 있고 다른 방법으로 필요한 IAudioClient 를 얻을 수 있음을 알았습니다.  그렇게 : 와이즈 비즈

    audioClient = await channel.ConnectAsync(SendAsync);
    
    

    private void SendAsync(IAudioClient audioClient) { var ffmpeg = CreateStream("tune.mp3"); var output = ffmpeg.StandardOutput.BaseStream; var discord = audioClient.CreatePCMStream(AudioApplication.Mixed); output.CopyToAsync(discord); discord.FlushAsync(); }

  • 이전 c# - winforms listview에서 특정 값을 가진 항목 제거
  • 다음 python - 배열 또는 데이터 프레임의 가능한 모든 레이블 (y)을 확인하십시오