コード例 #1
0
        public async Task Adicionar(ExecucaoDeAudio execucaoDeAudio)
        {
            if (StatusDaFila == EnumeradorDeStatusDaFila.Parada)
            {
                StatusDaFila = EnumeradorDeStatusDaFila.Executando;
                try
                {
                    await AoExecutarMusica?.Invoke(execucaoDeAudio);
                }
                catch
                {
                    await execucaoDeAudio.CommandContext.Message.DeleteOwnReactionAsync(DiscordEmoji.FromName(execucaoDeAudio.CommandContext.Client, ":arrows_counterclockwise:"));

                    await execucaoDeAudio.CommandContext.Message.CreateReactionAsync(DiscordEmoji.FromName(execucaoDeAudio.CommandContext.Client, ":thumbsdown:"));

                    Fila.Clear();
                    StatusDaFila = EnumeradorDeStatusDaFila.Parada;
                    await execucaoDeAudio.CommandContext.Message.RespondAsync(content : "Erro ao executar o comando, a fila de audios foi limpa");
                }
            }
            else
            {
                Fila.Enqueue(execucaoDeAudio);
            }
        }
コード例 #2
0
        internal async Task ExecutarMusica(ExecucaoDeAudio execucaoDeAudio)
        {
            var ctx   = execucaoDeAudio.CommandContext;
            var audio = execucaoDeAudio.Audio;
            // check whether VNext is enabled
            var vnext = ctx.Client.GetVoiceNext();

            if (vnext == null)
            {
                // not enabled
                ctx.Client.Logger.LogError(new EventId(1, "Tia Turbina"), "VNext não Habilitado");
                return;
            }

            // check whether we aren't already connected
            var vnc = vnext.GetConnection(ctx.Guild);

            if (vnc == null)
            {
                vnc = await Entrar(ctx);

                if (vnc == null)
                {
                    return;
                }
            }

            var validacao = audio.ValidaAudio();

            // check if file exists
            if (!string.IsNullOrEmpty(validacao))
            {
                // file does not exist
                ctx.Client.Logger.LogError(new EventId(1, "Tia Turbina"), validacao);
                return;
            }

            // wait for current playback to finish
            while (vnc.IsPlaying)
            {
                await vnc.WaitForPlaybackFinishAsync();
            }

            // play
            await vnc.SendSpeakingAsync(true);

            try
            {
                await audio.TransmitirAudio(vnc);
            }
            finally
            {
                while (vnc.IsPlaying)
                {
                    await vnc.WaitForPlaybackFinishAsync();
                }
                await AoFinalizarExecucao?.Invoke(ctx, vnc);
            }
        }