about summary refs log tree commit diff
path: root/Program.cs
blob: 674f91decb3ca845ad7348ff1a78e19305ea83f1 (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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
// See https://aka.ms/new-console-template for more information

using System.Text.Json;
using ArcaneLibs.Extensions;
using LibMatrix.Services;
using LibMatrix.Utilities.Bot;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using PluralContactBotPoC.Bot;

Console.WriteLine("Hello, World!");

var randomBytes = new byte[32];
Random.Shared.NextBytes(randomBytes);
var ASToken = Convert.ToBase64String(randomBytes);
Random.Shared.NextBytes(randomBytes);
var HSToken = Convert.ToBase64String(randomBytes);

var asConfig = new AppServiceConfiguration() {
    Id = "plural_contact_bot",
    Url = null,
    SenderLocalpart = "plural_contact_bot",
    AppserviceToken = ASToken,
    HomeserverToken = HSToken,
    Namespaces = new() {
        Users = new() {
            new() {
                Exclusive = false,
                Regex = "@.*"
            }
        },
        Aliases = new() {
            new() {
                Exclusive = false,
                Regex = "#.*"
            }
        },
        Rooms = new() {
            new() {
                Exclusive = false,
                Regex = "!.*"
            }
        }
    },
    RateLimited = false,
    Protocols = new List<string>() { "matrix" }
};

if (File.Exists("appservice.json"))
    asConfig = JsonSerializer.Deserialize<AppServiceConfiguration>(File.ReadAllText("appservice.json"))!;

File.WriteAllText("appservice.yaml", asConfig.ToYaml());
File.WriteAllText("appservice.json", asConfig.ToJson());
Environment.Exit(0);

var host = Host.CreateDefaultBuilder(args).ConfigureServices((_, services) => {
    services.AddScoped<TieredStorageService>(x =>
        new TieredStorageService(
            cacheStorageProvider: new FileStorageProvider("bot_data/cache/"),
            dataStorageProvider: new FileStorageProvider("bot_data/data/")
        )
    );
    services.AddSingleton<PluralContactBotConfiguration>();
    services.AddSingleton<AppServiceConfiguration>();

    services.AddRoryLibMatrixServices();
    services.AddMatrixBot().AddCommandHandler().DiscoverAllCommands();

    services.AddHostedService<PluralContactBot>();
}).UseConsoleLifetime().Build();

await host.RunAsync();