Example #1
0
        public List <DJQueueItem> GetQueue(IGuild guild)
        {
            DJGuildInfo g = null;

            if (!guildInfo.TryGetValue(guild, out g))
            {
                return(new List <DJQueueItem>());
            }

            return(new List <DJQueueItem>(g.queue));
        }
Example #2
0
        public string ClearQueue(IGuild guild)
        {
            DJGuildInfo g = null;

            if (!guildInfo.TryGetValue(guild, out g))
            {
                return("Nothing is currently playing");
            }

            g.queue.Clear();
            return("Emptied queue.");
        }
Example #3
0
        private async Task OnTrackEndedAsync(TrackEndedEventArgs args)
        {
            if (args.Reason != Victoria.Enums.TrackEndReason.Finished)
            {
                return;
            }

            // No users are in the channel, stop playing and leave.
            if ((args.Player.VoiceChannel as SocketVoiceChannel).Users.Count == 0)
            {
                await LeaveChannel(args.Player.VoiceChannel.Guild, args.Player.VoiceChannel);

                return;
            }

            // Check if we should loop the track that ended.
            DJGuildInfo guild = null;

            if (guildInfo.TryGetValue(args.Player.VoiceChannel.Guild, out guild))
            {
                if (guild.loopSong == true)
                {
                    await args.Player.PlayAsync(args.Track);

                    await args.Player.TextChannel.SendMessageAsync($"**Looping** 🎶 `{args.Track.Title}`");

                    return;
                }
            }

            // Couldn't find the guild, leave channel.
            if (guild == null)
            {
                await LeaveChannel(args.Player.VoiceChannel.Guild, args.Player.VoiceChannel);

                return;
            }

            guild.OnNextTrack();

            // There was no next track, leave channel.
            if (guild.currentlyPlaying == null)
            {
                await LeaveChannel(args.Player.VoiceChannel.Guild, args.Player.VoiceChannel);

                return;
            }

            LavaTrack track = guild.currentlyPlaying.track as LavaTrack;
            await args.Player.PlayAsync(track);

            await args.Player.TextChannel.SendMessageAsync($"**Playing** 🎶`{track.Title}`");
        }
Example #4
0
        public async Task <string> PlayQuery(SocketUser username, IGuild guild, IVoiceChannel voiceChannel,
                                             ITextChannel textChannel, string query)
        {
            try
            {
                var search = Uri.IsWellFormedUriString(query, UriKind.Absolute) ? await lavaNode.SearchAsync(Victoria.Responses.Search.SearchType.Direct, query)
                    : await lavaNode.SearchAsync(Victoria.Responses.Search.SearchType.YouTube, query);

                if (search.Status == Victoria.Responses.Search.SearchStatus.LoadFailed)
                {
                    return($"Sorry, failed to load query.");
                }

                LavaTrack track = null;
                track = search.Tracks.FirstOrDefault();

                if (track == null)
                {
                    return("Sorry, can't find the track.");
                }

                var player = lavaNode.HasPlayer(guild) ? lavaNode.GetPlayer(guild) : await lavaNode.JoinAsync(voiceChannel, textChannel);

                if (!guildInfo.TryGetValue(guild, out var g))
                {
                    guildInfo.TryAdd(guild, new DJGuildInfo(voiceChannel));
                }

                DJGuildInfo currentGuild = null;
                guildInfo.TryGetValue(guild, out currentGuild);

                currentGuild.Enqueue(username, track);
                if (player.PlayerState == Victoria.Enums.PlayerState.Playing)
                {
                    return($"**Enqueued** `{track.Title}`");
                }
                else
                {
                    currentGuild.PlayNext();
                    await player.PlayAsync(currentGuild.currentlyPlaying.track);

                    return($"**Playing** 🎶 `{track.Title}`");
                }
            }catch (Exception e)
            {
                return($"Error playing query: `{e.Message}`.");
            }
        }
Example #5
0
        public string ShuffleQueue(IGuild guild)
        {
            DJGuildInfo g = null;

            if (!guildInfo.TryGetValue(guild, out g))
            {
                return("Nothing is currently playing");
            }

            if (g.queue.Count == 0)
            {
                return("Nothing is in the queue.");
            }

            g.Shuffle();
            return("Shuffled queue.");
        }
Example #6
0
        public bool RemoveFromQueue(IGuild guild, int index)
        {
            if (index < 1)
            {
                return(false);
            }

            DJGuildInfo g = null;

            if (!guildInfo.TryGetValue(guild, out g))
            {
                return(false);
            }

            g.queue.RemoveAt(index);
            return(true);
        }