Log result failures with stack traces (#282)
This feature will improve the debugging experience for developers by providing the information about *where exactly* a result has failed --------- Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com>
This commit is contained in:
parent
5cc04e9cc3
commit
309d900067
21 changed files with 145 additions and 71 deletions
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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);
|
||||
|
|
Reference in a new issue