Added group reminder

This commit is contained in:
Sarah Faey 2022-12-08 23:27:26 +01:00
parent 83f9b2d0b8
commit 64ce169094
12 changed files with 853 additions and 45 deletions

View file

@ -148,6 +148,7 @@ namespace Lieb.Data
return new List<DiscordServer>();
}
#region UserReminder
public async Task SendUserReminder(RaidReminder reminder, Raid raid)
{
if (await SendMessageToRaidUsers(reminder.Message, raid))
@ -183,6 +184,27 @@ namespace Lieb.Data
return false;
}
public static ApiUserReminder ConvertUserReminder(string message, Raid raid)
{
ApiUserReminder apiReminder = new ApiUserReminder()
{
Message = $"{raid.Title}: {message}"
};
apiReminder.UserIds = new List<ulong>();
HashSet<ulong> userIds = new HashSet<ulong>();
foreach(RaidSignUp signUp in raid.SignUps)
{
if(signUp.LiebUserId.HasValue)
{
userIds.Add(signUp.LiebUserId.Value);
}
}
apiReminder.UserIds = userIds.ToList();
return apiReminder;
}
#endregion UserReminder
#region ChannelReminder
public async Task SendChannelReminder(RaidReminder reminder, string raidTitle)
{
if (await SendChannelMessage(reminder.DiscordServerId, reminder.DiscordChannelId, reminder.Message, raidTitle))
@ -215,6 +237,63 @@ namespace Lieb.Data
return false;
}
public static ApiChannelReminder ConvertChannelReminder(ulong discordServerId, ulong discordChannelId, string message, string raidTitle)
{
return new ApiChannelReminder()
{
DiscordServerId = discordServerId,
DiscordChannelId = discordChannelId,
Message = $"{raidTitle}: {message}"
};
}
#endregion ChannelReminder
#region GroupReminder
public async Task SendGroupReminder(RaidReminder reminder, string raidTitle)
{
using var context = _contextFactory.CreateDbContext();
HashSet<ulong> groupMembers = context.LiebUsers.Where(u => u.RoleAssignments.Where(r => r.LiebRole.LiebRoleId == reminder.RoleId).Any()).Select(u => u.Id).ToHashSet();
if (await SendMessageToGroup(reminder.Message, raidTitle, groupMembers))
{
reminder.Sent = true;
context.Update(reminder);
await context.SaveChangesAsync();
}
}
public async Task<bool> SendMessageToGroup(string message, string raidTitle, HashSet<ulong> userIds)
{
try
{
var httpClient = _httpClientFactory.CreateClient(Constants.HttpClientName);
ApiUserReminder apiReminder = ConvertGroupReminder(message, raidTitle, userIds);
var raidItemJson = new StringContent(
JsonSerializer.Serialize(apiReminder),
Encoding.UTF8,
Application.Json);
var httpResponseMessage = await httpClient.PostAsync("raid/SendUserReminder", raidItemJson);
return httpResponseMessage.IsSuccessStatusCode;
}
catch {}
return false;
}
public static ApiUserReminder ConvertGroupReminder(string message, string raidTitle, HashSet<ulong> groupIds)
{
ApiUserReminder apiReminder = new ApiUserReminder()
{
Message = $"{raidTitle}: {message}"
};
apiReminder.UserIds = groupIds.ToList();
return apiReminder;
}
#endregion GroupReminder
private async Task UpdateDiscordMessages(IEnumerable<ApiRaid.DiscordMessage> messages, Raid raid)
{
foreach(ApiRaid.DiscordMessage message in messages)
@ -302,35 +381,6 @@ namespace Lieb.Data
return apiMessages;
}
public static ApiUserReminder ConvertUserReminder(string message, Raid raid)
{
ApiUserReminder apiReminder = new ApiUserReminder()
{
Message = $"{raid.Title}: {message}"
};
apiReminder.UserIds = new List<ulong>();
HashSet<ulong> userIds = new HashSet<ulong>();
foreach(RaidSignUp signUp in raid.SignUps)
{
if(signUp.LiebUserId.HasValue)
{
userIds.Add(signUp.LiebUserId.Value);
}
}
apiReminder.UserIds = userIds.ToList();
return apiReminder;
}
public static ApiChannelReminder ConvertChannelReminder(ulong discordServerId, ulong discordChannelId, string message, string raidTitle)
{
return new ApiChannelReminder()
{
DiscordServerId = discordServerId,
DiscordChannelId = discordChannelId,
Message = $"{raidTitle}: {message}"
};
}
public async Task RenameUser(ulong userId, string name, string account)
{
try

View file

@ -518,6 +518,9 @@ namespace Lieb.Data
case RaidReminder.ReminderType.Channel:
await _discordService.SendChannelReminder(reminder, raid.Title);
break;
case RaidReminder.ReminderType.Group:
await _discordService.SendGroupReminder(reminder, raid.Title);
break;
}
}
}

View file

@ -235,6 +235,16 @@ namespace Lieb.Data
.ToList();
}
public List<LiebRole> GetUserRoles(ulong userId)
{
using var context = _contextFactory.CreateDbContext();
return context.LiebRoles
.Include(u => u.RoleAssignments)
.ThenInclude(r => r.LiebUser)
.Where(r => r.RoleAssignments.Where(a => a.LiebUserId == userId).Any())
.ToList();
}
public async Task AddRole(LiebRole role)
{
using var context = _contextFactory.CreateDbContext();