mirror of
https://gitlab.com/Kwoth/nadekobot.git
synced 2025-09-11 01:38:27 -04:00
.clubinfo performance improvement and fixed an issue with cyrillic clubs not showing up at all even with correct capitalization
This commit is contained in:
@@ -26,10 +26,17 @@ public static class ClubExtensions
|
|||||||
=> Include(clubs).FirstOrDefault(c => c.Users.Any(u => u.UserId == userId));
|
=> Include(clubs).FirstOrDefault(c => c.Users.Any(u => u.UserId == userId));
|
||||||
|
|
||||||
public static ClubInfo GetByName(this DbSet<ClubInfo> clubs, string name, int discrim)
|
public static ClubInfo GetByName(this DbSet<ClubInfo> clubs, string name, int discrim)
|
||||||
=> Include(clubs).FirstOrDefault(c => c.Name.ToUpper() == name.ToUpper() && c.Discrim == discrim);
|
=> Include(clubs)
|
||||||
|
.FirstOrDefault(c => EF.Functions.Collate(c.Name, "NOCASE") == EF.Functions.Collate(name, "NOCASE")
|
||||||
|
&& c.Discrim == discrim);
|
||||||
|
|
||||||
public static int GetNextDiscrim(this DbSet<ClubInfo> clubs, string name)
|
public static int GetNextDiscrim(this DbSet<ClubInfo> clubs, string name)
|
||||||
=> Include(clubs).Where(x => x.Name.ToUpper() == name.ToUpper()).Select(x => x.Discrim).DefaultIfEmpty().Max()
|
=> Include(clubs)
|
||||||
|
.Where(x =>
|
||||||
|
EF.Functions.Collate(x.Name, "NOCASE") == EF.Functions.Collate(name, "NOCASE"))
|
||||||
|
.Select(x => x.Discrim)
|
||||||
|
.DefaultIfEmpty()
|
||||||
|
.Max()
|
||||||
+ 1;
|
+ 1;
|
||||||
|
|
||||||
public static List<ClubInfo> GetClubLeaderboardPage(this DbSet<ClubInfo> clubs, int page)
|
public static List<ClubInfo> GetClubLeaderboardPage(this DbSet<ClubInfo> clubs, int page)
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
#nullable disable
|
#nullable disable
|
||||||
|
using NadekoBot.Db.Models;
|
||||||
using NadekoBot.Modules.Xp.Services;
|
using NadekoBot.Modules.Xp.Services;
|
||||||
|
|
||||||
namespace NadekoBot.Modules.Xp;
|
namespace NadekoBot.Modules.Xp;
|
||||||
@@ -76,37 +77,8 @@ public partial class Xp
|
|||||||
await ReplyConfirmLocalizedAsync(strs.club_icon_set);
|
await ReplyConfirmLocalizedAsync(strs.club_icon_set);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Cmd]
|
private async Task InternalClubInfoAsync(ClubInfo club)
|
||||||
[Priority(1)]
|
|
||||||
public async partial Task ClubInformation(IUser user = null)
|
|
||||||
{
|
{
|
||||||
user ??= ctx.User;
|
|
||||||
var club = _service.GetClubByMember(user);
|
|
||||||
if (club is null)
|
|
||||||
{
|
|
||||||
await ErrorLocalizedAsync(strs.club_user_not_in_club(Format.Bold(user.ToString())));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
await ClubInformation(club.ToString());
|
|
||||||
}
|
|
||||||
|
|
||||||
[Cmd]
|
|
||||||
[Priority(0)]
|
|
||||||
public async partial Task ClubInformation([Leftover] string clubName = null)
|
|
||||||
{
|
|
||||||
if (string.IsNullOrWhiteSpace(clubName))
|
|
||||||
{
|
|
||||||
await ClubInformation(ctx.User);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!_service.GetClubByName(clubName, out var club))
|
|
||||||
{
|
|
||||||
await ReplyErrorLocalizedAsync(strs.club_not_exists);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var lvl = new LevelStats(club.Xp);
|
var lvl = new LevelStats(club.Xp);
|
||||||
var users = club.Users.OrderByDescending(x =>
|
var users = club.Users.OrderByDescending(x =>
|
||||||
{
|
{
|
||||||
@@ -153,6 +125,40 @@ public partial class Xp
|
|||||||
10);
|
10);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Cmd]
|
||||||
|
[Priority(1)]
|
||||||
|
public async partial Task ClubInformation(IUser user = null)
|
||||||
|
{
|
||||||
|
user ??= ctx.User;
|
||||||
|
var club = _service.GetClubByMember(user);
|
||||||
|
if (club is null)
|
||||||
|
{
|
||||||
|
await ErrorLocalizedAsync(strs.club_user_not_in_club(Format.Bold(user.ToString())));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
await InternalClubInfoAsync(club);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Cmd]
|
||||||
|
[Priority(0)]
|
||||||
|
public async partial Task ClubInformation([Leftover] string clubName = null)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(clubName))
|
||||||
|
{
|
||||||
|
await ClubInformation(ctx.User);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!_service.GetClubByName(clubName, out var club))
|
||||||
|
{
|
||||||
|
await ReplyErrorLocalizedAsync(strs.club_not_exists);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
await InternalClubInfoAsync(club);
|
||||||
|
}
|
||||||
|
|
||||||
[Cmd]
|
[Cmd]
|
||||||
public partial Task ClubBans(int page = 1)
|
public partial Task ClubBans(int page = 1)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user