-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProgram.cs
More file actions
93 lines (91 loc) · 3.53 KB
/
Program.cs
File metadata and controls
93 lines (91 loc) · 3.53 KB
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
using DragonBot.Core;
using DragonBot.Instance;
using DragonBot.Modules;
using System.Runtime.CompilerServices;
using System.Text.Json;
using System.Text.Json.Serialization;
namespace DragonBot
{
public static class Program
{
//Should never be null after Init();
internal static GlobalSettings? Settings;
public static async Task Main(string[] args)
{
if (Environment.GetCommandLineArgs().Contains("-init"))
{
Environment.Exit(0);
}
await Run();
await Task.Delay(-1);
}
[ModuleInitializer]
internal static void Init()
{
string DefaultBaseDir = AppContext.BaseDirectory;
/*#if DEBUG
if (Directory.Exists(Path.Combine(DefaultBaseDir, "instances")))
{
Directory.Delete(Path.Combine(DefaultBaseDir, "instances"), true);
}
if (Directory.Exists(Path.Combine(DefaultBaseDir, "logs")))
{
Directory.Delete(Path.Combine(DefaultBaseDir, "logs"), true);
}
if (File.Exists(Path.Combine(DefaultBaseDir, "settings.json")))
{
File.Delete(Path.Combine(DefaultBaseDir, "settings.json"));
}
#endif*/
if (File.Exists(Path.Combine(DefaultBaseDir, "settings.json")))
{
using StreamReader r = new(Path.Combine(DefaultBaseDir, "settings.json"));
string json = r.ReadToEnd();
Settings = JsonSerializer.Deserialize<GlobalSettings>(json) ?? new() { BaseDir = DefaultBaseDir };
}
else
{
Settings = new() { BaseDir = DefaultBaseDir };
using StreamWriter w = new(Path.Combine(AppContext.BaseDirectory, "settings.json"));
w.Write(JsonSerializer.Serialize(Settings));
}
Directory.CreateDirectory(Settings.InstanceConfigDir);
//ModuleInitilaizer.Patch();
RegisterModuleAttribute.RegisterModules();
//TEMP HACK TO LOAD MODULES
ModuleMain.InitAssembly();
}
private static async Task Run()
{
var configs = Directory.EnumerateFiles(Settings!.InstanceConfigDir);
if (configs.Any())
{
foreach (var config in configs)
{
await Bot.Create(Path.GetFileNameWithoutExtension(config));
}
}
else
{
await Bot.Create("DragonBot");
}
}
internal record GlobalSettings([property: JsonPropertyName("singleInstance")] bool SingleInstance = true)
{
[property: JsonPropertyName("baseDirectory")]
internal required string BaseDir { get; init; } = AppContext.BaseDirectory;
[property: JsonPropertyName("logDirectory")]
internal string LogDir { get => field ??= Path.Combine(BaseDir, "logs"); init; }
[property: JsonPropertyName("instanceConfigsDirectory")]
internal string InstanceConfigDir { get => field ??= Path.Combine(BaseDir, "instances"); init; }
}
extension<TKey, TValue>(Dictionary<TKey, TValue> dest)
where TKey : notnull
{
public Dictionary<TKey, TValue> Merge(Dictionary<TKey, TValue> source) =>
dest.Concat(source)
.GroupBy(kvp => kvp.Key)
.ToDictionary(group => group.Key, group => group.Last().Value);
}
}
}