using HermesSocketLibrary.Requests.Messages; using HermesSocketServer.Models; using ILogger = Serilog.ILogger; namespace HermesSocketServer.Requests { public class GetGroups : IRequest { public string Name => "get_groups"; public string[] RequiredKeys => []; private readonly ILogger _logger; public GetGroups(ILogger logger) { _logger = logger; } public Task Grant(Channel channel, IDictionary data) { var groups = channel.Groups.Get().Values; var chatters = channel.Groups.Chatters; var all = groups.Select(g => new GroupDetails() { Group = g, Chatters = chatters[g.Id].Get().Values, }); _logger.Information($"Fetched all groups for channel [channel: {channel.Id}]"); return Task.FromResult(RequestResult.Successful(all, notifyClientsOnAccount: false)); } private class GroupDetails { public required Group Group { get; set; } public required IEnumerable Chatters { get; set; } } } }