about summary refs log tree commit diff
path: root/MatrixAntiDmSpam/PolicyListFetcher.cs
blob: 01195277887c7d0bab247d811126afeca35cdbf6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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);
        }
    }
}