Add docs for the Command Service
This commit is contained in:
52
docs/guides/samples/command_handler.cs
Normal file
52
docs/guides/samples/command_handler.cs
Normal file
@@ -0,0 +1,52 @@
|
||||
using System.Threading.Tasks;
|
||||
using System.Reflection;
|
||||
using Discord;
|
||||
using Discord.Commands;
|
||||
|
||||
public class Program
|
||||
{
|
||||
private CommandService commands;
|
||||
private DiscordSocketClient client;
|
||||
|
||||
static void Main(string[] args) => new Program().Start().GetAwaiter().GetResult();
|
||||
|
||||
public async Task Start()
|
||||
{
|
||||
client = new DiscordSocketClient();
|
||||
commands = new CommandService();
|
||||
|
||||
string token = "bot token here";
|
||||
|
||||
await InstallCommands();
|
||||
|
||||
await client.LoginAsync(TokenType.Bot, token);
|
||||
await client.ConnectAsync();
|
||||
|
||||
await Task.Delay(-1);
|
||||
}
|
||||
|
||||
public async Task InstallCommands()
|
||||
{
|
||||
// Hook the MessageReceived Event into our Command Handler
|
||||
client.MessageReceived += HandleCommand;
|
||||
// Discover all of the commands in this assembly and load them.
|
||||
await commands.LoadAssembly(Assembly.GetEntryAssembly());
|
||||
}
|
||||
public async Task HandleCommand(IMessage msg)
|
||||
{
|
||||
// Internal integer, marks where the command begins
|
||||
int argPos = 0;
|
||||
// Get the current user (used for Mention parsing)
|
||||
var currentUser = await client.GetCurrentUserAsync();
|
||||
// Determine if the message is a command, based on if it starts with '!' or a mention prefix
|
||||
if (msg.HasCharPrefix('!', ref argPos) || msg.HasMentionPrefix(currentUser, ref argPos))
|
||||
{
|
||||
// Execute the command. (result does not indicate a return value,
|
||||
// rather an object stating if the command executed succesfully)
|
||||
var result = await _commands.Execute(msg, argPos);
|
||||
if (!result.IsSuccess)
|
||||
await msg.Channel.SendMessageAsync(result.ErrorReason);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
16
docs/guides/samples/dependency_map_setup.cs
Normal file
16
docs/guides/samples/dependency_map_setup.cs
Normal file
@@ -0,0 +1,16 @@
|
||||
using Discord;
|
||||
using Discord.Commands;
|
||||
|
||||
public class Commands
|
||||
{
|
||||
public async Task Install(DiscordSocketClient client)
|
||||
{
|
||||
var commands = new CommandService();
|
||||
var map = new DependencyMap();
|
||||
map.Add<IDiscordClient>(client);
|
||||
var self = await client.GetCurrentUserAsync();
|
||||
map.Add<ISelfUser>(self);
|
||||
await commands.LoadAssembly(Assembly.GetCurrentAssembly(), map);
|
||||
}
|
||||
// ...
|
||||
}
|
||||
28
docs/guides/samples/dependency_module.cs
Normal file
28
docs/guides/samples/dependency_module.cs
Normal file
@@ -0,0 +1,28 @@
|
||||
using Discord;
|
||||
using Discord.Commands;
|
||||
|
||||
[Module]
|
||||
public class ModuleA
|
||||
{
|
||||
private DiscordSocketClient client;
|
||||
private ISelfUser self;
|
||||
|
||||
public ModuleA(IDiscordClient c, ISelfUser s)
|
||||
{
|
||||
if (!(c is DiscordSocketClient)) throw new InvalidOperationException("This module requires a DiscordSocketClient");
|
||||
client = c as DiscordSocketClient;
|
||||
self = s;
|
||||
}
|
||||
}
|
||||
|
||||
public class ModuleB
|
||||
{
|
||||
private IDiscordClient client;
|
||||
private CommandService commands;
|
||||
|
||||
public ModuleB(CommandService c, IDependencyMap m)
|
||||
{
|
||||
commands = c;
|
||||
client = m.Get<IDiscordClient>();
|
||||
}
|
||||
}
|
||||
40
docs/guides/samples/module.cs
Normal file
40
docs/guides/samples/module.cs
Normal file
@@ -0,0 +1,40 @@
|
||||
using Discord.Commands;
|
||||
|
||||
// Create a module with no prefix
|
||||
[Module]
|
||||
public class Info
|
||||
{
|
||||
// ~say hello -> hello
|
||||
[Command("say"), Description("Echos a message.")]
|
||||
public async Task Say(IMessage msg,
|
||||
[Unparsed, Description("The text to echo")] string echo)
|
||||
{
|
||||
await msg.Channel.SendMessageAsync(echo);
|
||||
}
|
||||
}
|
||||
|
||||
// Create a module with the 'sample' prefix
|
||||
[Module("sample")]
|
||||
public class Sample
|
||||
{
|
||||
// ~sample square 20 ->
|
||||
[Command("square"), Description("Squares a number.")]
|
||||
public async Task Square(IMessage msg,
|
||||
[Description("The number to square.")] int num)
|
||||
{
|
||||
await msg.Channel.SendMessageAsync($"{num}^2 = {Math.Pow(num, 2)}");
|
||||
}
|
||||
|
||||
// ~sample userinfo --> foxbot#0282
|
||||
// ~sample userinfo @Khionu --> Khionu#8708
|
||||
// ~sample userinfo Khionu#8708 --> Khionu#8708
|
||||
// ~sample userinfo Khionu --> Khionu#8708
|
||||
// ~sample userinfo 96642168176807936 --> Khionu#8708
|
||||
[Command("userinfo"), Description("Returns info about the current user, or the user parameter, if one passed.")]
|
||||
public async Task UserInfo(IMessage msg,
|
||||
[Description("The (optional) user to get info for")] IUser user = null)
|
||||
{
|
||||
var userInfo = user ?? await Program.Client.GetCurrentUserAsync();
|
||||
await msg.Channel.SendMessageAsync($"{userInfo.Username}#{userInfo.Discriminator}");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user