Add IChannel.Nsfw, RequireNsfw precondition (#633)
* Add IChannel.Nsfw, RequireNsfw precondition * Refactored IChannel.Nsfw to IsNsfw, removed NsfwUtils Per pull-request feedback * proper nsfw channel check
This commit is contained in:
committed by
RogueException
parent
05f8f41567
commit
7f1fc286cf
@@ -0,0 +1,20 @@
|
|||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Discord.Commands
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Require that the command is invoked in a channel marked NSFW
|
||||||
|
/// </summary>
|
||||||
|
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
|
||||||
|
public class RequireNsfwAttribute : PreconditionAttribute
|
||||||
|
{
|
||||||
|
public override Task<PreconditionResult> CheckPermissions(ICommandContext context, CommandInfo command, IDependencyMap map)
|
||||||
|
{
|
||||||
|
if (context.Channel.IsNsfw)
|
||||||
|
return Task.FromResult(PreconditionResult.FromSuccess());
|
||||||
|
else
|
||||||
|
return Task.FromResult(PreconditionResult.FromError("This command may only be invoked in an NSFW channel."));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -8,6 +8,9 @@ namespace Discord
|
|||||||
/// <summary> Gets the name of this channel. </summary>
|
/// <summary> Gets the name of this channel. </summary>
|
||||||
string Name { get; }
|
string Name { get; }
|
||||||
|
|
||||||
|
/// <summary> Checks if the channel is NSFW. </summary>
|
||||||
|
bool IsNsfw { get; }
|
||||||
|
|
||||||
/// <summary> Gets a collection of all users in this channel. </summary>
|
/// <summary> Gets a collection of all users in this channel. </summary>
|
||||||
IAsyncEnumerable<IReadOnlyCollection<IUser>> GetUsersAsync(CacheMode mode = CacheMode.AllowDownload, RequestOptions options = null);
|
IAsyncEnumerable<IReadOnlyCollection<IUser>> GetUsersAsync(CacheMode mode = CacheMode.AllowDownload, RequestOptions options = null);
|
||||||
|
|
||||||
|
|||||||
@@ -289,5 +289,10 @@ namespace Discord.Rest
|
|||||||
author = RestUser.Create(client, guild, model, webhookId);
|
author = RestUser.Create(client, guild, model, webhookId);
|
||||||
return author;
|
return author;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static bool IsNsfw(IChannel channel) =>
|
||||||
|
IsNsfw(channel.Name);
|
||||||
|
public static bool IsNsfw(string channelName) =>
|
||||||
|
channelName == "nsfw" || channelName.StartsWith("nsfw-");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ namespace Discord.Rest
|
|||||||
|
|
||||||
//IChannel
|
//IChannel
|
||||||
string IChannel.Name => null;
|
string IChannel.Name => null;
|
||||||
|
bool IChannel.IsNsfw => ChannelHelper.IsNsfw(this);
|
||||||
|
|
||||||
Task<IUser> IChannel.GetUserAsync(ulong id, CacheMode mode, RequestOptions options)
|
Task<IUser> IChannel.GetUserAsync(ulong id, CacheMode mode, RequestOptions options)
|
||||||
=> Task.FromResult<IUser>(null); //Overriden
|
=> Task.FromResult<IUser>(null); //Overriden
|
||||||
|
|||||||
@@ -97,6 +97,7 @@ namespace Discord.Rest
|
|||||||
|
|
||||||
//IChannel
|
//IChannel
|
||||||
string IChannel.Name { get { throw new NotSupportedException(); } }
|
string IChannel.Name { get { throw new NotSupportedException(); } }
|
||||||
|
bool IChannel.IsNsfw { get { throw new NotSupportedException(); } }
|
||||||
IAsyncEnumerable<IReadOnlyCollection<IUser>> IChannel.GetUsersAsync(CacheMode mode, RequestOptions options)
|
IAsyncEnumerable<IReadOnlyCollection<IUser>> IChannel.GetUsersAsync(CacheMode mode, RequestOptions options)
|
||||||
{
|
{
|
||||||
throw new NotSupportedException();
|
throw new NotSupportedException();
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using System;
|
using Discord.Rest;
|
||||||
|
using System;
|
||||||
|
|
||||||
using Model = Discord.API.Rpc.Channel;
|
using Model = Discord.API.Rpc.Channel;
|
||||||
|
|
||||||
@@ -7,6 +8,7 @@ namespace Discord.Rpc
|
|||||||
public class RpcChannel : RpcEntity<ulong>
|
public class RpcChannel : RpcEntity<ulong>
|
||||||
{
|
{
|
||||||
public string Name { get; private set; }
|
public string Name { get; private set; }
|
||||||
|
public bool IsNsfw => ChannelHelper.IsNsfw(Name);
|
||||||
|
|
||||||
public DateTimeOffset CreatedAt => SnowflakeUtils.FromSnowflake(Id);
|
public DateTimeOffset CreatedAt => SnowflakeUtils.FromSnowflake(Id);
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using System;
|
using Discord.Rest;
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
@@ -40,6 +41,7 @@ namespace Discord.WebSocket
|
|||||||
|
|
||||||
//IChannel
|
//IChannel
|
||||||
string IChannel.Name => null;
|
string IChannel.Name => null;
|
||||||
|
bool IChannel.IsNsfw => ChannelHelper.IsNsfw(this);
|
||||||
|
|
||||||
Task<IUser> IChannel.GetUserAsync(ulong id, CacheMode mode, RequestOptions options)
|
Task<IUser> IChannel.GetUserAsync(ulong id, CacheMode mode, RequestOptions options)
|
||||||
=> Task.FromResult<IUser>(null); //Overridden
|
=> Task.FromResult<IUser>(null); //Overridden
|
||||||
|
|||||||
Reference in New Issue
Block a user