70 lines
3 KiB
Markdown
70 lines
3 KiB
Markdown
|
---
|
||
|
uid: Guides.IntFw.PostExecution
|
||
|
title: Post-Command execution
|
||
|
---
|
||
|
|
||
|
# Post-Execution Logic
|
||
|
|
||
|
Interaction Service uses [IResult] to provide information about the state of command execution.
|
||
|
These can be used to log internal exceptions or provide some insight to the command user.
|
||
|
|
||
|
If you are running your commands using `RunMode.Sync` these command results can be retrieved from
|
||
|
the return value of [InteractionService.ExecuteCommandAsync] method or by
|
||
|
registering delegates to Interaction Service events.
|
||
|
|
||
|
If you are using the `RunMode.Async` to run your commands,
|
||
|
you must use the Interaction Service events to get the execution results. When using `RunMode.Async`,
|
||
|
[InteractionService.ExecuteCommandAsync] will always return a successful result.
|
||
|
|
||
|
[InteractionService.ExecuteCommandAsync]: xref:Discord.Interactions.InteractionService.ExecuteCommandAsync*
|
||
|
|
||
|
## Results
|
||
|
|
||
|
Interaction Result come in a handful of different flavours:
|
||
|
|
||
|
1. [AutocompletionResult]: returned by Autocompleters
|
||
|
2. [ExecuteResult]: contains the result of method body execution process
|
||
|
3. [PreconditionGroupResult]: returned by Precondition groups
|
||
|
4. [PreconditionResult]: returned by preconditions
|
||
|
5. [RuntimeResult]: a user implementable result for returning user defined results
|
||
|
6. [SearchResult]: returned by command lookup map
|
||
|
7. [TypeConverterResult]: returned by TypeConverters
|
||
|
|
||
|
> [!NOTE]
|
||
|
> You can either use the [IResult.Error] property of an Interaction result or create type check for the
|
||
|
> aforementioned result types to branch out your post-execution logic to handle different situations.
|
||
|
|
||
|
|
||
|
[AutocompletionResult]: xref:Discord.AutocompleteResult
|
||
|
[ExecuteResult]: xref:Discord.Interactions.ExecuteResult
|
||
|
[PreconditionGroupResult]: xref:Discord.Interactions.PreconditionGroupResult
|
||
|
[PreconditionResult]: xref:Discord.Interactions.PreconditionResult
|
||
|
[SearchResult]: xref:Discord.Interactions.SearchResult`1
|
||
|
[TypeConverterResult]: xref:Discord.Interactions.TypeConverterResult
|
||
|
[IResult.Error]: xref:Discord.Interactions.IResult.Error*
|
||
|
|
||
|
## CommandExecuted Events
|
||
|
|
||
|
Every time a command gets executed, Interaction Service raises a `CommandExecuted` event.
|
||
|
These events can be used to create a post-execution pipeline.
|
||
|
|
||
|
[!code-csharp[Error Review](samples/postexecution/error_review.cs)]
|
||
|
|
||
|
## Log Event
|
||
|
|
||
|
InteractionService regularly outputs information about the occuring events to keep the developer informed.
|
||
|
|
||
|
## Runtime Result
|
||
|
|
||
|
Interaction commands allow you to return `Task<RuntimeResult>` to pass on additional information about the command execution
|
||
|
process back to your post-execution logic.
|
||
|
|
||
|
Custom [RuntimeResult] classes can be created by inheriting the base [RuntimeResult] class.
|
||
|
|
||
|
If command execution process reaches the method body of the command and no exceptions are thrown during
|
||
|
the execution of the method body, [RuntimeResult] returned by your command will be accessible by casting/type-checking the
|
||
|
[IResult] parameter of the `CommandExecuted` event delegate.
|
||
|
|
||
|
[RuntimeResult]: xref:Discord.Interactions.RuntimeResult
|
||
|
[IResult]: xref:Discord.Interactions.IResult
|