Example #1
0
        public static async Task InsertToQueue(DiscordGuild g, ulong u, string ts, int pos)
        {
            var qnow = await GetQueue(g);

            qnow.Insert(pos, new QueueEntry(LavalinkUtilities.DecodeTrack(ts), u, DateTimeOffset.UtcNow, pos));
            await RebuildQueue(g, qnow);
        }
        /// <summary>
        /// Asynchronously loads data for this data tracker from specified redis instance.
        /// </summary>
        /// <returns></returns>
        internal async Task LoadAsync()
        {
            await this.Redis.GetValueForAsync(this, x => x.RepeatMode, this.RepeatMode);

            await this.Redis.GetValueForAsync(this, x => x.IsShuffled, this.IsShuffled);

            await this.Redis.GetValueForAsync(this, x => x.Volume, this.Volume);

            await this.Redis.GetValueForAsync(this, x => x.QueueSerialized, "[]");

            var rawQueue = JsonConvert.DeserializeObject <IEnumerable <MusicItemSerializable> >(this.QueueSerialized);

            this.QueueSerialized = null;

            var mbrs = await Task.WhenAll(rawQueue.Select(x => x.MemberId).Distinct().Select(x => this.Guild.GetMemberAsync(x)));

            var members = mbrs.ToDictionary(x => x.Id, x => x);

            lock (this.QueueInternal)
            {
                this.QueueInternal.Clear();
                foreach (var rawItem in rawQueue)
                {
                    this.QueueInternal.Add(new MusicItem(LavalinkUtilities.DecodeTrack(rawItem.Track), members[rawItem.MemberId]));
                }
            }
        }
Example #3
0
        public static async Task InsertEntry(string p, ulong u, string ts, int pos)
        {
            var qnow = await GetPlaylist(u, p);

            var q = await qnow.GetEntries();

            q.Insert(pos, new PlaylistEntry(LavalinkUtilities.DecodeTrack(ts), DateTimeOffset.UtcNow, DateTimeOffset.UtcNow));
            await RebuildList(u, p, q);
        }
Example #4
0
        public static async Task InsertToQueue(DiscordGuild g, ulong u, List <LavalinkTrack> ts, int pos)
        {
            var qnow = await GetQueue(g);

            foreach (var tt in ts)
            {
                qnow.Insert(pos, new QueueEntry(LavalinkUtilities.DecodeTrack(tt.TrackString), u, DateTimeOffset.UtcNow, pos));
            }
            await RebuildQueue(g, qnow);
        }
Example #5
0
        public static async Task InsertEntry(string p, ulong u, List <LavalinkTrack> ts, int pos)
        {
            var qnow = await GetPlaylist(u, p);

            var q = await qnow.GetEntries();

            foreach (var tt in ts)
            {
                q.Insert(pos, new PlaylistEntry(LavalinkUtilities.DecodeTrack(tt.TrackString), DateTimeOffset.UtcNow, DateTimeOffset.UtcNow));
            }
            await RebuildList(u, p, q);
        }
Example #6
0
        public static async Task CacheLPL(ulong g)
        {
            var connString = Bot.cfg.DbConnectString;
            var conn       = new NpgsqlConnection(connString);
            await conn.OpenAsync();

            var cmd    = new NpgsqlCommand($"SELECT * FROM lastplayedsongs WHERE guildId = {g} ORDER BY lastplayedsongs.trackposition DESC LIMIT 1000", conn);
            var reader = await cmd.ExecuteReaderAsync();

            while (await reader.ReadAsync())
            {
                Bot.Guilds[g].lastPlayedSongs.Add(new Entry(LavalinkUtilities.DecodeTrack(reader.GetString(2))));
            }
            reader.Close();
            cmd.Dispose();
            conn.Close();
            conn.Dispose();
        }
Example #7
0
        public static async Task <List <QueueEntry> > GetQueue(DiscordGuild g)
        {
            var connString = Bot.cfg.DbConnectString;
            var conn       = new NpgsqlConnection(connString);
            await conn.OpenAsync();

            var cmd2   = new NpgsqlCommand($"SELECT * FROM queues WHERE guildId = {g.Id} ORDER BY position ASC;", conn);
            var reader = await cmd2.ExecuteReaderAsync();

            List <QueueEntry> queue = new();

            while (await reader.ReadAsync())
            {
                queue.Add(new QueueEntry(LavalinkUtilities.DecodeTrack(Convert.ToString(reader["trackstring"])), Convert.ToUInt64(reader["userid"]), DateTimeOffset.Parse(reader["addtime"].ToString()), Convert.ToInt32(reader["position"])));
            }
            reader.Close();
            cmd2.Dispose();
            conn.Close();
            conn.Dispose();
            return(queue);
        }
Example #8
0
        public static async Task <List <Entry> > GetLPL(DiscordGuild g)
        {
            var connString = Bot.cfg.DbConnectString;
            var conn       = new NpgsqlConnection(connString);
            await conn.OpenAsync();

            var cmd2   = new NpgsqlCommand($"SELECT * FROM lastplayedsongs WHERE guildId = {g.Id} ORDER BY lastplayedsongs.trackposition DESC LIMIT 1000", conn);
            var reader = await cmd2.ExecuteReaderAsync();

            List <Entry> queue = new();

            while (await reader.ReadAsync())
            {
                //queue.Add(new Entry(LavalinkUtilities.DecodeTrack((string)reader["trackstring"]), DateTimeOffset.Parse(NpgsqlDateTime.Parse((string)reader["addtime"]).ToString())));
                queue.Add(new Entry(LavalinkUtilities.DecodeTrack((string)reader["trackstring"]), DateTimeOffset.UtcNow));
            }
            reader.Close();
            cmd2.Dispose();
            conn.Close();
            conn.Dispose();
            return(queue);
        }
Example #9
0
        public async Task <List <PlaylistEntry> > GetEntries()
        {
            var Entries = new List <PlaylistEntry>(SongCount);

            if (ExternalService == ExtService.None)
            {
                var connString = Bot.cfg.DbConnectString;
                var conn       = new NpgsqlConnection(connString);
                await conn.OpenAsync();

                var cmd2 = new NpgsqlCommand($"SELECT * FROM playlistentries WHERE userid = {UserID} AND playlistname = @pl ORDER BY pos ASC;", conn);
                cmd2.Parameters.AddWithValue("pl", Name);
                var reader = await cmd2.ExecuteReaderAsync();

                while (await reader.ReadAsync())
                {
                    Entries.Add(new PlaylistEntry(LavalinkUtilities.DecodeTrack(Convert.ToString(reader["trackstring"])), DateTimeOffset.Parse(Convert.ToString(reader["addition"])), DateTimeOffset.Parse(Convert.ToString(reader["changed"]))));
                }
                reader.Close();
                cmd2.Dispose();
                conn.Close();
                conn.Dispose();
            }
            else
            {
                var trs = await Bot.LLEU.First().Value.GetTracksAsync(new Uri(Url));

                int i = 0;
                foreach (var t in trs.Tracks)
                {
                    Entries.Add(new PlaylistEntry(t, DateTimeOffset.UtcNow, DateTimeOffset.UtcNow));
                    i++;
                }
            }
            return(Entries);
        }