示例#1
0
        public async Task Leave(CommandContext ctx)
        {
            // check whether VNext is enabled
            var vnext = ctx.Client.GetVoiceNext();

            if (vnext == null)
            {
                // not enabled
                await ctx.RespondAsync("VNext is not enabled or configured.");

                return;
            }

            // check whether we are connected
            var vnc = vnext.GetConnection(ctx.Guild);

            if (vnc == null)
            {
                // not connected
                await ctx.RespondAsync("Not connected in this guild.");

                return;
            }

            if (Qmusic.TryGetInstance(ctx.Guild.Id, out Qmusic qInstance))
            {
                await ctx.RespondAsync("Waiting for playback to finish...");

                await qInstance.CancelAndFinishPlayback();
            }

            // disconnect
            vnc.Disconnect();
            await ctx.RespondAsync("Disconnected");
        }
示例#2
0
        public async Task Join(CommandContext ctx, DiscordChannel chn = null)
        {
            // check whether VNext is enabled
            var vnext = ctx.Client.GetVoiceNext();

            if (vnext == null)
            {
                // not enabled
                await ctx.RespondAsync("VNext is not enabled or configured.");

                return;
            }

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

            if (vnc != null)
            {
                // already connected
                await ctx.RespondAsync("Already connected in this guild.");

                return;
            }

            // get member's voice state
            var vstat = ctx.Member?.VoiceState;

            if (vstat?.Channel == null && chn == null)
            {
                // they did not specify a channel and are not in one
                await ctx.RespondAsync("You are not in a voice channel.");

                return;
            }

            // channel not specified, use user's
            if (chn == null)
            {
                chn = vstat.Channel;
            }

            if (!Qmusic.TryGetInstance(ctx.Guild.Id, out Qmusic qInstance))
            {
                qInstance = new Qmusic(chn, ctx.Client);
            }

            await qInstance.JoinChannel(chn);

            await ctx.RespondAsync($"Connected to `{chn.Name}`");
        }
示例#3
0
        public async Task Channel(CommandContext ctx, int index = -1)
        {
            if (index == -1)
            {
                await ctx.RespondAsync("Please enter a channel ID from the ``list`` command");

                return;
            }

            index -= 1; //user gets a +1 view, cuz normal ppl start counting from 1 (instead of 0)


            if (index > -1 && index < Qmusic.QmusicRadioChannels.Count)
            {
                if (ChannelStreamSettings.ContainsKey(ctx.Guild.Id))
                {
                    ChannelStreamSettings[ctx.Guild.Id] = index;
                }
                else
                {
                    ChannelStreamSettings.Add(ctx.Guild.Id, index);
                }

                var split = Qmusic.QmusicRadioChannels[index].data.streams.aac.FirstOrDefault().source.Split('/');
                await ctx.RespondAsync($"Channel change to ``{split[split.Length - 1].Replace("AAC.aac", "").ToLower()}``");

                if (Qmusic.TryGetInstance(ctx.Guild.Id, out Qmusic instance)) // if instance is found
                {
                    await ctx.RespondAsync($"Waiting for playback to finish...");

                    instance.CancelPlayback();
                    await Play(ctx);

                    await ctx.RespondAsync($"Switched!");
                }
            }
            else
            {
                await ctx.RespondAsync($"Invalid channel");
            }
        }
示例#4
0
 public async Task Info(CommandContext ctx)
 {
     if (Qmusic.TryGetInstance(ctx.Guild.Id, out Qmusic instance))
     {
         try
         {
             //TODO: fix all of this mess xD
             var resp  = instance.GetTrackInfo(instance.QChannelIndex);
             var embed = new DiscordEmbedBuilder
             {
                 Color       = DiscordColor.Red,
                 Title       = resp.played_tracks[0].title,
                 Description = resp.played_tracks[0].artist.name + "\n" + resp.played_tracks[0].spotify_url,
                 ImageUrl    = "https://api.qmusic.be/" + resp.played_tracks[0].thumbnail
             };
             await ctx.RespondAsync(embed : embed);
         }
         catch (Exception e)
         {
             await ctx.RespondAsync("Failed obtaining info");
         }
     }
 }
示例#5
0
        public async Task Play(CommandContext ctx)
        {
            // check whether VNext is enabled
            var vnext = ctx.Client.GetVoiceNext();

            if (vnext == null)
            {
                // not enabled
                await ctx.RespondAsync("VNext is not enabled or configured.");

                return;
            }

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

            if (vnc == null)
            {
                // already connected
                await ctx.RespondAsync("Not connected in this guild.");

                return;
            }


            //

            // play
            Exception exc = null;

            try
            {
                await vnc.SendSpeakingAsync(true);

                var txStream = vnc.GetTransmitStream();

                if (!Qmusic.TryGetInstance(ctx.Guild.Id, out Qmusic qInstance)) // if no instance exists
                {
                    qInstance = new Qmusic(vnc.Channel, ctx.Client);
                }
                else if (qInstance.Channel.Id != ctx.Member.VoiceState.Channel.Id) // if an instance exists AND the channel differs
                {
                    await ctx.RespondAsync("Error: Already in a different channel!");

                    return;
                }

                if (ChannelStreamSettings.ContainsKey(ctx.Guild.Id))
                {
                    await qInstance.SetQMusicChannelIndex(ChannelStreamSettings[ctx.Guild.Id]);
                }
                else
                {
                    await qInstance.SetQMusicChannelIndex(-1);
                }

                await qInstance.Play(vnc.Channel);
            }
            catch (Exception ex) { exc = ex; }
            finally
            {
                await vnc.SendSpeakingAsync(false);
            }

            if (exc != null)
            {
                await ctx.RespondAsync($"An exception occured during playback: `{exc.GetType()}: {exc.Message}`");
            }
        }