/// <summary> /// Logs a specific string, as given in message. /// </summary> /// <param name="message">The message to log.</param> /// <returns>A <see cref="Task"/> representing the asynchronous operation.</returns> public static async Task Log(string message) { PrintWithTime(message); if (loggingFilePath != null) { await WriteLogWithTime(message, false); } DiscordLogQueue.Enqueue(new Task( () => { var sendMessageAsync = loggingChannel?.SendMessageAsync(message); if (sendMessageAsync == null) { return; } try { sendMessageAsync.GetAwaiter().GetResult(); } catch (Exception e) { StopLoggingToChannel(); LogError(e.ToString()).GetAwaiter().GetResult(); Task.Delay(TimeSpan.FromMinutes(1)).GetAwaiter().GetResult(); Shinoa.TryReenableLogging().GetAwaiter().GetResult(); } })); }
/// <summary> /// Logs a specific string, as given in message, as an error. /// </summary> /// <param name="message">The message to log.</param> /// <returns>A <see cref="Task"/> representing the asynchronous operation.</returns> public static async Task LogError(string message) { PrintErrorWithTime(message); if (loggingFilePath != null) { await WriteLogWithTime(message, true); } if (message.Length > 2042) { message = message.Substring(0, 2039) + "..."; } DiscordLogQueue.Enqueue(new Task( () => { var embed = new EmbedBuilder { Title = "Error", Color = new Color(200, 0, 0), Description = $"```{message}```", Author = new EmbedAuthorBuilder { IconUrl = Shinoa.Client.CurrentUser.GetAvatarUrl(), Name = nameof(Shinoa), }, Timestamp = DateTimeOffset.Now, Footer = new EmbedFooterBuilder { Text = Shinoa.VersionString, }, }; var sendMessageAsync = loggingChannel?.SendEmbedAsync(embed); if (sendMessageAsync == null) { return; } try { sendMessageAsync.GetAwaiter().GetResult(); } catch (Exception e) { StopLoggingToChannel(); LogError(e.ToString()).GetAwaiter().GetResult(); Task.Delay(TimeSpan.FromMinutes(1)).GetAwaiter().GetResult(); Shinoa.TryReenableLogging().GetAwaiter().GetResult(); } })); }