public static async Task Main(string[] args = null) { string defaultEnv = Path.Combine(SkuldAppContext.BaseDirectory, ".env"); if (!File.Exists(defaultEnv)) { Console.WriteLine("Copy .env.default into .env and enter details"); return; } DotEnv.Load(new DotEnvOptions(envFilePaths: new[] { defaultEnv })); if (args.Contains("--pq")) { GeneratePixelQuery(); return; } SkuldConfig Configuration = null; Log.Configure(); if (!Directory.Exists(SkuldAppContext.StorageDirectory)) { Directory.CreateDirectory(SkuldAppContext.StorageDirectory); Log.Verbose(Key, "Created Storage Directory", null); } if (!Directory.Exists(SkuldAppContext.FontDirectory)) { Directory.CreateDirectory(SkuldAppContext.FontDirectory); Log.Verbose(Key, "Created Font Directory", null); } try { var database = new SkuldDbContextFactory().CreateDbContext(); if (!database.Configurations.Any() || args.Contains("--newconf") || args.Contains("-nc")) { var conf = new SkuldConfig(); database.Configurations.Add(conf); await database.SaveChangesAsync().ConfigureAwait(false); Log.Verbose(Key, $"Created new configuration with Id: {conf.Id}", null); Log.Info(Key, $"Please fill out the configuration information in the database matching the Id \"{database.Configurations.LastOrDefault().Id}\""); Console.ReadKey(); Environment.Exit(0); } var configId = SkuldAppContext.GetEnvVar(SkuldAppContext.ConfigEnvVar); var c = database.Configurations.Find(configId); Configuration = c ?? database.Configurations.FirstOrDefault(); SkuldAppContext.SetConfigurationId(Configuration.Id); } catch (Exception ex) { Log.Critical(Key, ex.Message, null, ex); } if (Configuration.DiscordToken.IsNullOrWhiteSpace()) { Log.Critical(Key, "You haven't provided a discord token, exiting", null); return; } await ConfigureBotAsync( Configuration, new DiscordSocketConfig { MessageCacheSize = 100, DefaultRetryMode = RetryMode.AlwaysRetry, LogLevel = LogSeverity.Verbose, GatewayIntents = GatewayIntents.Guilds | GatewayIntents.GuildMembers | GatewayIntents.GuildBans | GatewayIntents.GuildEmojis | GatewayIntents.GuildIntegrations | GatewayIntents.GuildWebhooks | GatewayIntents.GuildInvites | GatewayIntents.GuildVoiceStates | GatewayIntents.GuildMessages | GatewayIntents.GuildMessageReactions | GatewayIntents.DirectMessages | GatewayIntents.DirectMessageReactions }, new CommandServiceConfig { CaseSensitiveCommands = false, DefaultRunMode = RunMode.Async, LogLevel = LogSeverity.Verbose, IgnoreExtraArgs = true }, new MessageServiceConfig { Prefix = Configuration.Prefix, AltPrefix = Configuration.AltPrefix } ).ConfigureAwait(false); Log.Info(Key, "Loaded Skuld v" + SkuldAppContext.Skuld.Key.Version); await StartBotAsync().ConfigureAwait(false); await Task.Delay(-1).ConfigureAwait(false); await StopBotAsync(Key); WebSocket.ShutdownServer(); Environment.Exit(0); }