about summary refs log tree commit diff
path: root/MatrixAntiDmSpam/PolicyListFetcher.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MatrixAntiDmSpam/PolicyListFetcher.cs')
-rw-r--r--MatrixAntiDmSpam/PolicyListFetcher.cs27
1 files changed, 27 insertions, 0 deletions
diff --git a/MatrixAntiDmSpam/PolicyListFetcher.cs b/MatrixAntiDmSpam/PolicyListFetcher.cs
new file mode 100644

index 0000000..0119527 --- /dev/null +++ b/MatrixAntiDmSpam/PolicyListFetcher.cs
@@ -0,0 +1,27 @@ +using LibMatrix.Homeservers; + +namespace MatrixAntiDmSpam; + +public class PolicyListFetcher(ILogger<PolicyListFetcher> logger, AntiDmSpamConfiguration config, AuthenticatedHomeserverGeneric homeserver) : IHostedService { + + + public async Task StartAsync(CancellationToken cancellationToken) { + logger.LogInformation("Starting policy list fetcher"); + await EnsurePolicyListsJoined(); + } + + public async Task StopAsync(CancellationToken cancellationToken) { + logger.LogInformation("Stopping policy list fetcher"); + } + + private async Task EnsurePolicyListsJoined() { + var joinedRooms = await homeserver.GetJoinedRooms(); + var expectedPolicyRooms = config.PolicyLists; + var missingRooms = expectedPolicyRooms.Where(room => !joinedRooms.Any(r => r.RoomId == room.RoomId)).ToList(); + + foreach (var room in missingRooms) { + logger.LogInformation("Joining policy list room {}", room.RoomId); + await homeserver.GetRoom(room.RoomId).JoinAsync(room.Vias); + } + } +} \ No newline at end of file