diff --git a/src/Attributes/StaticCallersOnlyAttribute.cs b/src/Attributes/StaticCallersOnlyAttribute.cs
new file mode 100644
index 0000000..e8787bf
--- /dev/null
+++ b/src/Attributes/StaticCallersOnlyAttribute.cs
@@ -0,0 +1,8 @@
+namespace Octobot.Attributes;
+
+///
+/// Any property marked with should only be accessed by static methods.
+/// Such properties may be used to provide dependencies where it is not possible to acquire them through normal means.
+///
+[AttributeUsage(AttributeTargets.Property)]
+public sealed class StaticCallersOnlyAttribute : Attribute;
diff --git a/src/Commands/AboutCommandGroup.cs b/src/Commands/AboutCommandGroup.cs
index ebfe0f2..b37b2f0 100644
--- a/src/Commands/AboutCommandGroup.cs
+++ b/src/Commands/AboutCommandGroup.cs
@@ -73,7 +73,7 @@ public class AboutCommandGroup : CommandGroup
var botResult = await _userApi.GetCurrentUserAsync(CancellationToken);
if (!botResult.IsDefined(out var bot))
{
- return Result.FromError(botResult);
+ return ResultExtensions.FromError(botResult);
}
var cfg = await _guildData.GetSettings(guildId, CancellationToken);
diff --git a/src/Commands/BanCommandGroup.cs b/src/Commands/BanCommandGroup.cs
index 30cff14..ef5e9a4 100644
--- a/src/Commands/BanCommandGroup.cs
+++ b/src/Commands/BanCommandGroup.cs
@@ -88,19 +88,19 @@ public class BanCommandGroup : CommandGroup
var botResult = await _userApi.GetCurrentUserAsync(CancellationToken);
if (!botResult.IsDefined(out var bot))
{
- return Result.FromError(botResult);
+ return ResultExtensions.FromError(botResult);
}
var executorResult = await _userApi.GetUserAsync(executorId, CancellationToken);
if (!executorResult.IsDefined(out var executor))
{
- return Result.FromError(executorResult);
+ return ResultExtensions.FromError(executorResult);
}
var guildResult = await _guildApi.GetGuildAsync(guildId, ct: CancellationToken);
if (!guildResult.IsDefined(out var guild))
{
- return Result.FromError(guildResult);
+ return ResultExtensions.FromError(guildResult);
}
var data = await _guildData.GetData(guild.ID, CancellationToken);
@@ -144,7 +144,7 @@ public class BanCommandGroup : CommandGroup
= await _utility.CheckInteractionsAsync(guild.ID, executor.ID, target.ID, "Ban", ct);
if (!interactionResult.IsSuccess)
{
- return Result.FromError(interactionResult);
+ return ResultExtensions.FromError(interactionResult);
}
if (interactionResult.Entity is not null)
@@ -191,7 +191,7 @@ public class BanCommandGroup : CommandGroup
if (!banResult.IsSuccess)
{
memberData.BannedUntil = null;
- return Result.FromError(banResult.Error);
+ return ResultExtensions.FromError(banResult);
}
memberData.Roles.Clear();
@@ -242,14 +242,14 @@ public class BanCommandGroup : CommandGroup
var botResult = await _userApi.GetCurrentUserAsync(CancellationToken);
if (!botResult.IsDefined(out var bot))
{
- return Result.FromError(botResult);
+ return ResultExtensions.FromError(botResult);
}
// Needed to get the tag and avatar
var executorResult = await _userApi.GetUserAsync(executorId, CancellationToken);
if (!executorResult.IsDefined(out var executor))
{
- return Result.FromError(executorResult);
+ return ResultExtensions.FromError(executorResult);
}
var data = await _guildData.GetData(guildId, CancellationToken);
@@ -276,7 +276,7 @@ public class BanCommandGroup : CommandGroup
ct);
if (!unbanResult.IsSuccess)
{
- return Result.FromError(unbanResult.Error);
+ return ResultExtensions.FromError(unbanResult);
}
data.GetOrCreateMemberData(target.ID).BannedUntil = null;
diff --git a/src/Commands/ClearCommandGroup.cs b/src/Commands/ClearCommandGroup.cs
index 395810f..70afede 100644
--- a/src/Commands/ClearCommandGroup.cs
+++ b/src/Commands/ClearCommandGroup.cs
@@ -75,20 +75,20 @@ public class ClearCommandGroup : CommandGroup
var botResult = await _userApi.GetCurrentUserAsync(CancellationToken);
if (!botResult.IsDefined(out var bot))
{
- return Result.FromError(botResult);
+ return ResultExtensions.FromError(botResult);
}
var executorResult = await _userApi.GetUserAsync(executorId, CancellationToken);
if (!executorResult.IsDefined(out var executor))
{
- return Result.FromError(executorResult);
+ return ResultExtensions.FromError(executorResult);
}
var messagesResult = await _channelApi.GetChannelMessagesAsync(
channelId, limit: amount + 1, ct: CancellationToken);
if (!messagesResult.IsDefined(out var messages))
{
- return Result.FromError(messagesResult);
+ return ResultExtensions.FromError(messagesResult);
}
var data = await _guildData.GetData(guildId, CancellationToken);
@@ -133,7 +133,7 @@ public class ClearCommandGroup : CommandGroup
channelId, idList, executor.GetTag().EncodeHeader(), ct);
if (!deleteResult.IsSuccess)
{
- return Result.FromError(deleteResult.Error);
+ return ResultExtensions.FromError(deleteResult);
}
_utility.LogAction(
diff --git a/src/Commands/Events/ErrorLoggingPostExecutionEvent.cs b/src/Commands/Events/ErrorLoggingPostExecutionEvent.cs
index 6f39690..7e97e5c 100644
--- a/src/Commands/Events/ErrorLoggingPostExecutionEvent.cs
+++ b/src/Commands/Events/ErrorLoggingPostExecutionEvent.cs
@@ -59,7 +59,7 @@ public class ErrorLoggingPostExecutionEvent : IPostExecutionEvent
var botResult = await _userApi.GetCurrentUserAsync(ct);
if (!botResult.IsDefined(out var bot))
{
- return Result.FromError(botResult);
+ return ResultExtensions.FromError(botResult);
}
var embed = new EmbedBuilder().WithSmallTitle(Messages.CommandExecutionFailed, bot)
@@ -78,10 +78,11 @@ public class ErrorLoggingPostExecutionEvent : IPostExecutionEvent
IsDisabled: BuildInfo.IsDirty
);
- return await _feedback.SendContextualEmbedResultAsync(embed,
+ return ResultExtensions.FromError(await _feedback.SendContextualEmbedResultAsync(embed,
new FeedbackMessageOptions(MessageComponents: new[]
{
new ActionRowComponent(new[] { issuesButton })
- }), ct);
+ }), ct)
+ );
}
}
diff --git a/src/Commands/KickCommandGroup.cs b/src/Commands/KickCommandGroup.cs
index 59c4045..5149ad4 100644
--- a/src/Commands/KickCommandGroup.cs
+++ b/src/Commands/KickCommandGroup.cs
@@ -80,19 +80,19 @@ public class KickCommandGroup : CommandGroup
var botResult = await _userApi.GetCurrentUserAsync(CancellationToken);
if (!botResult.IsDefined(out var bot))
{
- return Result.FromError(botResult);
+ return ResultExtensions.FromError(botResult);
}
var executorResult = await _userApi.GetUserAsync(executorId, CancellationToken);
if (!executorResult.IsDefined(out var executor))
{
- return Result.FromError(executorResult);
+ return ResultExtensions.FromError(executorResult);
}
var guildResult = await _guildApi.GetGuildAsync(guildId, ct: CancellationToken);
if (!guildResult.IsDefined(out var guild))
{
- return Result.FromError(guildResult);
+ return ResultExtensions.FromError(guildResult);
}
var data = await _guildData.GetData(guildId, CancellationToken);
@@ -118,7 +118,7 @@ public class KickCommandGroup : CommandGroup
= await _utility.CheckInteractionsAsync(guild.ID, executor.ID, target.ID, "Kick", ct);
if (!interactionResult.IsSuccess)
{
- return Result.FromError(interactionResult);
+ return ResultExtensions.FromError(interactionResult);
}
if (interactionResult.Entity is not null)
@@ -152,7 +152,7 @@ public class KickCommandGroup : CommandGroup
if (!kickResult.IsSuccess)
{
memberData.Kicked = false;
- return Result.FromError(kickResult.Error);
+ return ResultExtensions.FromError(kickResult);
}
memberData.Roles.Clear();
diff --git a/src/Commands/MuteCommandGroup.cs b/src/Commands/MuteCommandGroup.cs
index c2542e8..5ac6a04 100644
--- a/src/Commands/MuteCommandGroup.cs
+++ b/src/Commands/MuteCommandGroup.cs
@@ -85,13 +85,13 @@ public class MuteCommandGroup : CommandGroup
var botResult = await _userApi.GetCurrentUserAsync(CancellationToken);
if (!botResult.IsDefined(out var bot))
{
- return Result.FromError(botResult);
+ return ResultExtensions.FromError(botResult);
}
var executorResult = await _userApi.GetUserAsync(executorId, CancellationToken);
if (!executorResult.IsDefined(out var executor))
{
- return Result.FromError(executorResult);
+ return ResultExtensions.FromError(executorResult);
}
var data = await _guildData.GetData(guildId, CancellationToken);
@@ -130,7 +130,7 @@ public class MuteCommandGroup : CommandGroup
guildId, executor.ID, target.ID, "Mute", ct);
if (!interactionResult.IsSuccess)
{
- return Result.FromError(interactionResult);
+ return ResultExtensions.FromError(interactionResult);
}
if (interactionResult.Entity is not null)
@@ -146,7 +146,7 @@ public class MuteCommandGroup : CommandGroup
var muteMethodResult = await SelectMuteMethodAsync(executor, target, reason, duration, guildId, data, bot, until, ct);
if (!muteMethodResult.IsSuccess)
{
- return muteMethodResult;
+ return ResultExtensions.FromError(muteMethodResult);
}
var title = string.Format(Messages.UserMuted, target.GetTag());
@@ -257,14 +257,14 @@ public class MuteCommandGroup : CommandGroup
var botResult = await _userApi.GetCurrentUserAsync(CancellationToken);
if (!botResult.IsDefined(out var bot))
{
- return Result.FromError(botResult);
+ return ResultExtensions.FromError(botResult);
}
// Needed to get the tag and avatar
var executorResult = await _userApi.GetUserAsync(executorId, CancellationToken);
if (!executorResult.IsDefined(out var executor))
{
- return Result.FromError(executorResult);
+ return ResultExtensions.FromError(executorResult);
}
var data = await _guildData.GetData(guildId, CancellationToken);
@@ -291,7 +291,7 @@ public class MuteCommandGroup : CommandGroup
guildId, executor.ID, target.ID, "Unmute", ct);
if (!interactionResult.IsSuccess)
{
- return Result.FromError(interactionResult);
+ return ResultExtensions.FromError(interactionResult);
}
if (interactionResult.Entity is not null)
@@ -324,14 +324,14 @@ public class MuteCommandGroup : CommandGroup
await RemoveMuteRoleAsync(executor, target, reason, guildId, memberData, CancellationToken);
if (!removeMuteRoleAsync.IsSuccess)
{
- return Result.FromError(removeMuteRoleAsync.Error);
+ return ResultExtensions.FromError(removeMuteRoleAsync);
}
var removeTimeoutResult =
await RemoveTimeoutAsync(executor, target, reason, guildId, communicationDisabledUntil, CancellationToken);
if (!removeTimeoutResult.IsSuccess)
{
- return Result.FromError(removeTimeoutResult.Error);
+ return ResultExtensions.FromError(removeTimeoutResult);
}
var title = string.Format(Messages.UserUnmuted, target.GetTag());
diff --git a/src/Commands/PingCommandGroup.cs b/src/Commands/PingCommandGroup.cs
index f74e5e2..d64c6dd 100644
--- a/src/Commands/PingCommandGroup.cs
+++ b/src/Commands/PingCommandGroup.cs
@@ -64,7 +64,7 @@ public class PingCommandGroup : CommandGroup
var botResult = await _userApi.GetCurrentUserAsync(CancellationToken);
if (!botResult.IsDefined(out var bot))
{
- return Result.FromError(botResult);
+ return ResultExtensions.FromError(botResult);
}
var cfg = await _guildData.GetSettings(guildId, CancellationToken);
@@ -84,7 +84,7 @@ public class PingCommandGroup : CommandGroup
channelId, limit: 1, ct: ct);
if (!lastMessageResult.IsDefined(out var lastMessage))
{
- return Result.FromError(lastMessageResult);
+ return ResultExtensions.FromError(lastMessageResult);
}
latency = DateTimeOffset.UtcNow.Subtract(lastMessage.Single().Timestamp).TotalMilliseconds;
diff --git a/src/Commands/RemindCommandGroup.cs b/src/Commands/RemindCommandGroup.cs
index f9c006e..aa1ef7e 100644
--- a/src/Commands/RemindCommandGroup.cs
+++ b/src/Commands/RemindCommandGroup.cs
@@ -63,13 +63,13 @@ public class RemindCommandGroup : CommandGroup
var botResult = await _userApi.GetCurrentUserAsync(CancellationToken);
if (!botResult.IsDefined(out var bot))
{
- return Result.FromError(botResult);
+ return ResultExtensions.FromError(botResult);
}
var executorResult = await _userApi.GetUserAsync(executorId, CancellationToken);
if (!executorResult.IsDefined(out var executor))
{
- return Result.FromError(executorResult);
+ return ResultExtensions.FromError(executorResult);
}
var data = await _guildData.GetData(guildId, CancellationToken);
@@ -134,13 +134,13 @@ public class RemindCommandGroup : CommandGroup
var botResult = await _userApi.GetCurrentUserAsync(CancellationToken);
if (!botResult.IsDefined(out var bot))
{
- return Result.FromError(botResult);
+ return ResultExtensions.FromError(botResult);
}
var executorResult = await _userApi.GetUserAsync(executorId, CancellationToken);
if (!executorResult.IsDefined(out var executor))
{
- return Result.FromError(executorResult);
+ return ResultExtensions.FromError(executorResult);
}
var data = await _guildData.GetData(guildId, CancellationToken);
@@ -226,13 +226,13 @@ public class RemindCommandGroup : CommandGroup
var botResult = await _userApi.GetCurrentUserAsync(CancellationToken);
if (!botResult.IsDefined(out var bot))
{
- return Result.FromError(botResult);
+ return ResultExtensions.FromError(botResult);
}
var executorResult = await _userApi.GetUserAsync(executorId, CancellationToken);
if (!executorResult.IsDefined(out var executor))
{
- return Result.FromError(executorResult);
+ return ResultExtensions.FromError(executorResult);
}
var data = await _guildData.GetData(guildId, CancellationToken);
@@ -343,7 +343,7 @@ public class RemindCommandGroup : CommandGroup
var botResult = await _userApi.GetCurrentUserAsync(CancellationToken);
if (!botResult.IsDefined(out var bot))
{
- return Result.FromError(botResult);
+ return ResultExtensions.FromError(botResult);
}
var data = await _guildData.GetData(guildId, CancellationToken);
diff --git a/src/Commands/SettingsCommandGroup.cs b/src/Commands/SettingsCommandGroup.cs
index 97ebc32..30150ee 100644
--- a/src/Commands/SettingsCommandGroup.cs
+++ b/src/Commands/SettingsCommandGroup.cs
@@ -98,7 +98,7 @@ public class SettingsCommandGroup : CommandGroup
var botResult = await _userApi.GetCurrentUserAsync(CancellationToken);
if (!botResult.IsDefined(out var bot))
{
- return Result.FromError(botResult);
+ return ResultExtensions.FromError(botResult);
}
var cfg = await _guildData.GetSettings(guildId, CancellationToken);
@@ -181,13 +181,13 @@ public class SettingsCommandGroup : CommandGroup
var botResult = await _userApi.GetCurrentUserAsync(CancellationToken);
if (!botResult.IsDefined(out var bot))
{
- return Result.FromError(botResult);
+ return ResultExtensions.FromError(botResult);
}
var executorResult = await _userApi.GetUserAsync(executorId, CancellationToken);
if (!executorResult.IsDefined(out var executor))
{
- return Result.FromError(executorResult);
+ return ResultExtensions.FromError(executorResult);
}
var data = await _guildData.GetData(guildId, CancellationToken);
@@ -254,7 +254,7 @@ public class SettingsCommandGroup : CommandGroup
var botResult = await _userApi.GetCurrentUserAsync(CancellationToken);
if (!botResult.IsDefined(out var bot))
{
- return Result.FromError(botResult);
+ return ResultExtensions.FromError(botResult);
}
var cfg = await _guildData.GetSettings(guildId, CancellationToken);
@@ -274,7 +274,7 @@ public class SettingsCommandGroup : CommandGroup
var resetResult = option.Reset(cfg);
if (!resetResult.IsSuccess)
{
- return Result.FromError(resetResult.Error);
+ return ResultExtensions.FromError(resetResult);
}
var embed = new EmbedBuilder().WithSmallTitle(
diff --git a/src/Commands/ToolsCommandGroup.cs b/src/Commands/ToolsCommandGroup.cs
index 9a7c9b4..cc3c2cf 100644
--- a/src/Commands/ToolsCommandGroup.cs
+++ b/src/Commands/ToolsCommandGroup.cs
@@ -81,13 +81,13 @@ public class ToolsCommandGroup : CommandGroup
var botResult = await _userApi.GetCurrentUserAsync(CancellationToken);
if (!botResult.IsDefined(out var bot))
{
- return Result.FromError(botResult);
+ return ResultExtensions.FromError(botResult);
}
var executorResult = await _userApi.GetUserAsync(executorId, CancellationToken);
if (!executorResult.IsDefined(out var executor))
{
- return Result.FromError(executorResult);
+ return ResultExtensions.FromError(executorResult);
}
var data = await _guildData.GetData(guildId, CancellationToken);
@@ -274,13 +274,13 @@ public class ToolsCommandGroup : CommandGroup
var botResult = await _userApi.GetCurrentUserAsync(CancellationToken);
if (!botResult.IsDefined(out var bot))
{
- return Result.FromError(botResult);
+ return ResultExtensions.FromError(botResult);
}
var guildResult = await _guildApi.GetGuildAsync(guildId, ct: CancellationToken);
if (!guildResult.IsDefined(out var guild))
{
- return Result.FromError(guildResult);
+ return ResultExtensions.FromError(guildResult);
}
var data = await _guildData.GetData(guildId, CancellationToken);
@@ -353,7 +353,7 @@ public class ToolsCommandGroup : CommandGroup
var executorResult = await _userApi.GetUserAsync(executorId, CancellationToken);
if (!executorResult.IsDefined(out var executor))
{
- return Result.FromError(executorResult);
+ return ResultExtensions.FromError(executorResult);
}
var data = await _guildData.GetData(guildId, CancellationToken);
@@ -439,13 +439,13 @@ public class ToolsCommandGroup : CommandGroup
var botResult = await _userApi.GetCurrentUserAsync(CancellationToken);
if (!botResult.IsDefined(out var bot))
{
- return Result.FromError(botResult);
+ return ResultExtensions.FromError(botResult);
}
var executorResult = await _userApi.GetUserAsync(executorId, CancellationToken);
if (!executorResult.IsDefined(out var executor))
{
- return Result.FromError(executorResult);
+ return ResultExtensions.FromError(executorResult);
}
var data = await _guildData.GetData(guildId, CancellationToken);
@@ -524,7 +524,7 @@ public class ToolsCommandGroup : CommandGroup
var botResult = await _userApi.GetCurrentUserAsync(CancellationToken);
if (!botResult.IsDefined(out var bot))
{
- return Result.FromError(botResult);
+ return ResultExtensions.FromError(botResult);
}
var data = await _guildData.GetData(guildId, CancellationToken);
diff --git a/src/Extensions/ChannelApiExtensions.cs b/src/Extensions/ChannelApiExtensions.cs
index 12ccf35..99eff67 100644
--- a/src/Extensions/ChannelApiExtensions.cs
+++ b/src/Extensions/ChannelApiExtensions.cs
@@ -20,7 +20,7 @@ public static class ChannelApiExtensions
{
if (!embedResult.IsDefined() || !embedResult.Value.IsDefined(out var embed))
{
- return Result.FromError(embedResult.Value);
+ return ResultExtensions.FromError(embedResult.Value);
}
return (Result)await channelApi.CreateMessageAsync(channelId, message, nonce, isTextToSpeech, new[] { embed },
diff --git a/src/Extensions/FeedbackServiceExtensions.cs b/src/Extensions/FeedbackServiceExtensions.cs
index 40e0d53..e6ef376 100644
--- a/src/Extensions/FeedbackServiceExtensions.cs
+++ b/src/Extensions/FeedbackServiceExtensions.cs
@@ -13,7 +13,7 @@ public static class FeedbackServiceExtensions
{
if (!embedResult.IsDefined(out var embed))
{
- return Result.FromError(embedResult);
+ return ResultExtensions.FromError(embedResult);
}
return (Result)await feedback.SendContextualEmbedAsync(embed, options, ct);
diff --git a/src/Extensions/ResultExtensions.cs b/src/Extensions/ResultExtensions.cs
new file mode 100644
index 0000000..f456dac
--- /dev/null
+++ b/src/Extensions/ResultExtensions.cs
@@ -0,0 +1,61 @@
+using System.Diagnostics;
+using Microsoft.Extensions.Logging;
+using Remora.Results;
+
+namespace Octobot.Extensions;
+
+public static class ResultExtensions
+{
+ public static Result FromError(Result result)
+ {
+ LogResultStackTrace(result);
+
+ return result;
+ }
+
+ public static Result FromError(Result result)
+ {
+ var casted = (Result)result;
+ LogResultStackTrace(casted);
+
+ return casted;
+ }
+
+ [Conditional("DEBUG")]
+ private static void LogResultStackTrace(Result result)
+ {
+ if (Octobot.StaticLogger is null || result.IsSuccess)
+ {
+ return;
+ }
+
+ Octobot.StaticLogger.LogError("{ErrorType}: {ErrorMessage}{NewLine}{StackTrace}",
+ result.Error.GetType().FullName, result.Error.Message, Environment.NewLine, ConstructStackTrace());
+
+ var inner = result.Inner;
+ while (inner is { IsSuccess: false })
+ {
+ Octobot.StaticLogger.LogError("Caused by: {ResultType}: {ResultMessage}",
+ inner.Error.GetType().FullName, inner.Error.Message);
+
+ inner = inner.Inner;
+ }
+ }
+
+ private static string ConstructStackTrace()
+ {
+ var stackArray = new StackTrace(3, true).ToString().Split(Environment.NewLine).ToList();
+ for (var i = stackArray.Count - 1; i >= 0; i--)
+ {
+ var frame = stackArray[i];
+ var trimmed = frame.TrimStart();
+ if (trimmed.StartsWith("at System.Threading", StringComparison.Ordinal)
+ || trimmed.StartsWith("at System.Runtime.CompilerServices", StringComparison.Ordinal))
+ {
+ stackArray.RemoveAt(i);
+ }
+ }
+
+ return string.Join(Environment.NewLine, stackArray);
+ }
+}
diff --git a/src/Octobot.cs b/src/Octobot.cs
index e0d9b07..a4871f4 100644
--- a/src/Octobot.cs
+++ b/src/Octobot.cs
@@ -2,6 +2,7 @@ using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
+using Octobot.Attributes;
using Octobot.Commands.Events;
using Octobot.Services;
using Octobot.Services.Update;
@@ -25,10 +26,14 @@ public sealed class Octobot
public static readonly AllowedMentions NoMentions = new(
Array.Empty(), Array.Empty(), Array.Empty());
+ [StaticCallersOnly]
+ public static ILogger? StaticLogger { get; private set; }
+
public static async Task Main(string[] args)
{
var host = CreateHostBuilder(args).UseConsoleLifetime().Build();
var services = host.Services;
+ StaticLogger = services.GetRequiredService>();
var slashService = services.GetRequiredService();
// Providing a guild ID to this call will result in command duplicates!
diff --git a/src/Responders/GuildLoadedResponder.cs b/src/Responders/GuildLoadedResponder.cs
index e60dd4f..80e8735 100644
--- a/src/Responders/GuildLoadedResponder.cs
+++ b/src/Responders/GuildLoadedResponder.cs
@@ -57,7 +57,7 @@ public class GuildLoadedResponder : IResponder
var botResult = await _userApi.GetCurrentUserAsync(ct);
if (!botResult.IsDefined(out var bot))
{
- return Result.FromError(botResult);
+ return ResultExtensions.FromError(botResult);
}
if (data.DataLoadFailed)
@@ -68,7 +68,7 @@ public class GuildLoadedResponder : IResponder
var ownerResult = await _userApi.GetUserAsync(guild.OwnerID, ct);
if (!ownerResult.IsDefined(out var owner))
{
- return Result.FromError(ownerResult);
+ return ResultExtensions.FromError(ownerResult);
}
_logger.LogInformation("Loaded guild \"{Name}\" ({ID}) owned by {Owner} ({OwnerID}) with {MemberCount} members",
@@ -103,7 +103,7 @@ public class GuildLoadedResponder : IResponder
var channelResult = await _utility.GetEmergencyFeedbackChannel(guild, data, ct);
if (!channelResult.IsDefined(out var channel))
{
- return Result.FromError(channelResult);
+ return ResultExtensions.FromError(channelResult);
}
var errorEmbed = new EmbedBuilder()
diff --git a/src/Responders/GuildMemberJoinedResponder.cs b/src/Responders/GuildMemberJoinedResponder.cs
index 012bfad..05ceb2f 100644
--- a/src/Responders/GuildMemberJoinedResponder.cs
+++ b/src/Responders/GuildMemberJoinedResponder.cs
@@ -48,7 +48,7 @@ public class GuildMemberJoinedResponder : IResponder
var returnRolesResult = await TryReturnRolesAsync(cfg, memberData, gatewayEvent.GuildID, user.ID, ct);
if (!returnRolesResult.IsSuccess)
{
- return Result.FromError(returnRolesResult.Error);
+ return ResultExtensions.FromError(returnRolesResult);
}
if (GuildSettings.WelcomeMessagesChannel.Get(cfg).Empty()
@@ -65,7 +65,7 @@ public class GuildMemberJoinedResponder : IResponder
var guildResult = await _guildApi.GetGuildAsync(gatewayEvent.GuildID, ct: ct);
if (!guildResult.IsDefined(out var guild))
{
- return Result.FromError(guildResult);
+ return ResultExtensions.FromError(guildResult);
}
var embed = new EmbedBuilder()
diff --git a/src/Responders/GuildMemberLeftResponder.cs b/src/Responders/GuildMemberLeftResponder.cs
index 5c6db36..b029c96 100644
--- a/src/Responders/GuildMemberLeftResponder.cs
+++ b/src/Responders/GuildMemberLeftResponder.cs
@@ -55,7 +55,7 @@ public class GuildMemberLeftResponder : IResponder
var guildResult = await _guildApi.GetGuildAsync(gatewayEvent.GuildID, ct: ct);
if (!guildResult.IsDefined(out var guild))
{
- return Result.FromError(guildResult);
+ return ResultExtensions.FromError(guildResult);
}
var embed = new EmbedBuilder()
@@ -70,4 +70,3 @@ public class GuildMemberLeftResponder : IResponder
allowedMentions: Octobot.NoMentions, ct: ct);
}
}
-
diff --git a/src/Responders/MessageDeletedResponder.cs b/src/Responders/MessageDeletedResponder.cs
index 52be8c9..7d788a7 100644
--- a/src/Responders/MessageDeletedResponder.cs
+++ b/src/Responders/MessageDeletedResponder.cs
@@ -51,7 +51,7 @@ public class MessageDeletedResponder : IResponder
var messageResult = await _channelApi.GetChannelMessageAsync(gatewayEvent.ChannelID, gatewayEvent.ID, ct);
if (!messageResult.IsDefined(out var message))
{
- return Result.FromError(messageResult);
+ return ResultExtensions.FromError(messageResult);
}
if (string.IsNullOrWhiteSpace(message.Content))
@@ -63,7 +63,7 @@ public class MessageDeletedResponder : IResponder
guildId, actionType: AuditLogEvent.MessageDelete, limit: 1, ct: ct);
if (!auditLogResult.IsDefined(out var auditLogPage))
{
- return Result.FromError(auditLogResult);
+ return ResultExtensions.FromError(auditLogResult);
}
var auditLog = auditLogPage.AuditLogEntries.Single();
@@ -78,7 +78,7 @@ public class MessageDeletedResponder : IResponder
if (!deleterResult.IsDefined(out var deleter))
{
- return Result.FromError(deleterResult);
+ return ResultExtensions.FromError(deleterResult);
}
Messages.Culture = GuildSettings.Language.Get(cfg);
diff --git a/src/Services/Update/MemberUpdateService.cs b/src/Services/Update/MemberUpdateService.cs
index dfe8219..a21cdd4 100644
--- a/src/Services/Update/MemberUpdateService.cs
+++ b/src/Services/Update/MemberUpdateService.cs
@@ -97,7 +97,7 @@ public sealed partial class MemberUpdateService : BackgroundService
= await _utility.CheckInteractionsAsync(guildId, null, id, "Update", ct);
if (!interactionResult.IsSuccess)
{
- return Result.FromError(interactionResult);
+ return ResultExtensions.FromError(interactionResult);
}
var canInteract = interactionResult.Entity is null;
@@ -247,7 +247,7 @@ public sealed partial class MemberUpdateService : BackgroundService
reminder.ChannelId.ToSnowflake(), Mention.User(user), embedResult: embed, ct: ct);
if (!messageResult.IsSuccess)
{
- return messageResult;
+ return ResultExtensions.FromError(messageResult);
}
data.Reminders.Remove(reminder);
diff --git a/src/Services/Update/ScheduledEventUpdateService.cs b/src/Services/Update/ScheduledEventUpdateService.cs
index ac5c109..bce9996 100644
--- a/src/Services/Update/ScheduledEventUpdateService.cs
+++ b/src/Services/Update/ScheduledEventUpdateService.cs
@@ -53,7 +53,7 @@ public sealed class ScheduledEventUpdateService : BackgroundService
var eventsResult = await _eventApi.ListScheduledEventsForGuildAsync(guildId, ct: ct);
if (!eventsResult.IsDefined(out var events))
{
- return Result.FromError(eventsResult);
+ return ResultExtensions.FromError(eventsResult);
}
SyncScheduledEvents(data, events);
@@ -204,7 +204,7 @@ public sealed class ScheduledEventUpdateService : BackgroundService
if (!embedDescriptionResult.IsDefined(out var embedDescription))
{
- return Result.FromError(embedDescriptionResult);
+ return ResultExtensions.FromError(embedDescriptionResult);
}
var embed = new EmbedBuilder()
@@ -298,12 +298,12 @@ public sealed class ScheduledEventUpdateService : BackgroundService
scheduledEvent, data, ct);
if (!contentResult.IsDefined(out var content))
{
- return Result.FromError(contentResult);
+ return ResultExtensions.FromError(contentResult);
}
if (!embedDescriptionResult.IsDefined(out var embedDescription))
{
- return Result.FromError(embedDescriptionResult);
+ return ResultExtensions.FromError(embedDescriptionResult);
}
var startedEmbed = new EmbedBuilder()
@@ -416,7 +416,7 @@ public sealed class ScheduledEventUpdateService : BackgroundService
scheduledEvent, data, ct);
if (!contentResult.IsDefined(out var content))
{
- return Result.FromError(contentResult);
+ return ResultExtensions.FromError(contentResult);
}
var earlyResult = new EmbedBuilder()