Skip to content

Commit e082d08

Browse files
Merge pull request #334 from selfdocumentingcode/feature/dumptruck
Feature/dumptruck
2 parents 9b08095 + d130ece commit e082d08

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+1290
-766
lines changed

.github/workflows/build.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ jobs:
6262
arguments: '/updateprojectfiles'
6363

6464
- name: Test
65-
run: dotnet test
65+
run: dotnet test --filter TestCategory\!=ShittyTests
6666

6767
- name: Log in to the Container registry
6868
uses: docker/login-action@v3

src/Kattbot.Common/Models/Emotes/EmoteUsageResult.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,34 +24,34 @@ public class ExtendedStatsQueryResult
2424

2525
public class ExtendedEmoteStats
2626
{
27-
public string EmoteCode { get; set; } = null!;
27+
public string EmoteCode { get; init; } = null!;
2828

29-
public int Usage { get; set; }
29+
public int Usage { get; init; }
3030

31-
public double PercentageOfTotal { get; set; }
31+
public double PercentageOfTotal { get; init; }
3232
}
3333

3434
public class EmoteUsageResult
3535
{
36-
public EmoteStats EmoteStats { get; set; }
36+
public EmoteStats? EmoteStats { get; init; }
3737

38-
public List<EmoteUser> EmoteUsers { get; set; }
38+
public List<EmoteUser> EmoteUsers { get; init; } = [];
3939
}
4040

4141
public class EmoteUser
4242
{
43-
public ulong UserId { get; set; }
43+
public ulong UserId { get; init; }
4444

45-
public int Usage { get; set; }
45+
public int Usage { get; init; }
4646
}
4747

4848
public class ExtendedEmoteUser
4949
{
50-
public ulong UserId { get; set; }
50+
public ulong UserId { get; init; }
5151

52-
public int Usage { get; set; }
52+
public int Usage { get; init; }
5353

54-
public double PercentageOfTotal { get; set; }
54+
public double PercentageOfTotal { get; init; }
5555

5656
public string DisplayName { get; set; } = string.Empty;
5757
}

src/Kattbot.Common/Models/Emotes/TempEmote.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,6 @@ public class TempEmote
77
public string Name { get; set; } = null!;
88

99
public bool Animated { get; set; }
10+
11+
public string ImageUrl { get; set; } = null!;
1012
}

src/Kattbot.Data/Repositories/EmoteStatsRepository.cs

Lines changed: 43 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,12 @@ public async Task<PaginatedResult<EmoteStats>> GetGuildEmoteStats(
2525
int perPage,
2626
DateTime? fromDate)
2727
{
28+
var emotesResult = new List<EmoteStats>();
29+
2830
List<EmoteStats> emotes = await _dbContext.Emotes
2931
.AsQueryable()
30-
.Where(
31-
e => e.GuildId == guildId
32-
&& (!fromDate.HasValue || e.DateTime > fromDate.Value))
32+
.Where(e => e.GuildId == guildId
33+
&& (!fromDate.HasValue || e.DateTime > fromDate.Value))
3334
.GroupBy(
3435
e => new { e.EmoteId, e.EmoteAnimated },
3536
(key, value) => new EmoteStats
@@ -40,38 +41,32 @@ public async Task<PaginatedResult<EmoteStats>> GetGuildEmoteStats(
4041
})
4142
.ToListAsync();
4243

44+
emotesResult.AddRange(emotes);
45+
4346
IEnumerable<EmoteStats> placeholders = guildEmotes
4447
.Where(a => !emotes.Select(e => e.EmoteId).Contains(a.Id))
45-
.Select(
46-
e => new EmoteStats
47-
{
48-
EmoteId = e.Id,
49-
IsAnimated = e.Animated,
50-
Usage = 0,
51-
});
48+
.Select(e => new EmoteStats
49+
{
50+
EmoteId = e.Id,
51+
IsAnimated = e.Animated,
52+
Usage = 0,
53+
});
5254

53-
emotes.AddRange(placeholders);
55+
emotesResult.AddRange(placeholders);
5456

55-
if (direction == SortDirection.ASC)
56-
{
57-
emotes = emotes.OrderBy(u => u.Usage).ToList();
58-
}
59-
else
60-
{
61-
emotes = emotes.OrderByDescending(u => u.Usage).ToList();
62-
}
57+
emotesResult = direction == SortDirection.Asc
58+
? emotesResult.OrderBy(u => u.Usage).ToList()
59+
: emotesResult.OrderByDescending(u => u.Usage).ToList();
6360

64-
int totalCount = emotes.Count();
61+
var totalPages = (int)Math.Ceiling((double)emotesResult.Count / perPage);
6562

66-
var totalPages = (int)Math.Ceiling((double)totalCount / perPage);
67-
68-
int safePageOffset = Math.Max(0, Math.Min(pageOffset, totalPages - 1));
63+
int safePageOffset = Math.Max(val1: 0, Math.Min(pageOffset, totalPages - 1));
6964

7065
var items = new List<EmoteStats>();
7166

7267
if (totalPages > 0)
7368
{
74-
items = emotes
69+
items = emotesResult
7570
.Skip(safePageOffset * perPage)
7671
.Take(perPage)
7772
.ToList();
@@ -82,7 +77,7 @@ public async Task<PaginatedResult<EmoteStats>> GetGuildEmoteStats(
8277
Items = items,
8378
PageOffset = safePageOffset,
8479
PageCount = totalPages,
85-
TotalCount = totalCount,
80+
TotalCount = emotesResult.Count,
8681
};
8782

8883
return result;
@@ -97,10 +92,9 @@ public async Task<PaginatedResult<ExtendedStatsQueryResult>> GetBestEmotesForUse
9792
{
9893
IOrderedQueryable<EmoteStats> mainQuery = _dbContext.Emotes
9994
.AsQueryable()
100-
.Where(
101-
e => e.GuildId == guildId
102-
&& e.UserId == userId
103-
&& (!fromDate.HasValue || e.DateTime > fromDate.Value))
95+
.Where(e => e.GuildId == guildId
96+
&& e.UserId == userId
97+
&& (!fromDate.HasValue || e.DateTime > fromDate.Value))
10498
.GroupBy(
10599
e => new { e.EmoteId, e.EmoteAnimated },
106100
(key, value) => new EmoteStats
@@ -117,26 +111,24 @@ public async Task<PaginatedResult<ExtendedStatsQueryResult>> GetBestEmotesForUse
117111

118112
var items = new List<ExtendedStatsQueryResult>();
119113

120-
int safePageOffset = Math.Max(0, Math.Min(pageOffset, totalPages - 1));
114+
int safePageOffset = Math.Max(val1: 0, Math.Min(pageOffset, totalPages - 1));
121115

122116
if (totalPages > 0)
123117
{
124118
items = await mainQuery
125119
.Skip(safePageOffset * perPage)
126120
.Take(perPage)
127-
.Select(
128-
e =>
129-
new ExtendedStatsQueryResult
130-
{
131-
EmoteId = e.EmoteId,
132-
Usage = e.Usage,
133-
IsAnimated = e.IsAnimated,
134-
TotalUsage = _dbContext.Emotes
135-
.Count(
136-
inner => inner.GuildId == guildId
137-
&& inner.EmoteId == e.EmoteId
138-
&& (!fromDate.HasValue || inner.DateTime > fromDate.Value)),
139-
})
121+
.Select(e =>
122+
new ExtendedStatsQueryResult
123+
{
124+
EmoteId = e.EmoteId,
125+
Usage = e.Usage,
126+
IsAnimated = e.IsAnimated,
127+
TotalUsage = _dbContext.Emotes
128+
.Count(inner => inner.GuildId == guildId
129+
&& inner.EmoteId == e.EmoteId
130+
&& (!fromDate.HasValue || inner.DateTime > fromDate.Value)),
131+
})
140132
.ToListAsync();
141133
}
142134

@@ -161,10 +153,9 @@ public async Task<EmoteUsageResult> GetSingleEmoteStats(
161153

162154
IQueryable<EmoteStats> query = _dbContext.Emotes
163155
.AsQueryable()
164-
.Where(
165-
e => e.GuildId == guildId
166-
&& e.EmoteId == emoteId
167-
&& (!fromDate.HasValue || e.DateTime > fromDate.Value))
156+
.Where(e => e.GuildId == guildId
157+
&& e.EmoteId == emoteId
158+
&& (!fromDate.HasValue || e.DateTime > fromDate.Value))
168159
.GroupBy(
169160
e => new { e.EmoteId, e.EmoteAnimated },
170161
(key, value) => new EmoteStats
@@ -178,10 +169,9 @@ public async Task<EmoteUsageResult> GetSingleEmoteStats(
178169

179170
IQueryable<EmoteUser> usersQuery = _dbContext.Emotes
180171
.AsQueryable()
181-
.Where(
182-
e => e.GuildId == guildId
183-
&& e.EmoteId == emoteId
184-
&& (!fromDate.HasValue || e.DateTime > fromDate.Value))
172+
.Where(e => e.GuildId == guildId
173+
&& e.EmoteId == emoteId
174+
&& (!fromDate.HasValue || e.DateTime > fromDate.Value))
185175
.GroupBy(
186176
e => new { e.UserId },
187177
(key, value) => new EmoteUser
@@ -206,6 +196,6 @@ public async Task<EmoteUsageResult> GetSingleEmoteStats(
206196

207197
public enum SortDirection
208198
{
209-
ASC,
210-
DESC,
199+
Asc,
200+
Desc,
211201
}

src/Kattbot/CommandHandlers/EmoteStats/GetEmoteStats.cs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ public class GetEmoteStatsRequest : CommandRequest
2020
{
2121
public GetEmoteStatsRequest(CommandContext ctx)
2222
: base(ctx)
23-
{ }
23+
{
24+
}
2425

2526
public TempEmote Emote { get; set; } = null!;
2627

@@ -49,7 +50,7 @@ public async Task Handle(GetEmoteStatsRequest request, CancellationToken cancell
4950
EmoteUsageResult emoteUsageResult =
5051
await _emoteStatsRepo.GetSingleEmoteStats(guildId, emote, MaxUserCount, fromDate);
5152

52-
if (emoteUsageResult == null)
53+
if (emoteUsageResult.EmoteStats == null)
5354
{
5455
await ctx.RespondAsync("No stats yet");
5556
return;
@@ -76,23 +77,22 @@ public async Task Handle(GetEmoteStatsRequest request, CancellationToken cancell
7677
if (emoteUsers.Count > 0)
7778
{
7879
List<ExtendedEmoteUser> extendedEmoteUsers = emoteUsers
79-
.Select(
80-
r => new ExtendedEmoteUser
81-
{
82-
UserId = r.UserId,
83-
Usage = r.Usage,
84-
PercentageOfTotal = (double)r.Usage / totalUsage,
85-
})
80+
.Select(r => new ExtendedEmoteUser
81+
{
82+
UserId = r.UserId,
83+
Usage = r.Usage,
84+
PercentageOfTotal = (double)r.Usage / totalUsage,
85+
})
8686
.ToList();
8787

8888
// Resolve display names
8989
foreach (ExtendedEmoteUser? emoteUser in extendedEmoteUsers)
9090
{
9191
DiscordMember member;
9292

93-
if (ctx.Guild.Members.ContainsKey(emoteUser.UserId))
93+
if (ctx.Guild.Members.TryGetValue(emoteUser.UserId, out DiscordMember? guildMember))
9494
{
95-
member = ctx.Guild.Members[emoteUser.UserId];
95+
member = guildMember;
9696
}
9797
else
9898
{
@@ -112,7 +112,7 @@ public async Task Handle(GetEmoteStatsRequest request, CancellationToken cancell
112112
result.AppendLine();
113113
result.AppendLine("Top users");
114114

115-
List<string> lines = FormattedResultHelper.FormatExtendedEmoteUsers(extendedEmoteUsers, 0);
115+
List<string> lines = FormattedResultHelper.FormatExtendedEmoteUsers(extendedEmoteUsers, rankOffset: 0);
116116

117117
lines.ForEach(l => result.AppendLine(l));
118118
}

src/Kattbot/CommandHandlers/EmoteStats/GetGuildEmoteStats.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ public class GetGuildEmoteStatsRequest : CommandRequest
2020
{
2121
public GetGuildEmoteStatsRequest(CommandContext ctx)
2222
: base(ctx)
23-
{ }
23+
{
24+
}
2425

2526
public SortDirection SortDirection { get; set; }
2627

@@ -54,13 +55,12 @@ public async Task Handle(GetGuildEmoteStatsRequest request, CancellationToken ca
5455

5556
int pageOffset = page - 1;
5657

57-
List<TempEmote> mappedGuildEmotes = guildEmotes.Select(
58-
kv => new TempEmote
59-
{
60-
Id = kv.Key,
61-
Name = kv.Value.Name,
62-
Animated = kv.Value.IsAnimated,
63-
})
58+
List<TempEmote> mappedGuildEmotes = guildEmotes.Select(kv => new TempEmote
59+
{
60+
Id = kv.Key,
61+
Name = kv.Value.Name,
62+
Animated = kv.Value.IsAnimated,
63+
})
6464
.ToList();
6565

6666
PaginatedResult<Common.Models.Emotes.EmoteStats> emoteUsageResult =
@@ -84,7 +84,7 @@ await _emoteStatsRepo.GetGuildEmoteStats(
8484
return;
8585
}
8686

87-
string bestOrWorst = direction == SortDirection.ASC ? "worst" : "best";
87+
string bestOrWorst = direction == SortDirection.Asc ? "worst" : "best";
8888

8989
string rangeText;
9090

0 commit comments

Comments
 (0)