Browse Source

docs: Replace obsolete Precondition sample with something new (#1230)

* Replace obsolete Precondition sample with something new

* Feedback

Whoops. 👌

Co-Authored-By: Joe4evr <jii.geugten@gmail.com>
tags/2.0.1
Joe4evr Christopher F 6 years ago
parent
commit
feed4fd752
3 changed files with 33 additions and 29 deletions
  1. +1
    -1
      docs/guides/commands/preconditions.md
  2. +0
    -28
      docs/guides/commands/samples/preconditions/require_owner.cs
  3. +32
    -0
      docs/guides/commands/samples/preconditions/require_role.cs

+ 1
- 1
docs/guides/commands/preconditions.md View File

@@ -76,7 +76,7 @@ necessary.

### Example - Creating a Custom Precondition

[!code-csharp[Custom Precondition](samples/preconditions/require_owner.cs)]
[!code-csharp[Custom Precondition](samples/preconditions/require_role.cs)]

[CheckPermissionsAsync]: xref:Discord.Commands.PreconditionAttribute.CheckPermissionsAsync*
[PreconditionResult.FromSuccess]: xref:Discord.Commands.PreconditionResult.FromSuccess*


+ 0
- 28
docs/guides/commands/samples/preconditions/require_owner.cs View File

@@ -1,28 +0,0 @@
// (Note: This precondition is obsolete, it is recommended to use the
// RequireOwnerAttribute that is bundled with Discord.Commands)

using Discord.Commands;
using Discord.WebSocket;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Threading.Tasks;

// Inherit from PreconditionAttribute
public class RequireOwnerAttribute : PreconditionAttribute
{
// Override the CheckPermissions method
public async override Task<PreconditionResult> CheckPermissionsAsync(ICommandContext context, CommandInfo command, IServiceProvider services)
{
// Get the client via Depedency Injection
var client = services.GetRequiredService<DiscordSocketClient>();
// Get the ID of the bot's owner
var appInfo = await client.GetApplicationInfoAsync().ConfigureAwait(false);
var ownerId = appInfo.Owner.Id;
// If this command was executed by that user, return a success
if (context.User.Id == ownerId)
return PreconditionResult.FromSuccess();
// Since it wasn't, fail
else
return PreconditionResult.FromError("You must be the owner of the bot to run this command.");
}
}

+ 32
- 0
docs/guides/commands/samples/preconditions/require_role.cs View File

@@ -0,0 +1,32 @@
using System;
using System.Threading.Tasks;
using Discord.Commands;
using Discord.WebSocket;

// Inherit from PreconditionAttribute
public class RequireRoleAttribute : PreconditionAttribute
{
// Create a field to store the specified name
private readonly string _name;

// Create a constructor so the name can be specified
public RequireRoleAttribute(string name) => _name = name;

// Override the CheckPermissions method
public override Task<PreconditionResult> CheckPermissionsAsync(ICommandContext context, CommandInfo command, IServiceProvider services)
{
// Check if this user is a Guild User, which is the only context where roles exist
if (context.User is SocketGuildUser gUser)
{
// If this command was executed by a user with the appropriate role, return a success
if (gUser.Roles.Any(r => r.Name == _name))
// Since no async work is done, the result has to be wrapped with `Task.FromResult` to avoid compiler errors
return Task.FromResult(PreconditionResult.FromSuccess());
// Since it wasn't, fail
else
return Task.FromResult(PreconditionResult.FromError($"You must have a role named {_name} to run this command."));
}
else
return Task.FromResult(PreconditionResult.FromError("You must be in a guild to run this command."));
}
}

Loading…
Cancel
Save