From c896a0cdb8fa598a6853ee6f679c13c46dc96c0a Mon Sep 17 00:00:00 2001 From: Kwoth Date: Sun, 9 Oct 2022 16:24:52 +0200 Subject: [PATCH] Added better error messages to .clubapply --- src/NadekoBot/Modules/Xp/Club/Club.cs | 12 ++++++++--- src/NadekoBot/Modules/Xp/Club/ClubService.cs | 21 +++++++++++-------- src/NadekoBot/Modules/Xp/Club/IClubService.cs | 11 +++++++++- .../strings/responses/responses.en-US.json | 4 +++- 4 files changed, 34 insertions(+), 14 deletions(-) diff --git a/src/NadekoBot/Modules/Xp/Club/Club.cs b/src/NadekoBot/Modules/Xp/Club/Club.cs index a261caedc..507b8e8a9 100644 --- a/src/NadekoBot/Modules/Xp/Club/Club.cs +++ b/src/NadekoBot/Modules/Xp/Club/Club.cs @@ -231,10 +231,16 @@ public partial class Xp return; } - if (_service.ApplyToClub(ctx.User, club)) + var result = _service.ApplyToClub(ctx.User, club); + if (result == ClubApplyResult.Success) await ReplyConfirmLocalizedAsync(strs.club_applied(Format.Bold(club.ToString()))); - else - await ReplyErrorLocalizedAsync(strs.club_apply_error); + else if (result == ClubApplyResult.Banned) + await ReplyErrorLocalizedAsync(strs.club_join_banned); + else if (result == ClubApplyResult.InsufficientLevel) + await ReplyErrorLocalizedAsync(strs.club_insuff_lvl); + else if (result == ClubApplyResult.AlreadyInAClub) + await ReplyErrorLocalizedAsync(strs.club_already_in); + } [Cmd] diff --git a/src/NadekoBot/Modules/Xp/Club/ClubService.cs b/src/NadekoBot/Modules/Xp/Club/ClubService.cs index 41d430099..bbad9692d 100644 --- a/src/NadekoBot/Modules/Xp/Club/ClubService.cs +++ b/src/NadekoBot/Modules/Xp/Club/ClubService.cs @@ -118,18 +118,22 @@ public class ClubService : INService, IClubService return club is not null; } - public bool ApplyToClub(IUser user, ClubInfo club) + public ClubApplyResult ApplyToClub(IUser user, ClubInfo club) { using var uow = _db.GetDbContext(); var du = uow.GetOrCreateUser(user); uow.SaveChanges(); - if (du.Club is not null - || club.Bans.Any(x => x.UserId == du.Id) - || club.Applicants.Any(x => x.UserId == du.Id)) - //user banned or a member of a club, or already applied, - // or doesn't min minumum level requirement, can't apply - return false; + //user banned or a member of a club, or already applied, + // or doesn't min minumum level requirement, can't apply + if (du.Club is not null) + return ClubApplyResult.AlreadyInAClub; + + if (club.Bans.Any(x => x.UserId == du.Id)) + return ClubApplyResult.Banned; + + if (club.Applicants.Any(x => x.UserId == du.Id)) + return ClubApplyResult.InsufficientLevel; var app = new ClubApplicants { @@ -138,9 +142,8 @@ public class ClubService : INService, IClubService }; uow.Set().Add(app); - uow.SaveChanges(); - return true; + return ClubApplyResult.Success; } public bool AcceptApplication(ulong clubOwnerUserId, string userName, out DiscordUser discordUser) diff --git a/src/NadekoBot/Modules/Xp/Club/IClubService.cs b/src/NadekoBot/Modules/Xp/Club/IClubService.cs index 51ce19669..d5ac31152 100644 --- a/src/NadekoBot/Modules/Xp/Club/IClubService.cs +++ b/src/NadekoBot/Modules/Xp/Club/IClubService.cs @@ -10,7 +10,7 @@ public interface IClubService ClubInfo? GetClubByMember(IUser user); Task SetClubIconAsync(ulong ownerUserId, string? url); bool GetClubByName(string clubName, out ClubInfo club); - bool ApplyToClub(IUser user, ClubInfo club); + ClubApplyResult ApplyToClub(IUser user, ClubInfo club); bool AcceptApplication(ulong clubOwnerUserId, string userName, out DiscordUser discordUser); ClubInfo? GetClubWithBansAndApplications(ulong ownerUserId); bool LeaveClub(IUser user); @@ -20,4 +20,13 @@ public interface IClubService bool UnBan(ulong ownerUserId, string userName, out ClubInfo club); bool Kick(ulong kickerId, string userName, out ClubInfo club); List GetClubLeaderboardPage(int page); +} + +public enum ClubApplyResult +{ + Success, + + AlreadyInAClub, + Banned, + InsufficientLevel } \ No newline at end of file diff --git a/src/NadekoBot/data/strings/responses/responses.en-US.json b/src/NadekoBot/data/strings/responses/responses.en-US.json index 9cbf7a90e..1d3766df5 100644 --- a/src/NadekoBot/data/strings/responses/responses.en-US.json +++ b/src/NadekoBot/data/strings/responses/responses.en-US.json @@ -837,13 +837,15 @@ "server_leaderboard": "Server XP Leaderboard", "global_leaderboard": "Global XP Leaderboard", "modified": "Modified server XP of the user {0} by {1}", + "club_insuff_lvl": "You're insufficient level to join that club.", + "club_join_banned": "You're banned from that club.", + "club_already_in": "You are already a member of a club.", "club_create_error_name": "Failed creating the club. A club with that name already exists.", "club_create_error": "Failed creating the club. Make sure you're above level 5 and not a member of a club already.", "club_name_too_long": "Club name is too long.", "club_created": "Club {0} successfully created!", "club_not_exists": "That club doesn't exist.", "club_applied": "You've applied for membership in {0} club.", - "club_apply_error": "Error applying. You are either already a member of the club, or you don't meet the minimum level requirement, or you've been banned from this one.", "club_accepted": "Accepted user {0} to the club.", "club_accept_error": "User not found", "club_left": "You've left the club.",