mirror of
https://gitlab.com/Kwoth/nadekobot.git
synced 2025-09-10 17:28:27 -04:00
Clubleave errors clarified. Moved enum results to their own files
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
10
src/NadekoBot/Modules/Xp/Club/ClubBanResult.cs
Normal file
10
src/NadekoBot/Modules/Xp/Club/ClubBanResult.cs
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
namespace NadekoBot.Modules.Xp.Services;
|
||||||
|
|
||||||
|
public enum ClubBanResult
|
||||||
|
{
|
||||||
|
Success,
|
||||||
|
NotOwnerOrAdmin,
|
||||||
|
WrongUser,
|
||||||
|
Unbannable,
|
||||||
|
|
||||||
|
}
|
8
src/NadekoBot/Modules/Xp/Club/ClubLeaveResult.cs
Normal file
8
src/NadekoBot/Modules/Xp/Club/ClubLeaveResult.cs
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
namespace NadekoBot.Modules.Xp.Services;
|
||||||
|
|
||||||
|
public enum ClubLeaveResult
|
||||||
|
{
|
||||||
|
Success,
|
||||||
|
OwnerCantLeave,
|
||||||
|
NotInAClub
|
||||||
|
}
|
@@ -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,
|
|
||||||
|
|
||||||
}
|
}
|
8
src/NadekoBot/Modules/Xp/Club/ClubUnbanResult.cs
Normal file
8
src/NadekoBot/Modules/Xp/Club/ClubUnbanResult.cs
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
namespace NadekoBot.Modules.Xp.Services;
|
||||||
|
|
||||||
|
public enum ClubUnbanResult
|
||||||
|
{
|
||||||
|
Success,
|
||||||
|
NotOwnerOrAdmin,
|
||||||
|
WrongUser
|
||||||
|
}
|
@@ -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);
|
||||||
|
@@ -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.",
|
||||||
|
Reference in New Issue
Block a user