fix: .h fixed, .xp fixed, pagination in .lb fixed

This commit is contained in:
Kwoth
2024-05-10 15:20:39 +00:00
parent 75c5a003bf
commit fb594e50fd
10 changed files with 170 additions and 145 deletions

View File

@@ -776,7 +776,7 @@ public partial class Gambling : GamblingModule<GamblingService>
await using var uow = _db.GetDbContext(); await using var uow = _db.GetDbContext();
var cleanRichest = await uow.Set<DiscordUser>() var cleanRichest = await uow.Set<DiscordUser>()
.GetTopRichest(_client.CurrentUser.Id, 0, 10_000); .GetTopRichest(_client.CurrentUser.Id, 0, 1000);
var sg = (SocketGuild)ctx.Guild!; var sg = (SocketGuild)ctx.Guild!;
return cleanRichest.Where(x => sg.GetUser(x.UserId) is not null).ToList(); return cleanRichest.Where(x => sg.GetUser(x.UserId) is not null).ToList();
@@ -788,9 +788,13 @@ public partial class Gambling : GamblingModule<GamblingService>
} }
} }
var res = Response()
.Paginated();
await Response() await Response()
.Paginated() .Paginated()
.PageItems(GetTopRichest) .PageItems(GetTopRichest)
.TotalElements(900)
.PageSize(9) .PageSize(9)
.CurrentPage(page) .CurrentPage(page)
.Page((toSend, curPage) => .Page((toSend, curPage) =>

View File

@@ -10,7 +10,7 @@ using JsonSerializer = System.Text.Json.JsonSerializer;
namespace NadekoBot.Modules.Help; namespace NadekoBot.Modules.Help;
public sealed class Help : NadekoModule<HelpService> public sealed partial class Help : NadekoModule<HelpService>
{ {
public const string PATREON_URL = "https://patreon.com/nadekobot"; public const string PATREON_URL = "https://patreon.com/nadekobot";
public const string PAYPAL_URL = "https://paypal.me/Kwoth"; public const string PAYPAL_URL = "https://paypal.me/Kwoth";
@@ -72,7 +72,7 @@ public sealed class Help : NadekoModule<HelpService>
return; return;
var topLevelModules = new List<ModuleInfo>(); var topLevelModules = new List<ModuleInfo>();
foreach (var m in _cmds.Modules.GroupBy(x => x.GetTopLevelModule()).Select(x => x.Key)) foreach (var m in _cmds.Modules.GroupBy(x => x.GetTopLevelModule()).OrderBy(x => x.Key.Name).Select(x => x.Key))
{ {
var result = await _perms.CheckPermsAsync(ctx.Guild, var result = await _perms.CheckPermsAsync(ctx.Guild,
ctx.Channel, ctx.Channel,
@@ -80,6 +80,11 @@ public sealed class Help : NadekoModule<HelpService>
m.Name, m.Name,
null); null);
#if GLOBAL_NADEKO
if (m.Preconditions.Any(x => x is NoPublicBotAttribute))
continue;
#endif
if (result.IsAllowed) if (result.IsAllowed)
topLevelModules.Add(m); topLevelModules.Add(m);
} }
@@ -100,7 +105,7 @@ public sealed class Help : NadekoModule<HelpService>
return embed; return embed;
} }
items.OrderBy(module => module.Name) items
.ToList() .ToList()
.ForEach(module => embed.AddField($"{GetModuleEmoji(module.Name)} {module.Name}", .ForEach(module => embed.AddField($"{GetModuleEmoji(module.Name)} {module.Name}",
GetModuleDescription(module.Name) GetModuleDescription(module.Name)
@@ -355,17 +360,16 @@ public sealed class Help : NadekoModule<HelpService>
public async Task H([Leftover] CommandInfo com = null) public async Task H([Leftover] CommandInfo com = null)
{ {
var channel = ctx.Channel; var channel = ctx.Channel;
if (com is null) if (com is null)
{ {
var ch = channel is ITextChannel ? await ctx.User.CreateDMChannelAsync() : channel;
try try
{ {
var ch = channel is ITextChannel ? await ctx.User.CreateDMChannelAsync() : channel;
var data = await GetHelpString(); var data = await GetHelpString();
if (data == default) if (data == default)
return; return;
await Response().Text(data).SendAsync(); await Response().Channel(ch).Text(data).SendAsync();
try try
{ {
await ctx.OkAsync(); await ctx.OkAsync();

View File

@@ -1,5 +1,9 @@
namespace NadekoBot.Modules.Patronage; using NadekoBot.Modules.Patronage;
namespace NadekoBot.Modules.Help;
public partial class Help
{
[OnlyPublicBot] [OnlyPublicBot]
public partial class Patronage : NadekoModule public partial class Patronage : NadekoModule
{ {
@@ -87,7 +91,9 @@ public partial class Patronage : NadekoModule
.AddField(GetText(strs.pledge), $"**{patron.Amount / 100.0f:N1}$**", true); .AddField(GetText(strs.pledge), $"**{patron.Amount / 100.0f:N1}$**", true);
if (patron.Tier != PatronTier.None) if (patron.Tier != PatronTier.None)
eb.AddField(GetText(strs.expires), patron.ValidThru.AddDays(1).ToShortAndRelativeTimestampTag(), true); eb.AddField(GetText(strs.expires),
patron.ValidThru.AddDays(1).ToShortAndRelativeTimestampTag(),
true);
eb.AddField(GetText(strs.quotas), "", false); eb.AddField(GetText(strs.quotas), "", false);
@@ -147,3 +153,4 @@ public partial class Patronage : NadekoModule
? "✅" ? "✅"
: "⚠️"; : "⚠️";
} }
}

View File

@@ -1194,7 +1194,7 @@ public class XpService : INService, IReadyExecutor, IExecNoCommand
} }
//avatar //avatar
if (stats.User.AvatarId is not null && template.User.Icon.Show) if (template.User.Icon.Show)
{ {
try try
{ {

View File

@@ -5,7 +5,7 @@
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<ImplicitUsings>true</ImplicitUsings> <ImplicitUsings>true</ImplicitUsings>
<SatelliteResourceLanguages>en</SatelliteResourceLanguages> <SatelliteResourceLanguages>en</SatelliteResourceLanguages>
<Version>5.0.3</Version> <Version>5.0.4</Version>
<!-- Output/build --> <!-- Output/build -->
<RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory> <RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>

View File

@@ -4,7 +4,6 @@ using System.Diagnostics.CodeAnalysis;
namespace NadekoBot.Common; namespace NadekoBot.Common;
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)] [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)]
[SuppressMessage("Style", "IDE0022:Use expression body for methods")]
public sealed class NoPublicBotAttribute : PreconditionAttribute public sealed class NoPublicBotAttribute : PreconditionAttribute
{ {
public override Task<PreconditionResult> CheckPermissionsAsync( public override Task<PreconditionResult> CheckPermissionsAsync(

View File

@@ -25,7 +25,7 @@ public partial class ResponseBuilder
public async Task SendAsync(bool ephemeral = false) public async Task SendAsync(bool ephemeral = false)
{ {
var lastPage = (_paginationBuilder.TotalElements - 1) var lastPage = (_paginationBuilder.Elems - 1)
/ _paginationBuilder.ItemsPerPage; / _paginationBuilder.ItemsPerPage;
var items = (await _paginationBuilder.ItemsFunc(currentPage)).ToArray(); var items = (await _paginationBuilder.ItemsFunc(currentPage)).ToArray();

View File

@@ -396,7 +396,7 @@ public sealed class SourcedPaginatedResponseBuilder<T> : PaginatedResponseBuilde
public Func<int, Task<SimpleInteractionBase>>? InteractionFunc { get; private set; } public Func<int, Task<SimpleInteractionBase>>? InteractionFunc { get; private set; }
public int TotalElements { get; private set; } = 1; public int Elems { get; private set; } = 1;
public int ItemsPerPage { get; private set; } = 9; public int ItemsPerPage { get; private set; } = 9;
public bool AddPaginatedFooter { get; private set; } = true; public bool AddPaginatedFooter { get; private set; } = true;
public bool IsEphemeral { get; private set; } public bool IsEphemeral { get; private set; }
@@ -411,11 +411,17 @@ public sealed class SourcedPaginatedResponseBuilder<T> : PaginatedResponseBuilde
public SourcedPaginatedResponseBuilder<T> Items(IReadOnlyCollection<T> col) public SourcedPaginatedResponseBuilder<T> Items(IReadOnlyCollection<T> col)
{ {
items = col; items = col;
TotalElements = col.Count; Elems = col.Count;
ItemsFunc = (i) => Task.FromResult(items.Skip(i * ItemsPerPage).Take(ItemsPerPage)); ItemsFunc = (i) => Task.FromResult(items.Skip(i * ItemsPerPage).Take(ItemsPerPage));
return this; return this;
} }
public SourcedPaginatedResponseBuilder<T> TotalElements(int i)
{
Elems = i;
return this;
}
public SourcedPaginatedResponseBuilder<T> PageItems(Func<int, Task<IEnumerable<T>>> func) public SourcedPaginatedResponseBuilder<T> PageItems(Func<int, Task<IEnumerable<T>>> func)
{ {
ItemsFunc = func; ItemsFunc = func;

View File

@@ -10,7 +10,12 @@ public static class UserExtensions
// This method is only used for the xp card // This method is only used for the xp card
public static Uri? RealAvatarUrl(this DiscordUser usr) public static Uri? RealAvatarUrl(this DiscordUser usr)
=> Uri.TryCreate(CDN.GetDefaultUserAvatarUrl(usr.UserId), UriKind.Absolute, out var uri) {
if (!string.IsNullOrWhiteSpace(usr.AvatarId))
return new Uri(CDN.GetUserAvatarUrl(usr.UserId, usr.AvatarId, 128, ImageFormat.Png));
return Uri.TryCreate(CDN.GetDefaultUserAvatarUrl(usr.UserId), UriKind.Absolute, out var uri)
? uri ? uri
: null; : null;
} }
}