This adds the following property to ITextChannel - SlowMode (int) The SlowMode field defines the time in seconds users must wait between sending messages; if zero, slow-mode is disabled. Bots are not affected by slow-mode, and as such, no changes need to be made to the REST client's internal ratelimiting. This is strictly a read/write cosmetic property for bots.pull/1120/merge
@@ -13,6 +13,9 @@ namespace Discord | |||||
/// <summary> Gets the current topic for this text channel. </summary> | /// <summary> Gets the current topic for this text channel. </summary> | ||||
string Topic { get; } | string Topic { get; } | ||||
///<summary> Gets the current slow-mode delay for this channel. 0 if disabled. </summary> | |||||
int SlowMode { get; } | |||||
/// <summary> Bulk deletes multiple messages. </summary> | /// <summary> Bulk deletes multiple messages. </summary> | ||||
Task DeleteMessagesAsync(IEnumerable<IMessage> messages, RequestOptions options = null); | Task DeleteMessagesAsync(IEnumerable<IMessage> messages, RequestOptions options = null); | ||||
/// <summary> Bulk deletes multiple messages. </summary> | /// <summary> Bulk deletes multiple messages. </summary> | ||||
@@ -1,4 +1,6 @@ | |||||
namespace Discord | |||||
using System; | |||||
namespace Discord | |||||
{ | { | ||||
/// <inheritdoc /> | /// <inheritdoc /> | ||||
public class TextChannelProperties : GuildChannelProperties | public class TextChannelProperties : GuildChannelProperties | ||||
@@ -11,5 +13,15 @@ | |||||
/// Should this channel be flagged as NSFW? | /// Should this channel be flagged as NSFW? | ||||
/// </summary> | /// </summary> | ||||
public Optional<bool> IsNsfw { get; set; } | public Optional<bool> IsNsfw { get; set; } | ||||
/// <summary> | |||||
/// What the slow-mode ratelimit for this channel should be set to; 0 will disable slow-mode. | |||||
/// </summary> | |||||
/// <remarks> | |||||
/// This value must fall within [0, 120] | |||||
/// | |||||
/// Users with <see cref="ChannelPermission.ManageMessages"/> will be exempt from slow-mode. | |||||
/// </remarks> | |||||
/// <exception cref="ArgumentOutOfRangeException">Throws ArgummentOutOfRange if the value does not fall within [0, 120]</exception> | |||||
public Optional<int> SlowMode { get; set; } | |||||
} | } | ||||
} | } |
@@ -1,4 +1,4 @@ | |||||
#pragma warning disable CS1591 | |||||
#pragma warning disable CS1591 | |||||
using Newtonsoft.Json; | using Newtonsoft.Json; | ||||
using System; | using System; | ||||
@@ -33,6 +33,8 @@ namespace Discord.API | |||||
public Optional<DateTimeOffset?> LastPinTimestamp { get; set; } | public Optional<DateTimeOffset?> LastPinTimestamp { get; set; } | ||||
[JsonProperty("nsfw")] | [JsonProperty("nsfw")] | ||||
public Optional<bool> Nsfw { get; set; } | public Optional<bool> Nsfw { get; set; } | ||||
[JsonProperty("rate_limit_per_user")] | |||||
public Optional<int> SlowMode { get; set; } | |||||
//VoiceChannel | //VoiceChannel | ||||
[JsonProperty("bitrate")] | [JsonProperty("bitrate")] | ||||
@@ -1,4 +1,4 @@ | |||||
#pragma warning disable CS1591 | |||||
#pragma warning disable CS1591 | |||||
using Newtonsoft.Json; | using Newtonsoft.Json; | ||||
namespace Discord.API.Rest | namespace Discord.API.Rest | ||||
@@ -10,5 +10,7 @@ namespace Discord.API.Rest | |||||
public Optional<string> Topic { get; set; } | public Optional<string> Topic { get; set; } | ||||
[JsonProperty("nsfw")] | [JsonProperty("nsfw")] | ||||
public Optional<bool> IsNsfw { get; set; } | public Optional<bool> IsNsfw { get; set; } | ||||
[JsonProperty("rate_limit_per_user")] | |||||
public Optional<int> SlowMode { get; set; } | |||||
} | } | ||||
} | } |
@@ -356,6 +356,8 @@ namespace Discord.API | |||||
Preconditions.NotNull(args, nameof(args)); | Preconditions.NotNull(args, nameof(args)); | ||||
Preconditions.AtLeast(args.Position, 0, nameof(args.Position)); | Preconditions.AtLeast(args.Position, 0, nameof(args.Position)); | ||||
Preconditions.NotNullOrEmpty(args.Name, nameof(args.Name)); | Preconditions.NotNullOrEmpty(args.Name, nameof(args.Name)); | ||||
Preconditions.AtLeast(args.SlowMode, 0, nameof(args.SlowMode)); | |||||
Preconditions.AtMost(args.SlowMode, 120, nameof(args.SlowMode)); | |||||
options = RequestOptions.CreateOrClone(options); | options = RequestOptions.CreateOrClone(options); | ||||
var ids = new BucketIds(channelId: channelId); | var ids = new BucketIds(channelId: channelId); | ||||
@@ -45,7 +45,8 @@ namespace Discord.Rest | |||||
Position = args.Position, | Position = args.Position, | ||||
CategoryId = args.CategoryId, | CategoryId = args.CategoryId, | ||||
Topic = args.Topic, | Topic = args.Topic, | ||||
IsNsfw = args.IsNsfw | |||||
IsNsfw = args.IsNsfw, | |||||
SlowMode = args.SlowMode, | |||||
}; | }; | ||||
return await client.ApiClient.ModifyGuildChannelAsync(channel.Id, apiArgs, options).ConfigureAwait(false); | return await client.ApiClient.ModifyGuildChannelAsync(channel.Id, apiArgs, options).ConfigureAwait(false); | ||||
} | } | ||||
@@ -12,6 +12,7 @@ namespace Discord.Rest | |||||
public class RestTextChannel : RestGuildChannel, IRestMessageChannel, ITextChannel | public class RestTextChannel : RestGuildChannel, IRestMessageChannel, ITextChannel | ||||
{ | { | ||||
public string Topic { get; private set; } | public string Topic { get; private set; } | ||||
public int SlowMode { get; private set; } | |||||
public ulong? CategoryId { get; private set; } | public ulong? CategoryId { get; private set; } | ||||
public string Mention => MentionUtils.MentionChannel(Id); | public string Mention => MentionUtils.MentionChannel(Id); | ||||
@@ -34,6 +35,7 @@ namespace Discord.Rest | |||||
base.Update(model); | base.Update(model); | ||||
CategoryId = model.CategoryId; | CategoryId = model.CategoryId; | ||||
Topic = model.Topic.Value; | Topic = model.Topic.Value; | ||||
SlowMode = model.SlowMode.Value; | |||||
_nsfw = model.Nsfw.GetValueOrDefault(); | _nsfw = model.Nsfw.GetValueOrDefault(); | ||||
} | } | ||||
@@ -16,6 +16,7 @@ namespace Discord.WebSocket | |||||
private readonly MessageCache _messages; | private readonly MessageCache _messages; | ||||
public string Topic { get; private set; } | public string Topic { get; private set; } | ||||
public int SlowMode { get; private set; } | |||||
public ulong? CategoryId { get; private set; } | public ulong? CategoryId { get; private set; } | ||||
public ICategoryChannel Category | public ICategoryChannel Category | ||||
=> CategoryId.HasValue ? Guild.GetChannel(CategoryId.Value) as ICategoryChannel : null; | => CategoryId.HasValue ? Guild.GetChannel(CategoryId.Value) as ICategoryChannel : null; | ||||
@@ -47,6 +48,7 @@ namespace Discord.WebSocket | |||||
base.Update(state, model); | base.Update(state, model); | ||||
CategoryId = model.CategoryId; | CategoryId = model.CategoryId; | ||||
Topic = model.Topic.Value; | Topic = model.Topic.Value; | ||||
SlowMode = model.SlowMode.GetValueOrDefault(); // some guilds haven't been patched to include this yet? | |||||
_nsfw = model.Nsfw.GetValueOrDefault(); | _nsfw = model.Nsfw.GetValueOrDefault(); | ||||
} | } | ||||