Clubleave errors clarified. Moved enum results to their own files

This commit is contained in:
Kwoth
2022-10-13 22:27:12 +02:00
parent bf817a1436
commit d079e684bd
7 changed files with 77 additions and 60 deletions

View File

@@ -38,7 +38,7 @@ public partial class Xp
public async Task ClubAdmin([Leftover] IUser toAdmin) public async Task ClubAdmin([Leftover] IUser toAdmin)
{ {
var admin = await _service.ToggleAdminAsync(ctx.User, toAdmin); var admin = await _service.ToggleAdminAsync(ctx.User, toAdmin);
if (admin is null) if (admin is null)
await ReplyErrorLocalizedAsync(strs.club_admin_error); await ReplyErrorLocalizedAsync(strs.club_admin_error);
else if (admin is true) else if (admin is true)
@@ -46,6 +46,7 @@ public partial class Xp
else else
await ReplyConfirmLocalizedAsync(strs.club_admin_remove(Format.Bold(toAdmin.ToString()))); await ReplyConfirmLocalizedAsync(strs.club_admin_remove(Format.Bold(toAdmin.ToString())));
} }
[Cmd] [Cmd]
public async Task ClubCreate([Leftover] string clubName) public async Task ClubCreate([Leftover] string clubName)
{ {
@@ -62,7 +63,7 @@ public partial class Xp
await ReplyErrorLocalizedAsync(strs.club_create_error_name); await ReplyErrorLocalizedAsync(strs.club_create_error_name);
return; return;
} }
if (succ is false) if (succ is false)
{ {
await ReplyErrorLocalizedAsync(strs.club_create_error); await ReplyErrorLocalizedAsync(strs.club_create_error);
@@ -102,27 +103,27 @@ public partial class Xp
page => page =>
{ {
var embed = _eb.Create() var embed = _eb.Create()
.WithOkColor() .WithOkColor()
.WithTitle($"{club}") .WithTitle($"{club}")
.WithDescription(GetText(strs.level_x(lvl.Level + $" ({club.Xp} xp)"))) .WithDescription(GetText(strs.level_x(lvl.Level + $" ({club.Xp} xp)")))
.AddField(GetText(strs.desc), .AddField(GetText(strs.desc),
string.IsNullOrWhiteSpace(club.Description) ? "-" : club.Description) string.IsNullOrWhiteSpace(club.Description) ? "-" : club.Description)
.AddField(GetText(strs.owner), club.Owner.ToString(), true) .AddField(GetText(strs.owner), club.Owner.ToString(), true)
// .AddField(GetText(strs.level_req), club.MinimumLevelReq.ToString(), true) // .AddField(GetText(strs.level_req), club.MinimumLevelReq.ToString(), true)
.AddField(GetText(strs.members), .AddField(GetText(strs.members),
string.Join("\n", string.Join("\n",
users.Skip(page * 10) users.Skip(page * 10)
.Take(10) .Take(10)
.Select(x => .Select(x =>
{ {
var l = new LevelStats(x.TotalXp); var l = new LevelStats(x.TotalXp);
var lvlStr = Format.Bold($" ⟪{l.Level}⟫"); var lvlStr = Format.Bold($" ⟪{l.Level}⟫");
if (club.OwnerId == x.Id) if (club.OwnerId == x.Id)
return x + "🌟" + lvlStr; return x + "🌟" + lvlStr;
if (x.IsClubAdmin) if (x.IsClubAdmin)
return x + "⭐" + lvlStr; return x + "⭐" + lvlStr;
return x + lvlStr; return x + lvlStr;
}))); })));
if (Uri.IsWellFormedUriString(club.ImageUrl, UriKind.Absolute)) if (Uri.IsWellFormedUriString(club.ImageUrl, UriKind.Absolute))
return embed.WithThumbnailUrl(club.ImageUrl); return embed.WithThumbnailUrl(club.ImageUrl);
@@ -187,9 +188,9 @@ public partial class Xp
.Select(x => x.ToString())); .Select(x => x.ToString()));
return _eb.Create() return _eb.Create()
.WithTitle(GetText(strs.club_bans_for(club.ToString()))) .WithTitle(GetText(strs.club_bans_for(club.ToString())))
.WithDescription(toShow) .WithDescription(toShow)
.WithOkColor(); .WithOkColor();
}, },
bans.Length, bans.Length,
10); 10);
@@ -213,9 +214,9 @@ public partial class Xp
var toShow = string.Join("\n", apps.Skip(page * 10).Take(10).Select(x => x.ToString())); var toShow = string.Join("\n", apps.Skip(page * 10).Take(10).Select(x => x.ToString()));
return _eb.Create() return _eb.Create()
.WithTitle(GetText(strs.club_apps_for(club.ToString()))) .WithTitle(GetText(strs.club_apps_for(club.ToString())))
.WithDescription(toShow) .WithDescription(toShow)
.WithOkColor(); .WithOkColor();
}, },
apps.Length, apps.Length,
10); 10);
@@ -242,7 +243,6 @@ public partial class Xp
await ReplyErrorLocalizedAsync(strs.club_insuff_lvl); await ReplyErrorLocalizedAsync(strs.club_insuff_lvl);
else if (result == ClubApplyResult.AlreadyInAClub) else if (result == ClubApplyResult.AlreadyInAClub)
await ReplyErrorLocalizedAsync(strs.club_already_in); await ReplyErrorLocalizedAsync(strs.club_already_in);
} }
[Cmd] [Cmd]
@@ -263,10 +263,14 @@ public partial class Xp
[Cmd] [Cmd]
public async Task Clubleave() public async Task Clubleave()
{ {
if (_service.LeaveClub(ctx.User)) var res = _service.LeaveClub(ctx.User);
if (res == ClubLeaveResult.Success)
await ReplyConfirmLocalizedAsync(strs.club_left); await ReplyConfirmLocalizedAsync(strs.club_left);
else if (res == ClubLeaveResult.NotInAClub)
await ReplyErrorLocalizedAsync(strs.club_not_in_a_club);
else else
await ReplyErrorLocalizedAsync(strs.club_not_in_club); await ReplyErrorLocalizedAsync(strs.club_owner_cant_leave);
} }
[Cmd] [Cmd]
@@ -322,7 +326,7 @@ public partial class Xp
public Task ClubUnBan([Leftover] string userName) public Task ClubUnBan([Leftover] string userName)
{ {
var result = _service.UnBan(ctx.User.Id, userName, out var club); var result = _service.UnBan(ctx.User.Id, userName, out var club);
if (result == ClubUnbanResult.Success) if (result == ClubUnbanResult.Success)
{ {
return ReplyConfirmLocalizedAsync(strs.club_user_unbanned(Format.Bold(userName), return ReplyConfirmLocalizedAsync(strs.club_user_unbanned(Format.Bold(userName),
@@ -345,12 +349,12 @@ public partial class Xp
desc = string.IsNullOrWhiteSpace(desc) desc = string.IsNullOrWhiteSpace(desc)
? "-" ? "-"
: desc; : desc;
var eb = _eb.Create(ctx) var eb = _eb.Create(ctx)
.WithAuthor(ctx.User) .WithAuthor(ctx.User)
.WithTitle(GetText(strs.club_desc_update)) .WithTitle(GetText(strs.club_desc_update))
.WithOkColor() .WithOkColor()
.WithDescription(desc); .WithDescription(desc);
await ctx.Channel.EmbedAsync(eb); await ctx.Channel.EmbedAsync(eb);
} }

View File

@@ -0,0 +1,10 @@
namespace NadekoBot.Modules.Xp.Services;
public enum ClubBanResult
{
Success,
NotOwnerOrAdmin,
WrongUser,
Unbannable,
}

View File

@@ -0,0 +1,8 @@
namespace NadekoBot.Modules.Xp.Services;
public enum ClubLeaveResult
{
Success,
OwnerCantLeave,
NotInAClub
}

View File

@@ -178,17 +178,19 @@ public class ClubService : INService, IClubService
return uow.Clubs.GetByOwnerOrAdmin(ownerUserId); return uow.Clubs.GetByOwnerOrAdmin(ownerUserId);
} }
public bool LeaveClub(IUser user) public ClubLeaveResult LeaveClub(IUser user)
{ {
using var uow = _db.GetDbContext(); using var uow = _db.GetDbContext();
var du = uow.GetOrCreateUser(user, x => x.Include(u => u.Club)); var du = uow.GetOrCreateUser(user, x => x.Include(u => u.Club));
if (du.Club is null || du.Club.OwnerId == du.Id) if (du.Club is null)
return false; return ClubLeaveResult.NotInAClub;
if (du.Club.OwnerId == du.Id)
return ClubLeaveResult.OwnerCantLeave;
du.Club = null; du.Club = null;
du.IsClubAdmin = false; du.IsClubAdmin = false;
uow.SaveChanges(); uow.SaveChanges();
return true; return ClubLeaveResult.Success;
} }
public bool SetDescription(ulong userId, string desc) public bool SetDescription(ulong userId, string desc)
@@ -298,20 +300,4 @@ public class ClubService : INService, IClubService
using var uow = _db.GetDbContext(); using var uow = _db.GetDbContext();
return uow.Clubs.GetClubLeaderboardPage(page); return uow.Clubs.GetClubLeaderboardPage(page);
} }
}
public enum ClubUnbanResult
{
Success,
NotOwnerOrAdmin,
WrongUser
}
public enum ClubBanResult
{
Success,
NotOwnerOrAdmin,
WrongUser,
Unbannable,
} }

View File

@@ -0,0 +1,8 @@
namespace NadekoBot.Modules.Xp.Services;
public enum ClubUnbanResult
{
Success,
NotOwnerOrAdmin,
WrongUser
}

View File

@@ -13,7 +13,7 @@ public interface IClubService
ClubApplyResult ApplyToClub(IUser user, ClubInfo club); ClubApplyResult ApplyToClub(IUser user, ClubInfo club);
bool AcceptApplication(ulong clubOwnerUserId, string userName, out DiscordUser discordUser); bool AcceptApplication(ulong clubOwnerUserId, string userName, out DiscordUser discordUser);
ClubInfo? GetClubWithBansAndApplications(ulong ownerUserId); ClubInfo? GetClubWithBansAndApplications(ulong ownerUserId);
bool LeaveClub(IUser user); ClubLeaveResult LeaveClub(IUser user);
bool SetDescription(ulong userId, string? desc); bool SetDescription(ulong userId, string? desc);
bool Disband(ulong userId, out ClubInfo club); bool Disband(ulong userId, out ClubInfo club);
ClubBanResult Ban(ulong bannerId, string userName, out ClubInfo club); ClubBanResult Ban(ulong bannerId, string userName, out ClubInfo club);

View File

@@ -849,7 +849,8 @@
"club_accepted": "Accepted user {0} to the club.", "club_accepted": "Accepted user {0} to the club.",
"club_accept_error": "User not found", "club_accept_error": "User not found",
"club_left": "You've left the club.", "club_left": "You've left the club.",
"club_not_in_club": "You are not in a club, or you're trying to leave the club you're the owner of.", "club_not_in_a_club": "You are not in a club.",
"club_owner_cant_leave": "Club owner can't leave the club - you must either transfer ownership or disband the club.",
"club_user_kick": "User {0} kicked from {1} club.", "club_user_kick": "User {0} kicked from {1} club.",
"club_user_not_in_club": "{0} is not in a club.", "club_user_not_in_club": "{0} is not in a club.",
"club_user_kick_fail": "Error kicking. You're either not the club owner, or that user is not in your club.", "club_user_kick_fail": "Error kicking. You're either not the club owner, or that user is not in your club.",