expose vanity and colors and update from bot
This commit is contained in:
Submodule LightlessAPI updated: 3c10380162...eb04433427
@@ -1,4 +1,4 @@
|
|||||||
using LightlessSyncShared.Models;
|
using LightlessSyncShared.Models;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using LightlessSyncServer.Utils;
|
using LightlessSyncServer.Utils;
|
||||||
using LightlessSyncShared.Utils;
|
using LightlessSyncShared.Utils;
|
||||||
@@ -325,7 +325,10 @@ public partial class LightlessHub
|
|||||||
OwnPermissions = ownperm,
|
OwnPermissions = ownperm,
|
||||||
OtherPermissions = otherperm,
|
OtherPermissions = otherperm,
|
||||||
OtherUserIsAdmin = u.IsAdmin,
|
OtherUserIsAdmin = u.IsAdmin,
|
||||||
OtherUserIsModerator = u.IsModerator
|
OtherUserIsModerator = u.IsModerator,
|
||||||
|
OtherUserHasVanity = u.HasVanity,
|
||||||
|
OtherUserTextColorHex = u.TextColorHex,
|
||||||
|
OtherUserTextGlowColorHex = u.TextGlowColorHex
|
||||||
};
|
};
|
||||||
|
|
||||||
var resultList = await result.AsNoTracking().ToListAsync().ConfigureAwait(false);
|
var resultList = await result.AsNoTracking().ToListAsync().ConfigureAwait(false);
|
||||||
@@ -333,14 +336,18 @@ public partial class LightlessHub
|
|||||||
if (!resultList.Any()) return null;
|
if (!resultList.Any()) return null;
|
||||||
|
|
||||||
var groups = resultList.Select(g => g.GID).ToList();
|
var groups = resultList.Select(g => g.GID).ToList();
|
||||||
return new UserInfo(resultList[0].OtherUserAlias,
|
return new UserInfo(
|
||||||
|
resultList[0].OtherUserAlias,
|
||||||
resultList.SingleOrDefault(p => string.IsNullOrEmpty(p.GID))?.Synced ?? false,
|
resultList.SingleOrDefault(p => string.IsNullOrEmpty(p.GID))?.Synced ?? false,
|
||||||
resultList.Max(p => p.Synced),
|
resultList.Max(p => p.Synced),
|
||||||
resultList.Select(p => string.IsNullOrEmpty(p.GID) ? Constants.IndividualKeyword : p.GID).ToList(),
|
resultList.Select(p => string.IsNullOrEmpty(p.GID) ? Constants.IndividualKeyword : p.GID).ToList(),
|
||||||
resultList[0].OwnPermissions,
|
resultList[0].OwnPermissions,
|
||||||
resultList[0].OtherPermissions,
|
resultList[0].OtherPermissions,
|
||||||
resultList[0].OtherUserIsAdmin,
|
resultList[0].OtherUserIsAdmin,
|
||||||
resultList[0].OtherUserIsModerator);
|
resultList[0].OtherUserIsModerator,
|
||||||
|
resultList[0].OtherUserHasVanity ?? false,
|
||||||
|
resultList[0].OtherUserTextColorHex ?? string.Empty,
|
||||||
|
resultList[0].OtherUserTextGlowColorHex ?? string.Empty);
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<Dictionary<string, UserInfo>> GetAllPairInfo(string uid)
|
private async Task<Dictionary<string, UserInfo>> GetAllPairInfo(string uid)
|
||||||
@@ -414,21 +421,27 @@ public partial class LightlessHub
|
|||||||
OwnPermissions = ownperm,
|
OwnPermissions = ownperm,
|
||||||
OtherPermissions = otherperm,
|
OtherPermissions = otherperm,
|
||||||
OtherUserIsAdmin = u.IsAdmin,
|
OtherUserIsAdmin = u.IsAdmin,
|
||||||
OtherUserIsModerator = u.IsModerator
|
OtherUserIsModerator = u.IsModerator,
|
||||||
|
OtherUserHasVanity = u.HasVanity,
|
||||||
|
OtherUserTextColorHex = u.TextColorHex,
|
||||||
|
OtherUserTextGlowColorHex = u.TextGlowColorHex
|
||||||
};
|
};
|
||||||
|
|
||||||
var resultList = await result.AsNoTracking().ToListAsync().ConfigureAwait(false);
|
var resultList = await result.AsNoTracking().ToListAsync().ConfigureAwait(false);
|
||||||
return resultList.GroupBy(g => g.OtherUserUID, StringComparer.Ordinal).ToDictionary(g => g.Key, g =>
|
return resultList.GroupBy(g => g.OtherUserUID, StringComparer.Ordinal).ToDictionary(g => g.Key, g =>
|
||||||
{
|
{
|
||||||
return new UserInfo(g.First().OtherUserAlias,
|
return new UserInfo(
|
||||||
|
g.First().OtherUserAlias,
|
||||||
g.SingleOrDefault(p => string.IsNullOrEmpty(p.GID))?.Synced ?? false,
|
g.SingleOrDefault(p => string.IsNullOrEmpty(p.GID))?.Synced ?? false,
|
||||||
g.Max(p => p.Synced),
|
g.Max(p => p.Synced),
|
||||||
g.Select(p => string.IsNullOrEmpty(p.GID) ? Constants.IndividualKeyword : p.GID).ToList(),
|
g.Select(p => string.IsNullOrEmpty(p.GID) ? Constants.IndividualKeyword : p.GID).ToList(),
|
||||||
g.First().OwnPermissions,
|
g.First().OwnPermissions,
|
||||||
g.First().OtherPermissions,
|
g.First().OtherPermissions,
|
||||||
g.First().OtherUserIsAdmin,
|
g.First().OtherUserIsAdmin,
|
||||||
g.First().OtherUserIsModerator
|
g.First().OtherUserIsModerator,
|
||||||
);
|
g.First().OtherUserHasVanity ?? false,
|
||||||
|
g.First().OtherUserTextColorHex ?? string.Empty,
|
||||||
|
g.First().OtherUserTextGlowColorHex ?? string.Empty);
|
||||||
}, StringComparer.Ordinal);
|
}, StringComparer.Ordinal);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -501,6 +514,9 @@ public partial class LightlessHub
|
|||||||
UserPermissionSet? OwnPermissions,
|
UserPermissionSet? OwnPermissions,
|
||||||
UserPermissionSet? OtherPermissions,
|
UserPermissionSet? OtherPermissions,
|
||||||
bool IsAdmin,
|
bool IsAdmin,
|
||||||
bool IsModerator
|
bool IsModerator,
|
||||||
|
bool HasVanity,
|
||||||
|
string? TextColorHex,
|
||||||
|
string? TextGlowColorHex
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
using LightlessSync.API.Data;
|
using LightlessSync.API.Data;
|
||||||
using LightlessSync.API.Data.Enum;
|
using LightlessSync.API.Data.Enum;
|
||||||
using LightlessSync.API.Data.Extensions;
|
using LightlessSync.API.Data.Extensions;
|
||||||
using LightlessSync.API.Dto.Group;
|
using LightlessSync.API.Dto.Group;
|
||||||
@@ -493,7 +493,7 @@ public partial class LightlessHub
|
|||||||
var pairs = await GetAllPairInfo(UserUID).ConfigureAwait(false);
|
var pairs = await GetAllPairInfo(UserUID).ConfigureAwait(false);
|
||||||
return pairs.Select(p =>
|
return pairs.Select(p =>
|
||||||
{
|
{
|
||||||
return new UserFullPairDto(new UserData(p.Key, p.Value.Alias, p.Value.IsAdmin, p.Value.IsModerator),
|
return new UserFullPairDto(new UserData(p.Key, p.Value.Alias, p.Value.IsAdmin, p.Value.IsModerator, p.Value.HasVanity, p.Value.TextColorHex, p.Value.TextGlowColorHex),
|
||||||
p.Value.ToIndividualPairStatus(),
|
p.Value.ToIndividualPairStatus(),
|
||||||
p.Value.GIDs.Where(g => !string.Equals(g, Constants.IndividualKeyword, StringComparison.OrdinalIgnoreCase)).ToList(),
|
p.Value.GIDs.Where(g => !string.Equals(g, Constants.IndividualKeyword, StringComparison.OrdinalIgnoreCase)).ToList(),
|
||||||
p.Value.OwnPermissions.ToUserPermissions(setSticky: true),
|
p.Value.OwnPermissions.ToUserPermissions(setSticky: true),
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
using Discord;
|
using Discord;
|
||||||
using Discord.Interactions;
|
using Discord.Interactions;
|
||||||
using Discord.Rest;
|
using Discord.Rest;
|
||||||
using Discord.WebSocket;
|
using Discord.WebSocket;
|
||||||
@@ -384,13 +384,50 @@ internal class DiscordBot : IHostedService
|
|||||||
|
|
||||||
_logger.LogInformation($"Checking Group: {group.GID} [{group.Alias}], owned by {group.OwnerUID} ({groupPrimaryUser}), User in Roles: {string.Join(", ", discordUser?.RoleIds ?? new List<ulong>())}");
|
_logger.LogInformation($"Checking Group: {group.GID} [{group.Alias}], owned by {group.OwnerUID} ({groupPrimaryUser}), User in Roles: {string.Join(", ", discordUser?.RoleIds ?? new List<ulong>())}");
|
||||||
|
|
||||||
if (lodestoneUser == null || discordUser == null || !discordUser.RoleIds.Any(allowedRoleIds.Keys.Contains))
|
var hasAllowedRole = lodestoneUser != null && discordUser != null && discordUser.RoleIds.Any(allowedRoleIds.Keys.Contains);
|
||||||
|
|
||||||
|
if (!hasAllowedRole)
|
||||||
{
|
{
|
||||||
await _botServices.LogToChannel($"VANITY GID REMOVAL: <@{lodestoneUser?.DiscordId ?? 0}> ({lodestoneUser?.User?.UID}) - GID: {group.GID}, Vanity: {group.Alias}").ConfigureAwait(false);
|
await _botServices.LogToChannel($"VANITY GID REMOVAL: <@{lodestoneUser?.DiscordId ?? 0}> ({lodestoneUser?.User?.UID}) - GID: {group.GID}, Vanity: {group.Alias}").ConfigureAwait(false);
|
||||||
|
|
||||||
_logger.LogInformation($"User {lodestoneUser?.User?.UID ?? "unknown"} not in allowed roles, deleting group alias for {group.GID}");
|
_logger.LogInformation($"User {lodestoneUser?.User?.UID ?? "unknown"} not in allowed roles, deleting group alias for {group.GID}");
|
||||||
group.Alias = null;
|
group.Alias = null;
|
||||||
db.Update(group);
|
db.Update(group);
|
||||||
|
|
||||||
|
if (lodestoneUser?.User != null)
|
||||||
|
{
|
||||||
|
lodestoneUser.User.HasVanity = false;
|
||||||
|
db.Update(lodestoneUser.User);
|
||||||
|
|
||||||
|
var secondaryUsers = await db.Auth.Include(u => u.User)
|
||||||
|
.Where(u => u.PrimaryUserUID == lodestoneUser.User.UID).ToListAsync().ConfigureAwait(false);
|
||||||
|
|
||||||
|
foreach (var secondaryUser in secondaryUsers)
|
||||||
|
{
|
||||||
|
secondaryUser.User.HasVanity = false;
|
||||||
|
db.Update(secondaryUser.User);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
await db.SaveChangesAsync(token).ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
else if (lodestoneUser?.User != null && lodestoneUser.User.HasVanity != true)
|
||||||
|
{
|
||||||
|
lodestoneUser.User.HasVanity = true;
|
||||||
|
db.Update(lodestoneUser.User);
|
||||||
|
|
||||||
|
var secondaryUsers = await db.Auth.Include(u => u.User)
|
||||||
|
.Where(u => u.PrimaryUserUID == lodestoneUser.User.UID).ToListAsync().ConfigureAwait(false);
|
||||||
|
|
||||||
|
foreach (var secondaryUser in secondaryUsers)
|
||||||
|
{
|
||||||
|
if (secondaryUser.User.HasVanity != true)
|
||||||
|
{
|
||||||
|
secondaryUser.User.HasVanity = true;
|
||||||
|
db.Update(secondaryUser.User);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
await db.SaveChangesAsync(token).ConfigureAwait(false);
|
await db.SaveChangesAsync(token).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -400,22 +437,55 @@ internal class DiscordBot : IHostedService
|
|||||||
var discordUser = await restGuild.GetUserAsync(lodestoneAuth.DiscordId).ConfigureAwait(false);
|
var discordUser = await restGuild.GetUserAsync(lodestoneAuth.DiscordId).ConfigureAwait(false);
|
||||||
_logger.LogInformation($"Checking User: {lodestoneAuth.DiscordId}, {lodestoneAuth.User.UID} ({lodestoneAuth.User.Alias}), User in Roles: {string.Join(", ", discordUser?.RoleIds ?? new List<ulong>())}");
|
_logger.LogInformation($"Checking User: {lodestoneAuth.DiscordId}, {lodestoneAuth.User.UID} ({lodestoneAuth.User.Alias}), User in Roles: {string.Join(", ", discordUser?.RoleIds ?? new List<ulong>())}");
|
||||||
|
|
||||||
if (discordUser == null || !discordUser.RoleIds.Any(u => allowedRoleIds.Keys.Contains(u)))
|
var hasAllowedRole = discordUser != null && discordUser.RoleIds.Any(u => allowedRoleIds.Keys.Contains(u));
|
||||||
|
|
||||||
|
if (!hasAllowedRole)
|
||||||
{
|
{
|
||||||
_logger.LogInformation($"User {lodestoneAuth.User.UID} not in allowed roles, deleting alias");
|
_logger.LogInformation($"User {lodestoneAuth.User.UID} not in allowed roles, deleting alias");
|
||||||
await _botServices.LogToChannel($"VANITY UID REMOVAL: <@{lodestoneAuth.DiscordId}> - UID: {lodestoneAuth.User.UID}, Vanity: {lodestoneAuth.User.Alias}").ConfigureAwait(false);
|
await _botServices.LogToChannel($"VANITY UID REMOVAL: <@{lodestoneAuth.DiscordId}> - UID: {lodestoneAuth.User.UID}, Vanity: {lodestoneAuth.User.Alias}").ConfigureAwait(false);
|
||||||
lodestoneAuth.User.Alias = null;
|
lodestoneAuth.User.Alias = null;
|
||||||
|
lodestoneAuth.User.HasVanity = false;
|
||||||
var secondaryUsers = await db.Auth.Include(u => u.User).Where(u => u.PrimaryUserUID == lodestoneAuth.User.UID).ToListAsync().ConfigureAwait(false);
|
var secondaryUsers = await db.Auth.Include(u => u.User).Where(u => u.PrimaryUserUID == lodestoneAuth.User.UID).ToListAsync().ConfigureAwait(false);
|
||||||
foreach (var secondaryUser in secondaryUsers)
|
foreach (var secondaryUser in secondaryUsers)
|
||||||
{
|
{
|
||||||
_logger.LogInformation($"Secondary User {secondaryUser.User.UID} not in allowed roles, deleting alias");
|
_logger.LogInformation($"Secondary User {secondaryUser.User.UID} not in allowed roles, deleting alias");
|
||||||
|
|
||||||
secondaryUser.User.Alias = null;
|
secondaryUser.User.Alias = null;
|
||||||
|
secondaryUser.User.HasVanity = false;
|
||||||
db.Update(secondaryUser.User);
|
db.Update(secondaryUser.User);
|
||||||
}
|
}
|
||||||
db.Update(lodestoneAuth.User);
|
db.Update(lodestoneAuth.User);
|
||||||
await db.SaveChangesAsync(token).ConfigureAwait(false);
|
await db.SaveChangesAsync(token).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var secondaryUsers = await db.Auth.Include(u => u.User)
|
||||||
|
.Where(u => u.PrimaryUserUID == lodestoneAuth.User.UID).ToListAsync().ConfigureAwait(false);
|
||||||
|
|
||||||
|
var hasChanges = false;
|
||||||
|
|
||||||
|
if (lodestoneAuth.User.HasVanity != true)
|
||||||
|
{
|
||||||
|
lodestoneAuth.User.HasVanity = true;
|
||||||
|
db.Update(lodestoneAuth.User);
|
||||||
|
hasChanges = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var secondaryUser in secondaryUsers)
|
||||||
|
{
|
||||||
|
if (secondaryUser.User.HasVanity != true)
|
||||||
|
{
|
||||||
|
secondaryUser.User.HasVanity = true;
|
||||||
|
db.Update(secondaryUser.User);
|
||||||
|
hasChanges = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hasChanges)
|
||||||
|
{
|
||||||
|
await db.SaveChangesAsync(token).ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task UpdateStatusAsync(CancellationToken token)
|
private async Task UpdateStatusAsync(CancellationToken token)
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
using Discord.Interactions;
|
using Discord.Interactions;
|
||||||
using Discord;
|
using Discord;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
@@ -123,6 +123,20 @@ public partial class LightlessWizardModule
|
|||||||
{
|
{
|
||||||
var user = await db.Users.SingleAsync(u => u.UID == uid).ConfigureAwait(false);
|
var user = await db.Users.SingleAsync(u => u.UID == uid).ConfigureAwait(false);
|
||||||
user.Alias = desiredVanityUid;
|
user.Alias = desiredVanityUid;
|
||||||
|
user.HasVanity = true;
|
||||||
|
|
||||||
|
var secondaryUsers = await db.Auth.Include(u => u.User)
|
||||||
|
.Where(u => u.PrimaryUserUID == user.UID).ToListAsync().ConfigureAwait(false);
|
||||||
|
|
||||||
|
foreach (var secondaryUser in secondaryUsers)
|
||||||
|
{
|
||||||
|
if (secondaryUser.User.HasVanity != true)
|
||||||
|
{
|
||||||
|
secondaryUser.User.HasVanity = true;
|
||||||
|
db.Update(secondaryUser.User);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
db.Update(user);
|
db.Update(user);
|
||||||
await db.SaveChangesAsync().ConfigureAwait(false);
|
await db.SaveChangesAsync().ConfigureAwait(false);
|
||||||
eb.WithColor(Color.Green);
|
eb.WithColor(Color.Green);
|
||||||
@@ -199,6 +213,25 @@ public partial class LightlessWizardModule
|
|||||||
{
|
{
|
||||||
var group = await db.Groups.SingleAsync(u => u.GID == gid).ConfigureAwait(false);
|
var group = await db.Groups.SingleAsync(u => u.GID == gid).ConfigureAwait(false);
|
||||||
group.Alias = desiredVanityGid;
|
group.Alias = desiredVanityGid;
|
||||||
|
|
||||||
|
var ownerAuth = await db.Auth.SingleOrDefaultAsync(u => u.UserUID == group.OwnerUID).ConfigureAwait(false);
|
||||||
|
var ownerUid = string.IsNullOrEmpty(ownerAuth?.PrimaryUserUID) ? group.OwnerUID : ownerAuth.PrimaryUserUID;
|
||||||
|
var ownerUser = await db.Users.SingleAsync(u => u.UID == ownerUid).ConfigureAwait(false);
|
||||||
|
ownerUser.HasVanity = true;
|
||||||
|
db.Update(ownerUser);
|
||||||
|
|
||||||
|
var secondaryUsers = await db.Auth.Include(u => u.User)
|
||||||
|
.Where(u => u.PrimaryUserUID == ownerUser.UID).ToListAsync().ConfigureAwait(false);
|
||||||
|
|
||||||
|
foreach (var secondaryUser in secondaryUsers)
|
||||||
|
{
|
||||||
|
if (secondaryUser.User.HasVanity != true)
|
||||||
|
{
|
||||||
|
secondaryUser.User.HasVanity = true;
|
||||||
|
db.Update(secondaryUser.User);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
db.Update(group);
|
db.Update(group);
|
||||||
await db.SaveChangesAsync().ConfigureAwait(false);
|
await db.SaveChangesAsync().ConfigureAwait(false);
|
||||||
eb.WithColor(Color.Green);
|
eb.WithColor(Color.Green);
|
||||||
|
|||||||
Reference in New Issue
Block a user