Added support for StreamElements' Overlay Key for TTS. Added emote support for stores. Reduced emotes sent to users.

This commit is contained in:
Tom
2026-01-03 05:18:03 +00:00
parent 78b6d4b789
commit 3009906b2a
11 changed files with 123 additions and 70 deletions

View File

@@ -14,54 +14,53 @@ namespace HermesSocketServer.Requests
_logger = logger;
}
public async Task<RequestResult> Grant(Channel channel, IDictionary<string, object> data)
public Task<RequestResult> Grant(Channel channel, IDictionary<string, object> data)
{
var groupId = data["id"].ToString()!;
var groupIdString = data["id"].ToString()!;
var groupId = new Guid(groupIdString);
var result = channel.Groups.Remove(groupId);
var result = channel.Groups.Remove(groupIdString);
if (result)
{
var permissions = channel.GroupPermissions.Get().Values
.Where(p => p.GroupId.ToString() == groupId);
Task? chattersSave = null;
if (channel.Groups.Chatters.TryGetValue(groupId, out var chatters))
if (channel.Groups.Chatters.TryGetValue(groupId.ToString(), out var chatters))
{
var filteredChatters = chatters.Get().Values.Where(c => c.GroupId == groupId).ToArray();
if (filteredChatters.Any())
var filteredChatters = chatters.Get().Values;
foreach (var chatter in filteredChatters)
{
foreach (var chatter in filteredChatters)
{
var res = chatters.Remove(chatter.ChatterId.ToString(), fromCascade: true);
if (!res)
_logger.Warning($"Failed to delete group chatter by id [group chatter id: {chatter.ChatterId}]");
}
chattersSave = chatters.Save();
var res = chatters.Remove(chatter.ChatterId.ToString(), fromCascade: true);
if (!res)
_logger.Warning($"Failed to delete group chatter by id from cascade [group chatter id: {chatter.ChatterId}]");
}
}
var permissions = channel.GroupPermissions.Get().Values
.Where(p => p.GroupId == groupId);
foreach (var permission in permissions)
{
var res = channel.GroupPermissions.Remove(permission.Id, fromCascade: true);
if (!res)
_logger.Warning($"Failed to delete group permission by id [group chatter id: {permission.Id}]");
_logger.Warning($"Failed to delete group permission by id from cascade [group permission id: {permission.Id}]");
}
if (chattersSave != null)
await Task.WhenAll(chattersSave, channel.GroupPermissions.Save());
else
await channel.GroupPermissions.Save();
if (!channel.Groups.Chatters.Remove(groupId))
var policies = channel.Policies.Get().Values
.Where(c => c.GroupId == groupId).ToArray();
foreach (var policy in policies)
{
var res = channel.Policies.Remove(policy.Id.ToString(), fromCascade: true);
if (!res)
_logger.Warning($"Failed to delete group policy by id from cascade [group policy id: {policy.Id}]");
}
if (!channel.Groups.Chatters.Remove(groupIdString))
_logger.Warning($"Failed to delete group chatters from inner store [group id: {groupId}]");
_logger.Information($"Deleted a group by id [group id: {groupId}]");
return RequestResult.Successful(null);
return Task.FromResult(RequestResult.Successful(null));
}
_logger.Warning($"Group Id does not exist [group id: {groupId}]");
return RequestResult.Failed("Something went wrong when updating the cache.");
return Task.FromResult(RequestResult.Failed("Something went wrong when updating the cache."));
}
}
}

View File

@@ -21,6 +21,15 @@ namespace HermesSocketServer.Requests
if (result)
{
var redemptions = channel.Redemptions.Get().Values
.Where(r => r.ActionName == name);
foreach (var redemption in redemptions)
{
var res = channel.Redemptions.Remove(redemption.Id, fromCascade: true);
if (!res)
_logger.Warning($"Failed to delete redemption by id from cascade [redemption id: {redemption.Id}]");
}
_logger.Information($"Deleted a redeemable action by name [name: {name}]");
return Task.FromResult(RequestResult.Successful(null));
}

View File

@@ -1,5 +1,3 @@
using HermesSocketLibrary.db;
using HermesSocketLibrary.Requests.Messages;
using HermesSocketServer.Models;
using ILogger = Serilog.ILogger;
@@ -9,24 +7,16 @@ namespace HermesSocketServer.Requests
{
public string Name => "get_emotes";
public string[] RequiredKeys => [];
private Database _database;
private ILogger _logger;
public GetEmotes(Database database, ILogger logger)
public GetEmotes(ILogger logger)
{
_database = database;
_logger = logger;
}
public async Task<RequestResult> Grant(Channel channel, IDictionary<string, object> data)
{
IList<EmoteInfo> emotes = new List<EmoteInfo>();
string sql = $"SELECT id, name FROM \"Emote\"";
await _database.Execute(sql, (IDictionary<string, object>?) null, (r) => emotes.Add(new EmoteInfo()
{
Id = r.GetString(0),
Name = r.GetString(1)
}));
var emotes = channel.Emotes.Get().Values;
_logger.Information($"Fetched all emotes for channel [channel: {channel.Id}]");
return RequestResult.Successful(emotes, notifyClientsOnAccount: false);
}