diff --git a/Lieb/Data/DiscordService.cs b/Lieb/Data/DiscordService.cs index 193f6e3..46ff3d3 100644 --- a/Lieb/Data/DiscordService.cs +++ b/Lieb/Data/DiscordService.cs @@ -111,21 +111,27 @@ namespace Lieb.Data return new List(); } - public async Task SendUserReminder(RaidReminder reminder) + public async Task SendUserReminder(RaidReminder reminder, Raid raid) + { + if (await SendMessageToRaidUsers(reminder.Message, raid)) + { + using var context = _contextFactory.CreateDbContext(); + reminder.Sent = true; + context.Update(reminder); + await context.SaveChangesAsync(); + } + } + + + public async Task SendMessageToRaidUsers(string message, Raid raid) { try { - using var context = _contextFactory.CreateDbContext(); var httpClient = _httpClientFactory.CreateClient(Constants.HttpClientName); - Raid raid = context.Raids - .Include(r => r.SignUps) - .ThenInclude(s => s.LiebUser) - .FirstOrDefault(r => r.RaidId == reminder.RaidId); + if(raid == null) return false; - if(raid == null) return; - - ApiUserReminder apiReminder = ConvertUserReminder(reminder, raid); + ApiUserReminder apiReminder = ConvertUserReminder(message, raid); var raidItemJson = new StringContent( JsonSerializer.Serialize(apiReminder), @@ -134,14 +140,10 @@ namespace Lieb.Data var httpResponseMessage = await httpClient.PostAsync("raid/SendUserReminder", raidItemJson); - if (httpResponseMessage.IsSuccessStatusCode) - { - reminder.Sent = true; - context.Update(reminder); - await context.SaveChangesAsync(); - } + return httpResponseMessage.IsSuccessStatusCode; } catch {} + return false; } public async Task SendChannelReminder(RaidReminder reminder) @@ -256,11 +258,11 @@ namespace Lieb.Data return apiMessages; } - private ApiUserReminder ConvertUserReminder(RaidReminder reminder, Raid raid) + private ApiUserReminder ConvertUserReminder(string message, Raid raid) { ApiUserReminder apiReminder = new ApiUserReminder() { - Message = reminder.Message + Message = message }; apiReminder.UserIds = new List(); foreach(RaidSignUp signUp in raid.SignUps) diff --git a/Lieb/Data/RaidService.cs b/Lieb/Data/RaidService.cs index 0f9a88c..0b425c8 100644 --- a/Lieb/Data/RaidService.cs +++ b/Lieb/Data/RaidService.cs @@ -96,6 +96,10 @@ namespace Lieb.Data context.Raids.Remove(raid); await context.SaveChangesAsync(); await _discordService.DeleteRaidMessages(raid); + if(raid.EndTimeUTC > DateTimeOffset.UtcNow) + { + await _discordService.SendMessageToRaidUsers($"Raid \"{raid.Title}\": was deleted.", raid); + } } public async Task SignUp(int raidId, ulong liebUserId, int guildWars2AccountId, int plannedRoleId, SignUpType signUpType) @@ -415,13 +419,13 @@ namespace Lieb.Data .Where(r => !r.Sent) .ToList(); - DateTimeOffset now = DateTimeOffset.UtcNow; - foreach(RaidReminder reminder in reminders.Where(r => r.ReminderTime < now)) + DateTimeOffset utcNow = DateTimeOffset.UtcNow; + foreach(RaidReminder reminder in reminders.Where(r => r.ReminderTimeUTC < utcNow)) { switch(reminder.Type) { case RaidReminder.ReminderType.User: - await _discordService.SendUserReminder(reminder); + await _discordService.SendUserReminder(reminder, reminder.Raid); break; case RaidReminder.ReminderType.Channel: await _discordService.SendChannelReminder(reminder); diff --git a/Lieb/Data/RaidTemplateService.cs b/Lieb/Data/RaidTemplateService.cs index 0f020e3..d0af50b 100644 --- a/Lieb/Data/RaidTemplateService.cs +++ b/Lieb/Data/RaidTemplateService.cs @@ -83,6 +83,10 @@ namespace Lieb.Data template.StartTime = template.StartTime.AddDays(template.Interval); template.EndTime = template.EndTime.AddDays(template.Interval); template.FreeForAllTime = template.FreeForAllTime.AddDays(template.Interval); + foreach(RaidReminder reminder in template.Reminders) + { + reminder.ReminderTimeUTC = reminder.ReminderTimeUTC.AddDays(template.Interval); + } } } } diff --git a/Lieb/Models/GuildWars2/Raid/RaidBase.cs b/Lieb/Models/GuildWars2/Raid/RaidBase.cs index 2156414..35772d7 100644 --- a/Lieb/Models/GuildWars2/Raid/RaidBase.cs +++ b/Lieb/Models/GuildWars2/Raid/RaidBase.cs @@ -70,7 +70,7 @@ namespace Lieb.Models.GuildWars2.Raid { DiscordServerId = reminder.DiscordServerId, DiscordChannelId = reminder.DiscordChannelId, - ReminderTime = reminder.ReminderTime, + ReminderTimeUTC = reminder.ReminderTimeUTC, Message = reminder.Message, Sent = reminder.Sent, Type = reminder.Type, @@ -82,7 +82,6 @@ namespace Lieb.Models.GuildWars2.Raid this.DiscordRaidMessages.Add(new DiscordRaidMessage() { RaidId = message.RaidId, - DiscordMessageId = message.DiscordMessageId, DiscordChannelId = message.DiscordChannelId, DiscordGuildId = message.DiscordGuildId }); diff --git a/Lieb/Models/GuildWars2/Raid/RaidReminder.cs b/Lieb/Models/GuildWars2/Raid/RaidReminder.cs index 072b831..f55437c 100644 --- a/Lieb/Models/GuildWars2/Raid/RaidReminder.cs +++ b/Lieb/Models/GuildWars2/Raid/RaidReminder.cs @@ -21,7 +21,7 @@ namespace Lieb.Models.GuildWars2.Raid public string Message { get; set; } = string.Empty; [Required] - public DateTimeOffset ReminderTime { get; set; } = DateTime.Now; + public DateTimeOffset ReminderTimeUTC { get; set; } = DateTime.Now; public ulong DiscordServerId { get; set; }