public async Task Play(ICommandContext Context, [Remainder] string youtubevid = null)
        {
            try
            {
                if (string.IsNullOrEmpty(youtubevid) && IsPlaying)
                {
                    await Context.Channel.SendMessageAsync("You did not specify a link or search.");

                    return;
                }
                if (string.IsNullOrEmpty(youtubevid) && !IsPlaying && Queue.Count == 0)
                {
                    await Context.Channel.SendMessageAsync("You did not specify a link or search.");

                    return;
                }
                if (IsPlaying && !string.IsNullOrEmpty(youtubevid))
                {
                    TimeSpan     dur     = TimeSpan.Zero;
                    string       thm     = "";
                    string       message = "";
                    YouTubeVideo v       = uvid(youtubevid, @"queue", out thm, out dur, out message);
                    if (v == null)
                    {
                        await Context.Channel.SendMessageAsync("Hmm, that didn't work. info: " + message);

                        return;
                    }
                    MusicQueueItem item = new MusicQueueItem(v, @"queue\" + v.FullName, dur, thm);
                    Queue.Enqueue(item);
                    EmbedBuilder qvidinfo = new EmbedBuilder();
                    qvidinfo.WithAuthor("Added to Queue!");
                    qvidinfo.AddField(v.Title, dur);
                    qvidinfo.ImageUrl = thm;
                    await Context.Channel.SendMessageAsync("", false, qvidinfo);

                    return;
                }
                if (!IsPlaying && !string.IsNullOrEmpty(youtubevid))//You will f*****g obey me this time;;
                {
                    TimeSpan     dur     = TimeSpan.Zero;
                    string       thm     = "";
                    string       message = "";
                    YouTubeVideo v       = uvid(youtubevid, @"queue", out thm, out dur, out message);
                    if (v == null)
                    {
                        await Context.Channel.SendMessageAsync("Hmm, that didn't work. info: " + message);

                        return;
                    }
                    MusicQueueItem item = new MusicQueueItem(v, @"queue" + v.FullName, dur, thm);
                    Queue.Enqueue(item);
                    if (Queue.Count == 1)
                    {
                        await Context.Channel.SendMessageAsync("Added to queue, but wait, Only one song. Let's play it now.");
                    }
                }
                var vidinfo = Queue.Dequeue();

                string source = @"queue";
                var    vide   = vidinfo.video;
                byte[] b      = vidinfo.video.GetBytes();
                System.IO.File.WriteAllBytes(System.IO.Path.GetFullPath(source) + "\\" + vide.FullName, b);

                var inputFile = new MediaFile {
                    Filename = source + "\\" + vide.FullName
                };
                var outputFile = new MediaFile {
                    Filename = $"{source + "\\" + vide.FullName}.wav"
                };

                using (var engine = new Engine())
                {
                    engine.GetMetadata(inputFile);

                    engine.Convert(inputFile, outputFile);
                }
                NowPlayingInfo = new EmbedBuilder();
                NowPlayingInfo.WithAuthor("Now Playing", Context.Client.CurrentUser.GetAvatarUrl(ImageFormat.Auto));
                NowPlayingInfo.AddField(vide.Title, vidinfo.duration);
                NowPlayingInfo.AddField("Voice Channel", "`" + (await Context.Guild.GetVoiceChannelAsync(ChannelID)).Name + "`");
                NowPlayingInfo.ImageUrl = vidinfo.ThumbnailURL;
                NowPlayingInfo.Color    = Color.Purple;

                await Context.Channel.SendMessageAsync("", false, NowPlayingInfo.Build());

                using (var output = new NAudio.Wave.WaveFileReader(outputFile.Filename))
                {
                    using (var ms = new System.IO.MemoryStream())
                    {
                        using (var PlayingStream = aclient.CreatePCMStream(AudioApplication.Mixed, null, 150, 0))
                        {
                            using (var resampledAudio = new MediaFoundationResampler(output, new WaveFormat(48000, 16, 2)))
                            {
                                resampledAudio.ResamplerQuality = 50;
                                WaveFileWriter.WriteWavFileToStream(ms, resampledAudio);
                                using (var cvt = new NAudio.Wave.RawSourceWaveStream(ms, new WaveFormat(48000, 2)))
                                {
                                    IsPlaying = true;//stupid f**k
                                    while (true)
                                    {
                                        if (paused)
                                        {
                                            await Task.Delay(20);

                                            continue;
                                        }

                                        byte[] buffer = new byte[81920];
                                        int    r      = await cvt.ReadAsync(buffer, 0, buffer.Length);

                                        await PlayingStream.WriteAsync(buffer, 0, r);

                                        if (Skipped)
                                        {
                                            Skipped = false;
                                            break;
                                        }
                                        //await PlayingStream.FlushAsync(new CancellationToken(paused));
                                        if (r == 0)
                                        {
                                            break;
                                        }
                                    }
                                    await PlayingStream.FlushAsync();
                                }
                            }
                        }
                    }
                }
                IsPlaying = false;//stupid f**k
                LogMessage log = new LogMessage(LogSeverity.Info, "VoiceMOD", "End of Stream. Off to next one");
                Console.WriteLine(log);

                while (Queue.Count >= 1)
                {
                    if (Queue.Count == 0)
                    {
                        break;
                    }
                    //System.Threading.SpinWait.SpinUntil(Stopped.);//wait until it is stopped for sure before calling the next play loop.


                    if (IsPlaying)
                    {
                        await Task.Delay(20);

                        continue;
                    }

                    await Play(Context);
                }
            }
            catch (Exception ex)
            {
                await Context.Channel.SendMessageAsync(ex.Message);

                Console.WriteLine(ex.ToString());
            }
        }