private string GetParticipationEmoji(GuildUserParticipationStatistics stats) { if (stats.Percentile == 100 || stats.Rank == 1) { return("🥇"); } else if (stats.Percentile == 99 || stats.Rank == 2) { return("🥈"); } else if (stats.Percentile == 98 || stats.Rank == 3) { return("🥉"); } else if (stats.Percentile >= 95 && stats.Percentile < 98) { return("🏆"); } return(string.Empty); }
private async Task AddParticipationToEmbedAsync( ulong userId, StringBuilder builder, GuildUserParticipationStatistics userRank, IReadOnlyList <MessageCountByDate> messagesByDate, IReadOnlyList <MessageCountPerChannel> messageCountsByChannel, IReadOnlyCollection <EmojiUsageStatistics> emojiCounts) { var lastWeek = _utcNow - TimeSpan.FromDays(7); var weekTotal = 0; var monthTotal = 0; foreach (var kvp in messagesByDate.OrderByDescending(x => x.Date)) { if (kvp.Date >= lastWeek) { weekTotal += kvp.MessageCount; } monthTotal += kvp.MessageCount; } builder.AppendLine(); builder.AppendLine("**\u276F Guild Participation**"); if (userRank?.Rank > 0) { builder.AppendFormat("Rank: {0} {1}\n", userRank.Rank.Ordinalize(), GetParticipationEmoji(userRank)); } var weekParticipation = "Last 7 days: " + weekTotal + " messages"; if (weekTotal > 0 && monthTotal > 0) { var percentage = (int)((decimal)weekTotal / monthTotal * 100); weekParticipation += string.Format(" ({0}%)", percentage); } builder.AppendLine(weekParticipation); builder.AppendLine("Last 30 days: " + monthTotal + " messages"); if (monthTotal > 0) { builder.AppendFormat( "Avg. per day: {0} messages (top {1} percentile)\n", decimal.Round(userRank.AveragePerDay, 3), userRank.Percentile.Ordinalize()); try { foreach (var channelMessageCount in messageCountsByChannel.OrderByDescending(x => x.MessageCount)) { var channel = await Context.Guild.GetChannelAsync(channelMessageCount.ChannelId); if (channel.IsPublic()) { builder.AppendLine($"Most active channel: {MentionUtils.MentionChannel(channel.Id)} ({channelMessageCount.MessageCount} messages)"); break; } } } catch (Exception ex) { _log.LogDebug(ex, "Unable to get the most active channel for {UserId}.", userId); } } if (emojiCounts.Any()) { var favoriteEmoji = emojiCounts.First(); var emojiFormatted = ((SocketSelfUser)Context.Client.CurrentUser).CanAccessEmoji(favoriteEmoji.Emoji) ? Format.Url(favoriteEmoji.Emoji.ToString(), favoriteEmoji.Emoji.Url) : $"{Format.Url("❔", favoriteEmoji.Emoji.Url)} (`{favoriteEmoji.Emoji.Name}`)"; builder.AppendLine($"Favorite emoji: {emojiFormatted} ({"time".ToQuantity(favoriteEmoji.Uses)})"); } }