public async Task Status(CommandContext ctx) { await ctx.TriggerTypingAsync(); string lang = Config.GetLang(ctx.Guild.Id.ToString()); IReadOnlyList <DiscordChannel> channelList = await ctx.Guild.GetChannelsAsync(); string[] list = channelList.Cast <DiscordChannel>().Select(x => x.Id.ToString()).ToArray(); JObject streams = EventStreams.GetData(list); // Inform about streams if they exist on a server string streamingMsg = ""; if (streams.Count > 0) { TimeSpan timestamp = DateTime.UtcNow - EventStreams.LatestTimestamp; streamingMsg = " " + Locale.GetMessage("configuring-status-streaming", lang, (int)timestamp.TotalMinutes, timestamp.Seconds); // Restart the stream if it is offline for five minutes if (timestamp.TotalMinutes > 5) { Program.LogMessage("EventStreams restart was requested from !status command.", "EventStreams"); EventStreams.Init(); } } // Respond to message await ctx.RespondAsync(Locale.GetMessage("configuring-status", lang) + streamingMsg); }
/// <summary> /// Initialise the bot and keep it running /// </summary> public async Task Run() { // Set proper TLS settings ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; // Check for a token string tokenPath = @"token.txt"; if (!File.Exists(tokenPath)) { Console.WriteLine("Please create a file called \"token.txt\" before running the bot!"); Console.WriteLine("[Press any key to exit...]"); Console.ReadKey(); Environment.Exit(0); } Token = File.ReadAllText(tokenPath, Encoding.Default); // Get JSON config file Config.Init(); // Initialise Discord client Client = new DiscordClient(new DiscordConfiguration() { AutoReconnect = true, LargeThreshold = 250, MinimumLogLevel = LogLevel.Information, Token = Token, TokenType = TokenType.Bot, }); // Initialise events LogMessage($"DiscordWikiBot, version {Version}"); // Get default locale Locale.Init(); // Get site information and start linking bot LogMessage("Getting wiki site information"); Linking.Init(); // Methods for linking bot Client.MessageCreated += (s, e) => { Task.Run(async() => { await Linking.Answer(s, e); }); return(Task.CompletedTask); }; Client.MessageUpdated += (s, e) => { Task.Run(async() => { await Linking.Edit(s, e); }); return(Task.CompletedTask); }; Client.MessageDeleted += Linking.Delete; Client.MessagesBulkDeleted += Linking.BulkDelete; // Start EventStreams if (Config.GetDomain() != null) { EventStreams.Init(); } // Start Translatewiki fetches if (Config.GetTWChannel() != null && Config.GetTWLang() != null) { TranslateWiki.Init(); } // Set some events for logging the information Client.Ready += Client_Ready; Client.GuildAvailable += Client_GuildAvailable; Client.GuildCreated += Client_GuildCreated; Client.GuildDeleted += Client_GuildDeleted; Client.ClientErrored += Client_ClientErrored; // Initialise commands LogMessage("Setting up commands"); Commands = Client.UseCommandsNext(new CommandsNextConfiguration { StringPrefixes = new[] { Config.GetValue("prefix") }, EnableDms = false, EnableMentionPrefix = true, }); Commands.RegisterCommands <Pinging>(); Commands.RegisterCommands <Configuring>(); if (EventStreams.Enabled) { Commands.RegisterCommands <Streaming>(); } // Set up custom formatter Commands.SetHelpFormatter <LocalisedHelpFormatter>(); // Connect and start LogMessage("Connecting..."); await Client.ConnectAsync(); // Make sure not to close down automatically await CtrlC(); }
public async Task Run() { // Set proper TLS settings ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; // Check for a token string tokenPath = @"token.txt"; if (!File.Exists(tokenPath)) { Console.WriteLine("Please create a file called \"token.txt\" before running the bot!"); Console.WriteLine("[Press any key to exit...]"); Console.ReadKey(); Environment.Exit(0); } Token = File.ReadAllText(tokenPath); // Get JSON config file Config.Init(); // Initialise Discord client Client = new DiscordClient(new DiscordConfiguration() { AutoReconnect = true, LargeThreshold = 250, LogLevel = LogLevel.Info, Token = Token, TokenType = TokenType.Bot, UseInternalLogHandler = true, }); // Initialise events Client.DebugLogger.LogMessage(LogLevel.Info, "DiscordWikiBot", "Initialising events", DateTime.Now); // Get locale Client.DebugLogger.LogMessage(LogLevel.Info, "DiscordWikiBot", string.Format("Loading {0} locale", Config.GetLang().ToUpper()), DateTime.Now); Locale.Init(); // Get site information and start linking bot Client.DebugLogger.LogMessage(LogLevel.Info, "DiscordWikiBot", "Getting wiki site information", DateTime.Now); Linking.Init(); // Methods for linking bot Client.MessageCreated += Linking.Answer; Client.MessageUpdated += Linking.Edit; Client.MessageDeleted += Linking.Delete; // Start EventStreams if (Config.GetDomain() != "") { EventStreams.Init(); } // Start Translatewiki fetches if (Config.GetTWChannel() != null && Config.GetTWLang() != null) { Client.DebugLogger.LogMessage(LogLevel.Info, "DiscordWikiBot", $"Turning on Translatewiki ({Config.GetTWLang()})", DateTime.Now); TranslateWiki.Init(); } // Set some events for logging the information Client.Ready += Client_Ready; Client.GuildAvailable += Client_GuildAvailable; Client.ClientErrored += Client_ClientErrored; // Initialise commands Client.DebugLogger.LogMessage(LogLevel.Info, "DiscordWikiBot", "Setting up commands", DateTime.Now); Commands = Client.UseCommandsNext(new CommandsNextConfiguration { StringPrefix = Config.GetValue("prefix"), EnableDms = false, EnableMentionPrefix = true, }); Commands.RegisterCommands <Configuring>(); Commands.RegisterCommands <Streaming>(); // Set up custom formatter Commands.SetHelpFormatter <LocalisedHelpFormatter>(); // Connect and start Client.DebugLogger.LogMessage(LogLevel.Info, "DiscordWikiBot", "Connecting...", DateTime.Now); await Client.ConnectAsync(); // Make sure not to close down automatically await CtrlC(); }