api: add slow mode
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.
This commit is contained in:
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user