Added SendMessageToRaidUsers

Message is sent, if furure Raid is deleted
This commit is contained in:
Sarah Faey 2022-11-14 09:12:17 +01:00
parent ed7a1905fd
commit e9b353527f
5 changed files with 32 additions and 23 deletions

View file

@ -111,21 +111,27 @@ namespace Lieb.Data
return new List<DiscordServer>(); return new List<DiscordServer>();
} }
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<bool> SendMessageToRaidUsers(string message, Raid raid)
{ {
try try
{ {
using var context = _contextFactory.CreateDbContext();
var httpClient = _httpClientFactory.CreateClient(Constants.HttpClientName); var httpClient = _httpClientFactory.CreateClient(Constants.HttpClientName);
Raid raid = context.Raids if(raid == null) return false;
.Include(r => r.SignUps)
.ThenInclude(s => s.LiebUser)
.FirstOrDefault(r => r.RaidId == reminder.RaidId);
if(raid == null) return; ApiUserReminder apiReminder = ConvertUserReminder(message, raid);
ApiUserReminder apiReminder = ConvertUserReminder(reminder, raid);
var raidItemJson = new StringContent( var raidItemJson = new StringContent(
JsonSerializer.Serialize(apiReminder), JsonSerializer.Serialize(apiReminder),
@ -134,14 +140,10 @@ namespace Lieb.Data
var httpResponseMessage = await httpClient.PostAsync("raid/SendUserReminder", raidItemJson); var httpResponseMessage = await httpClient.PostAsync("raid/SendUserReminder", raidItemJson);
if (httpResponseMessage.IsSuccessStatusCode) return httpResponseMessage.IsSuccessStatusCode;
{
reminder.Sent = true;
context.Update(reminder);
await context.SaveChangesAsync();
}
} }
catch {} catch {}
return false;
} }
public async Task SendChannelReminder(RaidReminder reminder) public async Task SendChannelReminder(RaidReminder reminder)
@ -256,11 +258,11 @@ namespace Lieb.Data
return apiMessages; return apiMessages;
} }
private ApiUserReminder ConvertUserReminder(RaidReminder reminder, Raid raid) private ApiUserReminder ConvertUserReminder(string message, Raid raid)
{ {
ApiUserReminder apiReminder = new ApiUserReminder() ApiUserReminder apiReminder = new ApiUserReminder()
{ {
Message = reminder.Message Message = message
}; };
apiReminder.UserIds = new List<ulong>(); apiReminder.UserIds = new List<ulong>();
foreach(RaidSignUp signUp in raid.SignUps) foreach(RaidSignUp signUp in raid.SignUps)

View file

@ -96,6 +96,10 @@ namespace Lieb.Data
context.Raids.Remove(raid); context.Raids.Remove(raid);
await context.SaveChangesAsync(); await context.SaveChangesAsync();
await _discordService.DeleteRaidMessages(raid); 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) 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) .Where(r => !r.Sent)
.ToList(); .ToList();
DateTimeOffset now = DateTimeOffset.UtcNow; DateTimeOffset utcNow = DateTimeOffset.UtcNow;
foreach(RaidReminder reminder in reminders.Where(r => r.ReminderTime < now)) foreach(RaidReminder reminder in reminders.Where(r => r.ReminderTimeUTC < utcNow))
{ {
switch(reminder.Type) switch(reminder.Type)
{ {
case RaidReminder.ReminderType.User: case RaidReminder.ReminderType.User:
await _discordService.SendUserReminder(reminder); await _discordService.SendUserReminder(reminder, reminder.Raid);
break; break;
case RaidReminder.ReminderType.Channel: case RaidReminder.ReminderType.Channel:
await _discordService.SendChannelReminder(reminder); await _discordService.SendChannelReminder(reminder);

View file

@ -83,6 +83,10 @@ namespace Lieb.Data
template.StartTime = template.StartTime.AddDays(template.Interval); template.StartTime = template.StartTime.AddDays(template.Interval);
template.EndTime = template.EndTime.AddDays(template.Interval); template.EndTime = template.EndTime.AddDays(template.Interval);
template.FreeForAllTime = template.FreeForAllTime.AddDays(template.Interval); template.FreeForAllTime = template.FreeForAllTime.AddDays(template.Interval);
foreach(RaidReminder reminder in template.Reminders)
{
reminder.ReminderTimeUTC = reminder.ReminderTimeUTC.AddDays(template.Interval);
}
} }
} }
} }

View file

@ -70,7 +70,7 @@ namespace Lieb.Models.GuildWars2.Raid
{ {
DiscordServerId = reminder.DiscordServerId, DiscordServerId = reminder.DiscordServerId,
DiscordChannelId = reminder.DiscordChannelId, DiscordChannelId = reminder.DiscordChannelId,
ReminderTime = reminder.ReminderTime, ReminderTimeUTC = reminder.ReminderTimeUTC,
Message = reminder.Message, Message = reminder.Message,
Sent = reminder.Sent, Sent = reminder.Sent,
Type = reminder.Type, Type = reminder.Type,
@ -82,7 +82,6 @@ namespace Lieb.Models.GuildWars2.Raid
this.DiscordRaidMessages.Add(new DiscordRaidMessage() this.DiscordRaidMessages.Add(new DiscordRaidMessage()
{ {
RaidId = message.RaidId, RaidId = message.RaidId,
DiscordMessageId = message.DiscordMessageId,
DiscordChannelId = message.DiscordChannelId, DiscordChannelId = message.DiscordChannelId,
DiscordGuildId = message.DiscordGuildId DiscordGuildId = message.DiscordGuildId
}); });

View file

@ -21,7 +21,7 @@ namespace Lieb.Models.GuildWars2.Raid
public string Message { get; set; } = string.Empty; public string Message { get; set; } = string.Empty;
[Required] [Required]
public DateTimeOffset ReminderTime { get; set; } = DateTime.Now; public DateTimeOffset ReminderTimeUTC { get; set; } = DateTime.Now;
public ulong DiscordServerId { get; set; } public ulong DiscordServerId { get; set; }