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
|