public void RunCore() { Logging.Log.Instance.DiscordLibraryLevel.Level = System.Diagnostics.SourceLevels.Warning; Console.Write("Discord Authentication Token > "); string DiscordAuthorizationToken = Console.ReadLine(); string ImgurAuthenticationSecret = "Q", OAuthAccessToken = "Q", OAuthRefreshToken = "Q"; Console.Write("Imgur Authentication ID > "); string ImgurAuthenticationID = Console.ReadLine(); Console.Write("Imgur Authentication Secret > "); ImgurAuthenticationSecret = Console.ReadLine(); Console.Write("Imgur OAuth Access Token > "); OAuthAccessToken = Console.ReadLine(); /* * Console.Write("Imgur OAuth Refresh Token > "); * OAuthRefreshToken=Console.ReadLine(); */ SingleThreadReadWriteLock ShutdownLock = new SingleThreadReadWriteLock(); Discord.DiscordInterfacerMain _Discord; Imgur.ImgurInterfacer _Imgur; Application.CacheingTaglistRepository RepositoryTaglists; Program Core = new Program( new ProcessLatestCommentsActivity( _Imgur = new Imgur.ImgurInterfacerMain( new DataAccess.SettingsRepositoryMain(@"DataAccess\Settings1.xml"), ImgurAuthenticationID, ImgurAuthenticationSecret, "wereleven", 77530931, OAuthAccessToken, OAuthRefreshToken, "bearer", DateTimeOffset.UtcNow + TimeSpan.FromDays(11), TimeSpan.FromSeconds(11), 0.1F, 140, "#", ShutdownLock ), new DataAccess.SettingsRepositoryMain(@"DataAccess\Settings1.xml"), RepositoryTaglists = new CacheingTaglistRepository(new DataAccess.TaglistRepositoryMain(@"DataAccess\Taglists.xml")), new ProcessCommentActivity( new Imgur.ImgurCommandParser("@Tagaroo2", _Imgur), new ProcessTagCommandActivity( _Imgur, _Discord = new Discord.DiscordInterfacerMain( DiscordAuthorizationToken, 388542416225042435UL, 388542416225042439UL, 388542416225042439UL, "/", 2000 ), RepositoryTaglists ) ) ), _Imgur, _Discord, new DataAccess.TaglistRepositoryMain(@"DataAccess\Taglists.xml"), new DataAccess.SettingsRepositoryMain(@"DataAccess\Settings1.xml"), ShutdownLock ); Core.Run(); }
/// <returns> /// Non-zero <see cref="Return_ConfigurationLoadError"/> if there is a problem reading Configuration data from Settings.xml; /// non-zero <see cref="Return_ApplicationStartError"/> if there is some other problem during startup, /// 0 otherwise /// </returns> public static int _Main(string SettingsFilePath = null) { CrashHandler ProcessCrashHandler = new CrashHandler(AppDomain.CurrentDomain, Console.Error); //Log to STDOUT by default Log.Instance.AddTraceListener(new TextWriterTraceListener(Console.Out, "StdOutListener"), true); //Log all messages sent to the Bootstrap logger until the application's Configuration can be read and applied (other loggers are not used until after the Configuration is applied) Log.Instance.BootstrapLevel.Level = SourceLevels.Verbose; Log.Bootstrap_.LogInfo("Tagaroo {0}; application starting", typeof(EntryPoint).Assembly.GetName().Version.ToString(3)); //Robustness — Use locale-invariant comparison/formatting/e.t.c. rules by default, to mitigate aginst bugs caused by varying host system locales CultureInfo.CurrentCulture = CultureInfo.DefaultThreadCurrentCulture = CultureInfo.InvariantCulture; SettingsRepository RepositorySettings = new SettingsRepositoryMain( SettingsFilePath ?? DefaultSettingsFilePath ); Log.Bootstrap_.LogVerbose("Initializing Settings repository"); RepositorySettings.Initialize(); Log.Bootstrap_.LogInfo("Loading Configuration"); ApplicationConfiguration Configuration; try{ Configuration = RepositorySettings.LoadConfiguration().GetAwaiter().GetResult(); }catch (DataAccessException Error) { Log.Bootstrap_.LogError("Unable to start; could not load application configuration: " + Error.Message); return(Return_ConfigurationLoadError); } Log.Bootstrap_.LogInfo("Applying Configuration"); Log.Bootstrap_.LogVerbose("Applying Configuration: Logging"); Log.Instance.BootstrapLevel.Level = Configuration.LogLevelBootstrap; Log.Instance.ApplicationLevel.Level = Configuration.LogLevelApplication; Log.Instance.ImgurLevel.Level = Configuration.LogLevelImgur; Log.Instance.DiscordLevel.Level = Configuration.LogLevelDiscord; Log.Instance.DiscordLibraryLevel.Level = Configuration.LogLevelDiscordLibrary; Log.Instance.ImgurBandwidthLevel.Level = Configuration.LogLevelImgurBandwidth; Log.Bootstrap_.LogVerbose("Applying Configuration: Constructing Application"); SingleThreadReadWriteLock ApplicationShutdownLock = new SingleThreadReadWriteLock(); TaglistRepository RepositoryTaglists = new TaglistRepositoryMain( Configuration.TaglistDataFilePath ); CacheingTaglistRepository RepositoryTaglistsCacheing = new CacheingTaglistRepository(RepositoryTaglists); ImgurInterfacer Imgur = new ImgurInterfacerMain( RepositorySettings, Configuration.ImgurClientID, Configuration.ImgurClientSecret, Configuration.ImgurUserAccountUsername, Configuration.ImgurUserAccountID, Configuration.ImgurOAuthAccessToken, Configuration.ImgurOAuthRefreshToken, Configuration.ImgurOAuthTokenType, Configuration.ImgurOAuthTokenExpiry, Configuration.ImgurPostCommentDelay, Configuration.ImgurAPIBandwidthWarningThreshhold, Configuration.ImgurMaximumCommentLengthUTF16CodeUnits, Configuration.ImgurMentionPrefix, ApplicationShutdownLock ); DiscordInterfacer Discord = new DiscordInterfacerMain( Configuration.DiscordAuthenticationToken, Configuration.DiscordGuildID, Configuration.DiscordChannelIDLog, Configuration.DiscordChannelIDCommands, Configuration.DiscordCommandPrefix, Configuration.DiscordMaximumMessageLengthUTF16CodeUnits ); Program Application = new Program( new ProcessLatestCommentsActivity( Imgur, RepositorySettings, RepositoryTaglistsCacheing, new ProcessCommentActivity( new ImgurCommandParser(Configuration.ImgurCommandPrefix, Imgur), new ProcessTagCommandActivity( Imgur, Discord, RepositoryTaglistsCacheing ) ) ), Imgur, Discord, RepositoryTaglists, RepositorySettings, ApplicationShutdownLock ); //Create Discord logging output if configured to do so Log.Bootstrap_.LogVerbose("Applying Configuration: Logging output"); if (Configuration.LogToDiscord) { Log.Instance.AddTraceListener( new DiscordTraceListener("DiscordListener", Discord, new TextWriterTraceListener(Console.Out)), false ); Log.Instance.RemoveTraceListener("StdOutListener"); Log.Instance.DiscordLibrary.AddListener(new TextWriterTraceListener(Console.Out, "StdOutListener")); } Log.Bootstrap_.LogInfo("Configuration applied; starting application"); //Execution will be within this method while the application is running bool startupsuccess = Application.Run(); Log.Bootstrap_.LogInfo("Application ended"); if (!startupsuccess) { return(Return_ApplicationStartError); } return(0); }