From db8885739f6f442e52fd834bc5d9f0a32d9405e8 Mon Sep 17 00:00:00 2001 From: Toastie Date: Tue, 8 Oct 2024 13:55:47 +1300 Subject: [PATCH] Leaderboards will show 10 users per page --- .../GrpcApiPermGenerator.cs | 2 +- src/EllieBot.GrpcApiBase/protos/greet.proto | 12 ++----- src/EllieBot/Modules/Xp/Xp.cs | 6 ++-- src/EllieBot/Modules/Xp/XpService.cs | 16 +++++----- src/EllieBot/Services/GrpcApi/GreetByeSvc.cs | 32 +++++++------------ ...erceptor.cs => GrpcApiPermsInterceptor.cs} | 8 ++--- src/EllieBot/Services/GrpcApiService.cs | 2 +- 7 files changed, 31 insertions(+), 47 deletions(-) rename src/EllieBot/Services/{PermsInterceptor.cs => GrpcApiPermsInterceptor.cs} (87%) diff --git a/src/EllieBot.Generators/GrpcApiPermGenerator.cs b/src/EllieBot.Generators/GrpcApiPermGenerator.cs index 71f7ce4..5e19b9c 100644 --- a/src/EllieBot.Generators/GrpcApiPermGenerator.cs +++ b/src/EllieBot.Generators/GrpcApiPermGenerator.cs @@ -87,7 +87,7 @@ namespace EllieBot.Generators sw.WriteLine("namespace EllieBot.GrpcApi;"); sw.WriteLine(); - sw.WriteLine("public partial class PermsInterceptor"); + sw.WriteLine("public partial class GrpcApiPermsInterceptor"); sw.WriteLine("{"); sw.Indent++; diff --git a/src/EllieBot.GrpcApiBase/protos/greet.proto b/src/EllieBot.GrpcApiBase/protos/greet.proto index f2eeec4..a683bf4 100644 --- a/src/EllieBot.GrpcApiBase/protos/greet.proto +++ b/src/EllieBot.GrpcApiBase/protos/greet.proto @@ -5,18 +5,11 @@ option csharp_namespace = "EllieBot.GrpcApi"; package greet; service GrpcGreet { - rpc GetGreetSettings (GetGreetRequest) returns (GetGreetReply); + rpc GetGreetSettings (GetGreetRequest) returns (GrpcGreetSettings); rpc UpdateGreet (UpdateGreetRequest) returns (UpdateGreetReply); rpc TestGreet (TestGreetRequest) returns (TestGreetReply); } -message GetGreetReply { - GrpcGreetSettings greet = 1; - GrpcGreetSettings greetDm = 2; - GrpcGreetSettings bye = 3; - GrpcGreetSettings boost = 4; -} - message GrpcGreetSettings { optional uint64 channelId = 1; string message = 2; @@ -26,6 +19,7 @@ message GrpcGreetSettings { message GetGreetRequest { uint64 guildId = 1; + GrpcGreetType type = 2; } message UpdateGreetRequest { @@ -41,7 +35,7 @@ enum GrpcGreetType { } message UpdateGreetReply { - bool success = 1; + GrpcGreetSettings settings = 1; } message TestGreetRequest { diff --git a/src/EllieBot/Modules/Xp/Xp.cs b/src/EllieBot/Modules/Xp/Xp.cs index f4ef40e..3f4c3f3 100644 --- a/src/EllieBot/Modules/Xp/Xp.cs +++ b/src/EllieBot/Modules/Xp/Xp.cs @@ -107,7 +107,7 @@ public partial class Xp : EllieModule [Cmd] [UserPerm(GuildPerm.ManageChannels)] [RequireContext(ContextType.Guild)] - public async Task XpExclude(Channel _, [Leftover] IChannel channel = null) + public async Task XpExclude(Channel _, [Leftover] IChannel? channel = null) { if (channel is null) channel = ctx.Channel; @@ -203,7 +203,7 @@ public partial class Xp : EllieModule await Response() .Paginated() .PageItems(GetPageItems) - .PageSize(9) + .PageSize(10) .CurrentPage(page) .Page((users, curPage) => { @@ -262,7 +262,7 @@ public partial class Xp : EllieModule await Response() .Paginated() .PageItems(GetPageItems) - .PageSize(9) + .PageSize(10) .Page((users, curPage) => { var embed = _sender.CreateEmbed() diff --git a/src/EllieBot/Modules/Xp/XpService.cs b/src/EllieBot/Modules/Xp/XpService.cs index 97db7f6..96c7b1b 100644 --- a/src/EllieBot/Modules/Xp/XpService.cs +++ b/src/EllieBot/Modules/Xp/XpService.cs @@ -571,8 +571,8 @@ public class XpService : IEService, IReadyExecutor, IExecNoCommand .UserXpStats .Where(x => x.GuildId == guildId) .OrderByDescending(x => x.Xp + x.AwardedXp) - .Skip(page * 9) - .Take(9) + .Skip(page * 10) + .Take(10) .ToArrayAsyncLinqToDB(); } @@ -582,8 +582,8 @@ public class XpService : IEService, IReadyExecutor, IExecNoCommand return await uow.Set() .Where(x => x.GuildId == guildId && x.UserId.In(users)) .OrderByDescending(x => x.Xp + x.AwardedXp) - .Skip(page * 9) - .Take(9) + .Skip(page * 10) + .Take(10) .ToArrayAsyncLinqToDB(); } @@ -593,8 +593,8 @@ public class XpService : IEService, IReadyExecutor, IExecNoCommand return await uow.GetTable() .OrderByDescending(x => x.TotalXp) - .Skip(page * 9) - .Take(9) + .Skip(page * 10) + .Take(10) .ToArrayAsyncLinqToDB(); } @@ -605,8 +605,8 @@ public class XpService : IEService, IReadyExecutor, IExecNoCommand return await uow.GetTable() .Where(x => x.UserId.In(users)) .OrderByDescending(x => x.TotalXp) - .Skip(page * 9) - .Take(9) + .Skip(page * 10) + .Take(10) .ToArrayAsyncLinqToDB(); } diff --git a/src/EllieBot/Services/GrpcApi/GreetByeSvc.cs b/src/EllieBot/Services/GrpcApi/GreetByeSvc.cs index a617eea..5aafc8b 100644 --- a/src/EllieBot/Services/GrpcApi/GreetByeSvc.cs +++ b/src/EllieBot/Services/GrpcApi/GreetByeSvc.cs @@ -14,12 +14,6 @@ public sealed class GreetByeSvc : GrpcGreet.GrpcGreetBase, IEService _client = client; } - public GreetSettings GetDefaultGreet(GreetType type) - => new GreetSettings() - { - GreetType = type - }; - private static GrpcGreetSettings ToConf(GreetSettings? conf) { if (conf is null) @@ -35,23 +29,13 @@ public sealed class GreetByeSvc : GrpcGreet.GrpcGreetBase, IEService } [GrpcApiPerm(GuildPerm.Administrator)] - public override async Task GetGreetSettings(GetGreetRequest request, ServerCallContext context) + public override async Task GetGreetSettings(GetGreetRequest request, ServerCallContext context) { var guildId = request.GuildId; - var greetConf = await _gs.GetGreetSettingsAsync(guildId, GreetType.Greet); - var byeConf = await _gs.GetGreetSettingsAsync(guildId, GreetType.Bye); - var boostConf = await _gs.GetGreetSettingsAsync(guildId, GreetType.Boost); - var greetDmConf = await _gs.GetGreetSettingsAsync(guildId, GreetType.GreetDm); - // todo timer + var conf = await _gs.GetGreetSettingsAsync(guildId, (GreetType)request.Type); - return new GetGreetReply() - { - Greet = ToConf(greetConf), - Bye = ToConf(byeConf), - Boost = ToConf(boostConf), - GreetDm = ToConf(greetDmConf) - }; + return ToConf(conf); } [GrpcApiPerm(GuildPerm.Administrator)] @@ -61,12 +45,18 @@ public sealed class GreetByeSvc : GrpcGreet.GrpcGreetBase, IEService var s = request.Settings; var msg = s.Message; + var type = GetGreetType(s.Type); + await _gs.SetMessage(gid, GetGreetType(s.Type), msg); - await _gs.SetGreet(gid, s.ChannelId, GetGreetType(s.Type), s.IsEnabled); + await _gs.SetGreet(gid, s.ChannelId, type, s.IsEnabled); + var settings = await _gs.GetGreetSettingsAsync(gid, type); + + if (settings is null) + return new(); return new() { - Success = true + Settings = ToConf(settings) }; } diff --git a/src/EllieBot/Services/PermsInterceptor.cs b/src/EllieBot/Services/GrpcApiPermsInterceptor.cs similarity index 87% rename from src/EllieBot/Services/PermsInterceptor.cs rename to src/EllieBot/Services/GrpcApiPermsInterceptor.cs index c066ae7..2cee522 100644 --- a/src/EllieBot/Services/PermsInterceptor.cs +++ b/src/EllieBot/Services/GrpcApiPermsInterceptor.cs @@ -3,11 +3,11 @@ using Grpc.Core.Interceptors; namespace EllieBot.GrpcApi; -public sealed partial class PermsInterceptor : Interceptor +public sealed partial class GrpcApiPermsInterceptor : Interceptor { private readonly DiscordSocketClient _client; - public PermsInterceptor(DiscordSocketClient client) + public GrpcApiPermsInterceptor(DiscordSocketClient client) { _client = client; Log.Information("interceptor created"); @@ -29,8 +29,8 @@ public sealed partial class PermsInterceptor : Interceptor .RequestHeaders .ToDictionary(x => x.Key, x => x.Value); - - var method = context.Method[(context.Method.LastIndexOf('/') + 1)..]; + if (!metadata.ContainsKey("userid")) + throw new RpcException(new Status(StatusCode.Unauthenticated, "userid has to be specified")); if (perms.TryGetValue(method, out var perm)) { diff --git a/src/EllieBot/Services/GrpcApiService.cs b/src/EllieBot/Services/GrpcApiService.cs index a74c8bb..4a62e1c 100644 --- a/src/EllieBot/Services/GrpcApiService.cs +++ b/src/EllieBot/Services/GrpcApiService.cs @@ -39,7 +39,7 @@ public class GrpcApiService : IEService, IReadyExecutor var host = creds.GrpcApi.Host; var port = creds.GrpcApi.Port + _client.ShardId; - var interceptor = new PermsInterceptor(_client); + var interceptor = new GrpcApiPermsInterceptor(_client); _app = new Server() {