From d3d95bbb271902391cbd43a11a6a5d72b0ccfaef Mon Sep 17 00:00:00 2001 From: TheArcaneBrony Date: Thu, 23 Nov 2023 05:43:15 +0100 Subject: Add more code --- .../Controllers/Client/Room/RoomController.cs | 51 ++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 MxApiExtensions/Controllers/Client/Room/RoomController.cs (limited to 'MxApiExtensions/Controllers/Client/Room/RoomController.cs') diff --git a/MxApiExtensions/Controllers/Client/Room/RoomController.cs b/MxApiExtensions/Controllers/Client/Room/RoomController.cs new file mode 100644 index 0000000..a3e433d --- /dev/null +++ b/MxApiExtensions/Controllers/Client/Room/RoomController.cs @@ -0,0 +1,51 @@ +using LibMatrix; +using LibMatrix.Services; +using Microsoft.AspNetCore.Mvc; +using MxApiExtensions.Services; + +namespace MxApiExtensions.Controllers.Client.Room; + +[ApiController] +[Route("/")] +public class RoomController(ILogger logger, HomeserverResolverService hsResolver, AuthenticationService auth, MxApiExtensionsConfiguration conf, + AuthenticatedHomeserverProviderService hsProvider) + : ControllerBase { + [HttpGet("/_matrix/client/{_}/rooms/{roomId}/members_by_homeserver")] + public async Task>> GetRoomMembersByHomeserver(string _, [FromRoute] string roomId, [FromQuery] bool joinedOnly = true) { + var hs = await hsProvider.GetHomeserver(); + var room = hs.GetRoom(roomId); + return await room.GetMembersByHomeserverAsync(joinedOnly); + } + + /// + /// Fetches up to timeline events + /// + /// + /// + /// + /// + /// + /// + /// + /// Reverse load all messages and reverse on API side, fixes history starting at join event + /// + [HttpGet("/_matrix/client/{_}/rooms/{roomId}/mass_messages")] + public async IAsyncEnumerable RedactUser(string _, [FromRoute] string roomId, [FromQuery(Name = "from")] string from = "", + [FromQuery(Name = "limit")] int limit = 100, [FromQuery(Name = "dir")] string dir = "b", [FromQuery(Name = "filter")] string filter = "", + [FromQuery(Name = "include_state")] bool includeState = true, [FromQuery(Name = "fix_forward")] bool fixForward = false) { + var hs = await hsProvider.GetHomeserver(); + var room = hs.GetRoom(roomId); + var msgs = room.GetManyMessagesAsync(from: from, limit: limit, dir: dir, filter: filter, includeState: includeState, fixForward: fixForward); + await foreach (var resp in msgs) { + Console.WriteLine($"GetMany messages returned {resp.Chunk.Count} timeline events and {resp.State.Count} state events, end={resp.End}"); + foreach (var timelineEvent in resp.Chunk) { + yield return timelineEvent; + } + + if (includeState) + foreach (var timelineEvent in resp.State) { + yield return timelineEvent; + } + } + } +} \ No newline at end of file -- cgit 1.5.1