private async Task GetEmoteStats(CommandContext ctx, TempEmote emote, string interval)
        {
            var guild = ctx.Guild;

            var isValidEmote = IsValidMessageEmote(emote.Id, guild);

            if (!isValidEmote)
            {
                await ctx.RespondAsync("Invalid emote");

                return;
            }

            var parsed = TryGetDateFromInterval(IntervalValue.Parse(interval), out var fromDate);

            if (!parsed)
            {
                await ctx.RespondAsync("Invalid interval");

                return;
            }

            var request = new GetEmoteStatsRequest(ctx)
            {
                Emote    = emote,
                FromDate = fromDate
            };

            _commandQueue.Enqueue(request);
        }
Exemple #2
0
        public async Task <EmoteUsageResult> GetSingleEmoteStats(ulong guildId, TempEmote emote, int userCount, DateTime?fromDate)
        {
            var emoteId = emote.Id;

            var query = _dbContext.Emotes
                        .AsQueryable()
                        .Where(e => e.GuildId == guildId &&
                               e.EmoteId == emoteId &&
                               (!fromDate.HasValue || e.DateTime > fromDate.Value))
                        .GroupBy(
                e => new { e.EmoteId, e.EmoteAnimated },
                (key, value) => new EmoteStats()
            {
                EmoteId    = key.EmoteId,
                IsAnimated = key.EmoteAnimated,
                Usage      = value.Count()
            });

            var emoteStatsResult = await query.SingleOrDefaultAsync();

            var usersQuery = _dbContext.Emotes
                             .AsQueryable()
                             .Where(e => e.GuildId == guildId &&
                                    e.EmoteId == emoteId &&
                                    (!fromDate.HasValue || e.DateTime > fromDate.Value))
                             .GroupBy(
                e => new { e.UserId },
                (key, value) => new EmoteUser()
            {
                UserId = key.UserId,
                Usage  = value.Count()
            })
                             .OrderByDescending(e => e.Usage)
                             .Take(userCount);

            var usersResult = await usersQuery.ToListAsync();

            var result = new EmoteUsageResult()
            {
                EmoteStats = emoteStatsResult,
                EmoteUsers = usersResult
            };

            return(result);
        }
Exemple #3
0
        public static TempEmote?Parse(string emoteString)
        {
            var match = EmoteRegexGrouped.Match(emoteString);

            if (!match.Success)
            {
                return(null);
            }

            var groups     = match.Groups;
            var isAnimated = !string.IsNullOrWhiteSpace(groups[1].Value);
            var name       = groups[2].Value;
            var id         = ulong.Parse(groups[3].Value);

            var parsed = new TempEmote()
            {
                Id       = id,
                Name     = name,
                Animated = isAnimated
            };

            return(parsed);
        }