9fd50ee01e
Fixed cli help texts Added administrator options for critical methods Added result state for client and server specific errors Redirect root to help text Fixed fingerprint error, fingerprint must be case sensitive Re-Added online messages Added typing trigger for discord bot messages client: fixed chunkString for empty results preemtive wrap error objects for server messages both: added raw lua RS Bridge command entry
52 lines
2.4 KiB
C#
52 lines
2.4 KiB
C#
using CommandLine;
|
|
using Newtonsoft.Json;
|
|
using System.Text;
|
|
|
|
namespace MinecraftDiscordBot;
|
|
|
|
[Verb("config", HelpText = "Manually configure the bot with CLI arguments.")]
|
|
public class BotConfiguration : IBotConfiguration, IBotConfigurator {
|
|
private const string DEFAULT_PREFIX = "!";
|
|
private const int DEFAULT_PORT = 8080;
|
|
[JsonProperty("token", Required = Required.Always)]
|
|
[Option('t', "token", HelpText = "The Discord bot token", Required = true)]
|
|
public string Token { get; init; } = default!;
|
|
[JsonProperty("port", Required = Required.DisallowNull)]
|
|
[Option('p', "port", Default = DEFAULT_PORT, HelpText = "The websocket server port")]
|
|
public int Port { get; init; } = DEFAULT_PORT;
|
|
[JsonProperty("channels", Required = Required.Always)]
|
|
[Option('c', "channel", HelpText = "The list of whitelisted channels", Required = true, Min = 1)]
|
|
public IEnumerable<ulong> Channels { get; init; } = default!;
|
|
[JsonProperty("prefix", Required = Required.DisallowNull)]
|
|
[Option("prefix", Default = DEFAULT_PREFIX, HelpText = "The Discord bot command prefix")]
|
|
public string Prefix { get; init; } = DEFAULT_PREFIX;
|
|
[JsonProperty("host", Required = Required.Always)]
|
|
[Option("host", Default = DEFAULT_PREFIX, HelpText = "The external websocket hostname.", Required = true)]
|
|
public string SocketHost { get; init; } = default!;
|
|
[JsonProperty("admins", Required = Required.DisallowNull)]
|
|
[Option("admins", Default = new ulong[] { }, HelpText = "The list of bot administrators.")]
|
|
public ulong[] Administrators { get; init; } = Array.Empty<ulong>();
|
|
[JsonIgnore]
|
|
public BotConfiguration Config => this;
|
|
}
|
|
|
|
public interface IBotConfigurator {
|
|
BotConfiguration Config { get; }
|
|
}
|
|
|
|
public interface IBotConfiguration {
|
|
string Token { get; }
|
|
int Port { get; }
|
|
IEnumerable<ulong> Channels { get; }
|
|
string Prefix { get; }
|
|
}
|
|
|
|
[Verb("file", true, HelpText = "Load a bot configuration file.")]
|
|
public class ConfigFile : IBotConfigurator {
|
|
private const string DEFAULT_CONFIGPATH = "config.json";
|
|
[Option('f', "file", Default = DEFAULT_CONFIGPATH, HelpText = "The path of the configuration file")]
|
|
public string ConfigPath { get; set; } = DEFAULT_CONFIGPATH;
|
|
public BotConfiguration Config
|
|
=> JsonConvert.DeserializeObject<BotConfiguration>(File.ReadAllText(ConfigPath, Encoding.UTF8))
|
|
?? throw new InvalidProgramException("Invalid empty config file!");
|
|
} |