Class SocketCommandContext
Represents a WebSocket-based context of a command. This may include the client, guild, channel, user, and message.
public class SocketCommandContext : ICommandContext
- Inheritance
-
SocketCommandContext
- Implements
- Derived
- Inherited Members
Examples
An example of how this class is used the command system can be seen below:
using Discord.Commands;
// Keep in mind your module **must** be public and inherit ModuleBase.
// If it isn't, it will not be discovered by AddModulesAsync!
public class InfoModule : ModuleBase<SocketCommandContext>
{
}
public class CommandHandler
{
private readonly DiscordSocketClient _client;
private readonly CommandService _commands;
// Retrieve client and CommandService instance via ctor
public CommandHandler(DiscordSocketClient client, CommandService commands)
{
_commands = commands;
_client = client;
}
public async Task InstallCommandsAsync()
{
// Hook the MessageReceived event into our command handler
_client.MessageReceived += HandleCommandAsync;
// Here we discover all of the command modules in the entry
// assembly and load them. Starting from Discord.NET 2.0, a
// service provider is required to be passed into the
// module registration method to inject the
// required dependencies.
//
// If you do not use Dependency Injection, pass null.
// See Dependency Injection guide for more information.
await _commands.AddModulesAsync(assembly: Assembly.GetEntryAssembly(),
services: null);
}
private async Task HandleCommandAsync(SocketMessage messageParam)
{
// Don't process the command if it was a system message
var message = messageParam as SocketUserMessage;
if (message == null) return;
// Create a number to track where the prefix ends and the command begins
int argPos = 0;
// Determine if the message is a command based on the prefix and make sure no bots trigger commands
if (!(message.HasCharPrefix('!', ref argPos) ||
message.HasMentionPrefix(_client.CurrentUser, ref argPos)) ||
message.Author.IsBot)
return;
// Create a WebSocket-based command context based on the message
var context = new SocketCommandContext(_client, message);
// Execute the command with the command context we just
// created, along with the service provider for precondition checks.
await _commands.ExecuteAsync(
context: context,
argPos: argPos,
services: null);
}
}
Constructors
SocketCommandContext(DiscordSocketClient, SocketUserMessage)
Initializes a new SocketCommandContext class with the provided client and message.
public SocketCommandContext(DiscordSocketClient client, SocketUserMessage msg)
Parameters
client
DiscordSocketClientThe underlying client.
msg
SocketUserMessageThe underlying message.
Properties
Channel
Gets the ISocketMessageChannel that the command is executed in.
public ISocketMessageChannel Channel { get; }
Property Value
Client
Gets the DiscordSocketClient that the command is executed with.
public DiscordSocketClient Client { get; }
Property Value
Guild
Gets the SocketGuild that the command is executed in.
public SocketGuild Guild { get; }
Property Value
IsPrivate
Indicates whether the channel that the command is executed in is a private channel.
public bool IsPrivate { get; }
Property Value
Message
Gets the SocketUserMessage that the command is interpreted from.
public SocketUserMessage Message { get; }
Property Value
User
Gets the SocketUser who executed the command.
public SocketUser User { get; }