#nullable disable using NadekoBot.Common.Configs; using SixLabors.ImageSharp.PixelFormats; namespace NadekoBot.Services; /// /// Settings service for bot-wide configuration. /// public sealed class BotConfigService : ConfigServiceBase { private const string FILE_PATH = "data/bot.yml"; private static readonly TypedKey _changeKey = new("config.bot.updated"); public override string Name { get; } = "bot"; public BotConfigService(IConfigSeria serializer, IPubSub pubSub) : base(FILE_PATH, serializer, pubSub, _changeKey) { AddParsedProp("color.ok", bs => bs.Color.Ok, Rgba32.TryParseHex, ConfigPrinters.Color); AddParsedProp("color.error", bs => bs.Color.Error, Rgba32.TryParseHex, ConfigPrinters.Color); AddParsedProp("color.pending", bs => bs.Color.Pending, Rgba32.TryParseHex, ConfigPrinters.Color); AddParsedProp("help.text", bs => bs.HelpText, ConfigParsers.String, ConfigPrinters.ToString); AddParsedProp("help.dmtext", bs => bs.DmHelpText, ConfigParsers.String, ConfigPrinters.ToString); AddParsedProp("console.type", bs => bs.ConsoleOutputType, Enum.TryParse, ConfigPrinters.ToString); AddParsedProp("locale", bs => bs.DefaultLocale, ConfigParsers.Culture, ConfigPrinters.Culture); AddParsedProp("prefix", bs => bs.Prefix, ConfigParsers.String, ConfigPrinters.ToString); AddParsedProp("checkforupdates", bs => bs.CheckForUpdates, bool.TryParse, ConfigPrinters.ToString); Migrate(); } private void Migrate() { if (data.Version < 2) ModifyConfig(c => c.Version = 2); if (data.Version < 3) { ModifyConfig(c => { c.Version = 3; c.Blocked.Modules = c.Blocked.Modules?.Select(static x => string.Equals(x, "ActualCustomReactions", StringComparison.InvariantCultureIgnoreCase) ? "ACTUALEXPRESSIONS" : x) .Distinct() .ToHashSet(); }); } if (data.Version < 4) ModifyConfig(c => { c.Version = 4; c.CheckForUpdates = true; }); if(data.Version < 5) ModifyConfig(c => { c.Version = 5; }); if(data.Version < 7) ModifyConfig(c => { c.Version = 7; c.IgnoreOtherBots = true; }); } }