diff --git a/DiscordBot/CommandHandlers/HandlerFunctions.cs b/DiscordBot/CommandHandlers/HandlerFunctions.cs index 9a54833..af7fd09 100644 --- a/DiscordBot/CommandHandlers/HandlerFunctions.cs +++ b/DiscordBot/CommandHandlers/HandlerFunctions.cs @@ -103,8 +103,14 @@ namespace DiscordBot.CommandHandlers if(accounts.Count == 1) { ApiGuildWars2Account account = accounts.First(); - await SignUp(buttonType, raidId, roleId, userIdToSignUp, account.GuildWars2AccountId, signedUpByUserId); - await UpdateOrRespond(component, "successfully signed up", null, roleMessageExists); + if(await SignUp(buttonType, raidId, roleId, userIdToSignUp, account.GuildWars2AccountId, signedUpByUserId)) + { + await UpdateOrRespond(component, "successfully signed up", null, roleMessageExists); + } + else + { + await UpdateOrRespond(component, "signing up failed", null, roleMessageExists); + } } else if(accounts.Count > 1) { @@ -116,7 +122,7 @@ namespace DiscordBot.CommandHandlers } } - public async Task SignUp(string buttonType, int raidId, int roleId, ulong userIdToSignUp, int gw2AccountId, ulong signedUpByUserId) + public async Task SignUp(string buttonType, int raidId, int roleId, ulong userIdToSignUp, int gw2AccountId, ulong signedUpByUserId) { ApiSignUp signUp = new ApiSignUp() { @@ -130,17 +136,19 @@ namespace DiscordBot.CommandHandlers switch(buttonType) { case Constants.ComponentIds.SIGN_UP_BUTTON: - await _httpService.SignUp(signUp); + return await _httpService.SignUp(signUp); break; case Constants.ComponentIds.MAYBE_BUTTON: - await _httpService.SignUpMaybe(signUp); + return await _httpService.SignUpMaybe(signUp); break; case Constants.ComponentIds.BACKUP_BUTTON: - await _httpService.SignUpBackup(signUp); + return await _httpService.SignUpBackup(signUp); break; case Constants.ComponentIds.FLEX_BUTTON: - await _httpService.SignUpFlex(signUp); + return await _httpService.SignUpFlex(signUp); break; + default: + return false; } } diff --git a/DiscordBot/CommandHandlers/ModalHandler.cs b/DiscordBot/CommandHandlers/ModalHandler.cs index 88b8788..5a5d653 100644 --- a/DiscordBot/CommandHandlers/ModalHandler.cs +++ b/DiscordBot/CommandHandlers/ModalHandler.cs @@ -54,8 +54,14 @@ namespace DiscordBot.CommandHandlers signedUpByUserId = modal.User.Id, roleId = modalParameters.RoleId }; - await _httpService.SignUp(signUpExternal); - await modal.RespondAsync($"signed up {userName}", ephemeral: true); + if(await _httpService.SignUp(signUpExternal)) + { + await modal.RespondAsync($"signed up {userName}", ephemeral: true); + } + else + { + await modal.RespondAsync($"signing up failed", ephemeral: true); + } break; } } diff --git a/DiscordBot/CommandHandlers/SelectMenuHandler.cs b/DiscordBot/CommandHandlers/SelectMenuHandler.cs index b1eba7e..82afcc1 100644 --- a/DiscordBot/CommandHandlers/SelectMenuHandler.cs +++ b/DiscordBot/CommandHandlers/SelectMenuHandler.cs @@ -36,12 +36,22 @@ namespace DiscordBot.CommandHandlers case Constants.ComponentIds.ACCOUNT_SELECT_DROP_DOWN: AccountSelectionMessage.Parameters accountParameters = AccountSelectionMessage.ParseId(component.Data.CustomId); int accountId = int.Parse(component.Data.Values.First()); - await _handlerFunctions.SignUp(accountParameters.ButtonType, accountParameters.RaidId, accountParameters.RoleId, accountParameters.UserIdToSignUp, accountId, accountParameters.SignedUpByUserId); - await component.UpdateAsync(x => + if(await _handlerFunctions.SignUp(accountParameters.ButtonType, accountParameters.RaidId, accountParameters.RoleId, accountParameters.UserIdToSignUp, accountId, accountParameters.SignedUpByUserId)) { - x.Content = "successfully signed up"; - x.Components = null; - }); + await component.UpdateAsync(x => + { + x.Content = "successfully signed up"; + x.Components = null; + }); + } + else + { + await component.UpdateAsync(x => + { + x.Content = "signing up failed"; + x.Components = null; + }); + } break; } } diff --git a/DiscordBot/Services/HttpService.cs b/DiscordBot/Services/HttpService.cs index 597ed49..e691bbc 100644 --- a/DiscordBot/Services/HttpService.cs +++ b/DiscordBot/Services/HttpService.cs @@ -99,24 +99,24 @@ namespace DiscordBot.Services return new List(); } - public async Task SignUp(ApiSignUp signUp) + public async Task SignUp(ApiSignUp signUp) { - await SendSignUp(signUp, "DiscordBot/SignUp"); + return await SendSignUp(signUp, "DiscordBot/SignUp"); } - public async Task SignUpMaybe(ApiSignUp signUp) + public async Task SignUpMaybe(ApiSignUp signUp) { - await SendSignUp(signUp, "DiscordBot/SignUpMaybe"); + return await SendSignUp(signUp, "DiscordBot/SignUpMaybe"); } - public async Task SignUpBackup(ApiSignUp signUp) + public async Task SignUpBackup(ApiSignUp signUp) { - await SendSignUp(signUp, "DiscordBot/SignUpBackup"); + return await SendSignUp(signUp, "DiscordBot/SignUpBackup"); } - public async Task SignUpFlex(ApiSignUp signUp) + public async Task SignUpFlex(ApiSignUp signUp) { - await SendSignUp(signUp, "DiscordBot/SignUpFlex"); + return await SendSignUp(signUp, "DiscordBot/SignUpFlex"); } public async Task SignOff(ApiSignUp signUp) @@ -124,7 +124,7 @@ namespace DiscordBot.Services await SendSignUp(signUp, "DiscordBot/SignOff"); } - private async Task SendSignUp(ApiSignUp signUp, string requestUri) + private async Task SendSignUp(ApiSignUp signUp, string requestUri) { var httpClient = _httpClientFactory.CreateClient(Constants.HTTP_CLIENT_NAME); @@ -134,6 +134,14 @@ namespace DiscordBot.Services Application.Json); var httpResponseMessage = await httpClient.PostAsync(requestUri, raidItemJson); + if (httpResponseMessage.IsSuccessStatusCode) + { + using var contentStream = + await httpResponseMessage.Content.ReadAsStreamAsync(); + + return await JsonSerializer.DeserializeAsync(contentStream, _serializerOptions); + } + return false; } public async Task> CreateAccount(ApiRaid.Role.User user) diff --git a/Lieb/Controllers/DiscordBotController.cs b/Lieb/Controllers/DiscordBotController.cs index 3a8e608..af52036 100644 --- a/Lieb/Controllers/DiscordBotController.cs +++ b/Lieb/Controllers/DiscordBotController.cs @@ -87,67 +87,67 @@ namespace Lieb.Controllers [HttpPost] [Route("[action]")] - public async Task SignUp(ApiSignUp signUp) + public async Task SignUp(ApiSignUp signUp) { if(signUp.userId != 0) { int accountId = _userService.GetSignUpAccount(signUp.userId, signUp.raidId, signUp.gw2AccountId); - await _raidService.SignUp(signUp.raidId, signUp.userId, accountId, signUp.roleId, SignUpType.SignedUp, signUp.signedUpByUserId); + return await _raidService.SignUp(signUp.raidId, signUp.userId, accountId, signUp.roleId, SignUpType.SignedUp, signUp.signedUpByUserId); } else { - await _raidService.SignUpExternalUser(signUp.raidId, signUp.userName, signUp.roleId, SignUpType.SignedUp, signUp.signedUpByUserId); + return await _raidService.SignUpExternalUser(signUp.raidId, signUp.userName, signUp.roleId, SignUpType.SignedUp, signUp.signedUpByUserId); } } [HttpPost] [Route("[action]")] - public async Task SignUpMaybe(ApiSignUp signUp) + public async Task SignUpMaybe(ApiSignUp signUp) { if(signUp.userId != 0) { int accountId = _userService.GetSignUpAccount(signUp.userId, signUp.raidId, signUp.gw2AccountId); - await _raidService.SignUp(signUp.raidId, signUp.userId, accountId, signUp.roleId, SignUpType.Maybe, signUp.signedUpByUserId); + return await _raidService.SignUp(signUp.raidId, signUp.userId, accountId, signUp.roleId, SignUpType.Maybe, signUp.signedUpByUserId); } else { - await _raidService.SignUpExternalUser(signUp.raidId, signUp.userName, signUp.roleId, SignUpType.Maybe, signUp.signedUpByUserId); + return await _raidService.SignUpExternalUser(signUp.raidId, signUp.userName, signUp.roleId, SignUpType.Maybe, signUp.signedUpByUserId); } } [HttpPost] [Route("[action]")] - public async Task SignUpBackup(ApiSignUp signUp) + public async Task SignUpBackup(ApiSignUp signUp) { if(signUp.userId != 0) { int accountId = _userService.GetSignUpAccount(signUp.userId, signUp.raidId, signUp.gw2AccountId); - await _raidService.SignUp(signUp.raidId, signUp.userId, accountId, signUp.roleId, SignUpType.Backup, signUp.signedUpByUserId); + return await _raidService.SignUp(signUp.raidId, signUp.userId, accountId, signUp.roleId, SignUpType.Backup, signUp.signedUpByUserId); } else { - await _raidService.SignUpExternalUser(signUp.raidId, signUp.userName, signUp.roleId, SignUpType.Backup, signUp.signedUpByUserId); + return await _raidService.SignUpExternalUser(signUp.raidId, signUp.userName, signUp.roleId, SignUpType.Backup, signUp.signedUpByUserId); } } [HttpPost] [Route("[action]")] - public async Task SignUpFlex(ApiSignUp signUp) + public async Task SignUpFlex(ApiSignUp signUp) { if(signUp.userId != 0) { int accountId = _userService.GetSignUpAccount(signUp.userId, signUp.raidId, signUp.gw2AccountId); - await _raidService.SignUp(signUp.raidId, signUp.userId, accountId, signUp.roleId, SignUpType.Flex, signUp.signedUpByUserId); + return await _raidService.SignUp(signUp.raidId, signUp.userId, accountId, signUp.roleId, SignUpType.Flex, signUp.signedUpByUserId); } else { - await _raidService.SignUpExternalUser(signUp.raidId, signUp.userName, signUp.roleId, SignUpType.Flex, signUp.signedUpByUserId); + return await _raidService.SignUpExternalUser(signUp.raidId, signUp.userName, signUp.roleId, SignUpType.Flex, signUp.signedUpByUserId); } } [HttpPost] [Route("[action]")] - public async Task SignOff(ApiSignUp signUp) + public async Task SignOff(ApiSignUp signUp) { if(signUp.userId != 0) { @@ -157,6 +157,7 @@ namespace Lieb.Controllers { await _raidService.SignOffExternalUser(signUp.raidId, signUp.userName, signUp.signedUpByUserId); } + return true; } [HttpPost] diff --git a/Lieb/Data/RaidService.cs b/Lieb/Data/RaidService.cs index 8ea0ead..f97afdc 100644 --- a/Lieb/Data/RaidService.cs +++ b/Lieb/Data/RaidService.cs @@ -112,11 +112,11 @@ namespace Lieb.Data } - public async Task SignUp(int raidId, ulong liebUserId, int guildWars2AccountId, int plannedRoleId, SignUpType signUpType, ulong signedUpByUserId = 0) + public async Task SignUp(int raidId, ulong liebUserId, int guildWars2AccountId, int plannedRoleId, SignUpType signUpType, ulong signedUpByUserId = 0) { if (!IsRoleSignUpAllowed(raidId, liebUserId, plannedRoleId, signUpType, true)) { - return; + return false; } using var context = _contextFactory.CreateDbContext(); @@ -134,14 +134,19 @@ namespace Lieb.Data await context.SaveChangesAsync(); await LogSignUp(signUp, userName, signedUpByUserId); } + else + { + return false; + } await _discordService.PostRaidMessage(raidId); + return true; } - public async Task SignUpExternalUser(int raidId, string userName, int plannedRoleId, SignUpType signUpType, ulong signedUpByUserId) + public async Task SignUpExternalUser(int raidId, string userName, int plannedRoleId, SignUpType signUpType, ulong signedUpByUserId) { if (!IsRoleSignUpAllowed(raidId, ulong.MaxValue, plannedRoleId, signUpType, true)) { - return; + return false; } using var context = _contextFactory.CreateDbContext(); @@ -151,6 +156,7 @@ namespace Lieb.Data await context.SaveChangesAsync(); await LogSignUp(signUp, userName, signedUpByUserId); await _discordService.PostRaidMessage(raidId); + return true; } public async Task SignOff(int raidId, ulong liebUserId, ulong signedOffByUserId = 0)