From afda0cd172a98154bc33b4c27eed65580189785d Mon Sep 17 00:00:00 2001
From: Still Hsu <341464@gmail.com>
Date: Sat, 26 May 2018 20:47:21 +0800
Subject: [PATCH] Add documentation for some REST-based objects
---
.../Entities/Channels/IVoiceChannel.cs | 2 +-
src/Discord.Net.Core/Entities/Guilds/IBan.cs | 8 ++-
.../Entities/Invites/IInvite.cs | 36 ++++++++++-
.../Entities/Invites/IInviteMetadata.cs | 40 ++++++++++--
.../Entities/Channels/RestChannel.cs | 3 +
.../Entities/Channels/RestDMChannel.cs | 30 ++++++++-
.../Entities/Channels/RestGroupChannel.cs | 2 +
.../Entities/Channels/RestGuildChannel.cs | 2 +-
.../Entities/Channels/RestTextChannel.cs | 64 ++++++++++++++++++-
.../Entities/Channels/RestVoiceChannel.cs | 9 +++
.../Entities/Guilds/RestBan.cs | 15 +++++
11 files changed, 196 insertions(+), 15 deletions(-)
diff --git a/src/Discord.Net.Core/Entities/Channels/IVoiceChannel.cs b/src/Discord.Net.Core/Entities/Channels/IVoiceChannel.cs
index e1efb1a86..4dc3a6086 100644
--- a/src/Discord.Net.Core/Entities/Channels/IVoiceChannel.cs
+++ b/src/Discord.Net.Core/Entities/Channels/IVoiceChannel.cs
@@ -4,7 +4,7 @@ using System.Threading.Tasks;
namespace Discord
{
///
- /// Represents a voice channel in a guild.
+ /// Represents a generic voice channel in a guild.
///
public interface IVoiceChannel : IGuildChannel, IAudioChannel
{
diff --git a/src/Discord.Net.Core/Entities/Guilds/IBan.cs b/src/Discord.Net.Core/Entities/Guilds/IBan.cs
index 3ce76d29b..103cfcfd9 100644
--- a/src/Discord.Net.Core/Entities/Guilds/IBan.cs
+++ b/src/Discord.Net.Core/Entities/Guilds/IBan.cs
@@ -8,10 +8,16 @@ namespace Discord
///
/// Gets the banned user.
///
+ ///
+ /// A generic object that was banned.
+ ///
IUser User { get; }
///
- /// Gets the reason why the user is banned.
+ /// Gets the reason why the user is banned if specified.
///
+ ///
+ /// A string containing the reason behind the ban; null if none is specified.
+ ///
string Reason { get; }
}
}
diff --git a/src/Discord.Net.Core/Entities/Invites/IInvite.cs b/src/Discord.Net.Core/Entities/Invites/IInvite.cs
index 62e4a4bfc..0902d437c 100644
--- a/src/Discord.Net.Core/Entities/Invites/IInvite.cs
+++ b/src/Discord.Net.Core/Entities/Invites/IInvite.cs
@@ -1,5 +1,3 @@
-using System.Threading.Tasks;
-
namespace Discord
{
///
@@ -10,44 +8,76 @@ namespace Discord
///
/// Gets the unique identifier for this invite.
///
+ ///
+ /// A string containing the invite code (e.g. FTqNnyS).
+ ///
string Code { get; }
///
- /// Gets the URL used to accept this invite, using Code.
+ /// Gets the URL used to accept this invite using .
///
+ ///
+ /// A string containing the full invite URL (e.g. https://discord.gg/FTqNnyS).
+ ///
string Url { get; }
///
/// Gets the channel this invite is linked to.
///
+ ///
+ /// A generic channel that the invite points to.
+ ///
IChannel Channel { get; }
///
/// Gets the ID of the channel this invite is linked to.
///
+ ///
+ /// An representing the channel snowflake identifier that the invite points to.
+ ///
ulong ChannelId { get; }
///
/// Gets the name of the channel this invite is linked to.
///
+ ///
+ /// A string containing the name of the channel that the invite points to.
+ ///
string ChannelName { get; }
///
/// Gets the guild this invite is linked to.
///
+ ///
+ /// A generic representing the guild that the invite points to.
+ ///
IGuild Guild { get; }
///
/// Gets the ID of the guild this invite is linked to.
///
+ ///
+ /// An representing the guild snowflake identifier that the invite points to.
+ ///
ulong GuildId { get; }
///
/// Gets the name of the guild this invite is linked to.
///
+ ///
+ /// A string containing the name of the guild that the invite points to.
+ ///
string GuildName { get; }
///
/// Gets the approximated count of online members in the guild.
///
+ ///
+ /// An representing the approximated online member count of the guild that the
+ /// invite points to; null if one cannot be obtained.
+ ///
int? PresenceCount { get; }
///
/// Gets the approximated count of total members in the guild.
///
+ ///
+ /// An representing the approximated total member count of the guild that the
+ /// invite points to; null if one cannot be obtained.
+ ///
int? MemberCount { get; }
}
}
diff --git a/src/Discord.Net.Core/Entities/Invites/IInviteMetadata.cs b/src/Discord.Net.Core/Entities/Invites/IInviteMetadata.cs
index 1c6b1dd79..c3c4c857d 100644
--- a/src/Discord.Net.Core/Entities/Invites/IInviteMetadata.cs
+++ b/src/Discord.Net.Core/Entities/Invites/IInviteMetadata.cs
@@ -2,37 +2,63 @@ using System;
namespace Discord
{
- /// Represents additional information regarding the generic invite object.
+ ///
+ /// Represents additional information regarding the generic invite object.
+ ///
public interface IInviteMetadata : IInvite
{
///
/// Gets the user that created this invite.
///
+ ///
+ /// A generic that created this invite.
+ ///
IUser Inviter { get; }
///
- /// Returns true if this invite was revoked.
+ /// Determines whether the invite has been revoked.
///
+ ///
+ /// true if this invite was revoked; otherwise false.
+ ///
bool IsRevoked { get; }
///
- /// Returns true if users accepting this invite will be removed from the guild when they
- /// log off.
+ /// Determines whether the invite is a temporary one (i.e. whether the invite will be removed from the guild
+ /// when the user logs off).
///
+ ///
+ /// true if users accepting this invite will be removed from the guild when they log off; otherwise
+ /// false.
+ ///
bool IsTemporary { get; }
///
- /// Gets the time (in seconds) until the invite expires, or null if it never expires.
+ /// Gets the time (in seconds) until the invite expires.
///
+ ///
+ /// An representing the time in seconds until this invite expires; null if this
+ /// invite never expires.
+ ///
int? MaxAge { get; }
///
- /// Gets the max amount of times this invite may be used, or null if there is no limit.
+ /// Gets the max number of uses this invite may have.
///
+ ///
+ /// An representing the number of uses this invite may be accepted until it is removed
+ /// from the guild; null if none is set.
+ ///
int? MaxUses { get; }
///
- /// Gets the amount of times this invite has been used.
+ /// Gets the number of times this invite has been used.
///
+ ///
+ /// An representing the number of times this invite has been used.
+ ///
int Uses { get; }
///
/// Gets when this invite was created.
///
+ ///
+ /// A representing the time of which the invite was first created.
+ ///
DateTimeOffset CreatedAt { get; }
}
}
diff --git a/src/Discord.Net.Rest/Entities/Channels/RestChannel.cs b/src/Discord.Net.Rest/Entities/Channels/RestChannel.cs
index c6d765787..09c2e75a1 100644
--- a/src/Discord.Net.Rest/Entities/Channels/RestChannel.cs
+++ b/src/Discord.Net.Rest/Entities/Channels/RestChannel.cs
@@ -6,6 +6,9 @@ using Model = Discord.API.Channel;
namespace Discord.Rest
{
+ ///
+ /// Represents a generic REST-based channel.
+ ///
public class RestChannel : RestEntity, IChannel, IUpdateable
{
///
diff --git a/src/Discord.Net.Rest/Entities/Channels/RestDMChannel.cs b/src/Discord.Net.Rest/Entities/Channels/RestDMChannel.cs
index 7af228654..eb6fe9105 100644
--- a/src/Discord.Net.Rest/Entities/Channels/RestDMChannel.cs
+++ b/src/Discord.Net.Rest/Entities/Channels/RestDMChannel.cs
@@ -10,7 +10,7 @@ using Model = Discord.API.Channel;
namespace Discord.Rest
{
///
- /// Represents a REST-based DM channel.
+ /// Represents a REST-based direct-message channel.
///
[DebuggerDisplay(@"{DebuggerDisplay,nq}")]
public class RestDMChannel : RestChannel, IDMChannel, IRestPrivateChannel, IRestMessageChannel
@@ -74,18 +74,46 @@ namespace Discord.Rest
=> ChannelHelper.GetPinnedMessagesAsync(this, Discord, options);
///
+ /// Message content is too long, length must be less or equal to .
public Task SendMessageAsync(string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null)
=> ChannelHelper.SendMessageAsync(this, Discord, text, isTTS, embed, options);
///
+ ///
+ /// is a zero-length string, contains only white space, or contains one or more
+ /// invalid characters as defined by .
+ ///
+ ///
+ /// is null.
+ ///
+ ///
+ /// The specified path, file name, or both exceed the system-defined maximum length. For example, on
+ /// Windows-based platforms, paths must be less than 248 characters, and file names must be less than 260
+ /// characters.
+ ///
+ ///
+ /// The specified path is invalid, (for example, it is on an unmapped drive).
+ ///
+ ///
+ /// specified a directory.-or- The caller does not have the required permission.
+ ///
+ ///
+ /// The file specified in was not found.
+ ///
+ /// is in an invalid format.
+ /// An I/O error occurred while opening the file.
+ /// Message content is too long, length must be less or equal to .
public Task SendFileAsync(string filePath, string text, bool isTTS = false, Embed embed = null, RequestOptions options = null)
=> ChannelHelper.SendFileAsync(this, Discord, filePath, text, isTTS, embed, options);
///
+ /// Message content is too long, length must be less or equal to .
public Task SendFileAsync(Stream stream, string filename, string text, bool isTTS = false, Embed embed = null, RequestOptions options = null)
=> ChannelHelper.SendFileAsync(this, Discord, stream, filename, text, isTTS, embed, options);
+ ///
public Task DeleteMessageAsync(ulong messageId, RequestOptions options = null)
=> ChannelHelper.DeleteMessageAsync(this, messageId, Discord, options);
+ ///
public Task DeleteMessageAsync(IMessage message, RequestOptions options = null)
=> ChannelHelper.DeleteMessageAsync(this, message.Id, Discord, options);
diff --git a/src/Discord.Net.Rest/Entities/Channels/RestGroupChannel.cs b/src/Discord.Net.Rest/Entities/Channels/RestGroupChannel.cs
index f69b048d8..2f14dc94f 100644
--- a/src/Discord.Net.Rest/Entities/Channels/RestGroupChannel.cs
+++ b/src/Discord.Net.Rest/Entities/Channels/RestGroupChannel.cs
@@ -83,8 +83,10 @@ namespace Discord.Rest
public Task> GetPinnedMessagesAsync(RequestOptions options = null)
=> ChannelHelper.GetPinnedMessagesAsync(this, Discord, options);
+ ///
public Task DeleteMessageAsync(ulong messageId, RequestOptions options = null)
=> ChannelHelper.DeleteMessageAsync(this, messageId, Discord, options);
+ ///
public Task DeleteMessageAsync(IMessage message, RequestOptions options = null)
=> ChannelHelper.DeleteMessageAsync(this, message.Id, Discord, options);
diff --git a/src/Discord.Net.Rest/Entities/Channels/RestGuildChannel.cs b/src/Discord.Net.Rest/Entities/Channels/RestGuildChannel.cs
index 7c3cc53c9..f0ff4d4c4 100644
--- a/src/Discord.Net.Rest/Entities/Channels/RestGuildChannel.cs
+++ b/src/Discord.Net.Rest/Entities/Channels/RestGuildChannel.cs
@@ -8,7 +8,7 @@ using Model = Discord.API.Channel;
namespace Discord.Rest
{
///
- /// Represents a private REST group channel.
+ /// Represents a private REST-based group channel.
///
public class RestGuildChannel : RestChannel, IGuildChannel
{
diff --git a/src/Discord.Net.Rest/Entities/Channels/RestTextChannel.cs b/src/Discord.Net.Rest/Entities/Channels/RestTextChannel.cs
index 332fb0679..f93757c31 100644
--- a/src/Discord.Net.Rest/Entities/Channels/RestTextChannel.cs
+++ b/src/Discord.Net.Rest/Entities/Channels/RestTextChannel.cs
@@ -8,14 +8,20 @@ using Model = Discord.API.Channel;
namespace Discord.Rest
{
+ ///
+ /// Represents a REST-based channel in a guild that can send and receive messages.
+ ///
[DebuggerDisplay(@"{DebuggerDisplay,nq}")]
public class RestTextChannel : RestGuildChannel, IRestMessageChannel, ITextChannel
{
+ ///
public string Topic { get; private set; }
+ ///
public string Mention => MentionUtils.MentionChannel(Id);
private bool _nsfw;
+ ///
public bool IsNsfw => _nsfw || ChannelHelper.IsNsfw(this);
internal RestTextChannel(BaseDiscordClient discord, IGuild guild, ulong id)
@@ -36,6 +42,7 @@ namespace Discord.Rest
_nsfw = model.Nsfw.GetValueOrDefault();
}
+ ///
public async Task ModifyAsync(Action func, RequestOptions options = null)
{
var model = await ChannelHelper.ModifyAsync(this, Discord, func, options).ConfigureAwait(false);
@@ -47,41 +54,80 @@ namespace Discord.Rest
public IAsyncEnumerable> GetUsersAsync(RequestOptions options = null)
=> ChannelHelper.GetUsersAsync(this, Guild, Discord, null, null, options);
+ ///
public Task GetMessageAsync(ulong id, RequestOptions options = null)
=> ChannelHelper.GetMessageAsync(this, Discord, id, options);
+ ///
public IAsyncEnumerable> GetMessagesAsync(int limit = DiscordConfig.MaxMessagesPerBatch, RequestOptions options = null)
=> ChannelHelper.GetMessagesAsync(this, Discord, null, Direction.Before, limit, options);
+ ///
public IAsyncEnumerable> GetMessagesAsync(ulong fromMessageId, Direction dir, int limit = DiscordConfig.MaxMessagesPerBatch, RequestOptions options = null)
=> ChannelHelper.GetMessagesAsync(this, Discord, fromMessageId, dir, limit, options);
+ ///
public IAsyncEnumerable> GetMessagesAsync(IMessage fromMessage, Direction dir, int limit = DiscordConfig.MaxMessagesPerBatch, RequestOptions options = null)
=> ChannelHelper.GetMessagesAsync(this, Discord, fromMessage.Id, dir, limit, options);
+ ///
public Task> GetPinnedMessagesAsync(RequestOptions options = null)
=> ChannelHelper.GetPinnedMessagesAsync(this, Discord, options);
+ ///
+ /// Message content is too long, length must be less or equal to .
public Task SendMessageAsync(string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null)
=> ChannelHelper.SendMessageAsync(this, Discord, text, isTTS, embed, options);
+ ///
+ ///
+ /// is a zero-length string, contains only white space, or contains one or more
+ /// invalid characters as defined by .
+ ///
+ ///
+ /// is null.
+ ///
+ ///
+ /// The specified path, file name, or both exceed the system-defined maximum length. For example, on
+ /// Windows-based platforms, paths must be less than 248 characters, and file names must be less than 260
+ /// characters.
+ ///
+ ///
+ /// The specified path is invalid, (for example, it is on an unmapped drive).
+ ///
+ ///
+ /// specified a directory.-or- The caller does not have the required permission.
+ ///
+ ///
+ /// The file specified in was not found.
+ ///
+ /// is in an invalid format.
+ /// An I/O error occurred while opening the file.
+ /// Message content is too long, length must be less or equal to .
public Task SendFileAsync(string filePath, string text, bool isTTS = false, Embed embed = null, RequestOptions options = null)
=> ChannelHelper.SendFileAsync(this, Discord, filePath, text, isTTS, embed, options);
+ ///
+ /// Message content is too long, length must be less or equal to .
public Task SendFileAsync(Stream stream, string filename, string text, bool isTTS = false, Embed embed = null, RequestOptions options = null)
=> ChannelHelper.SendFileAsync(this, Discord, stream, filename, text, isTTS, embed, options);
+ ///
public Task DeleteMessageAsync(ulong messageId, RequestOptions options = null)
=> ChannelHelper.DeleteMessageAsync(this, messageId, Discord, options);
+ ///
public Task DeleteMessageAsync(IMessage message, RequestOptions options = null)
=> ChannelHelper.DeleteMessageAsync(this, message.Id, Discord, options);
+ ///
public Task DeleteMessagesAsync(IEnumerable messages, RequestOptions options = null)
=> ChannelHelper.DeleteMessagesAsync(this, Discord, messages.Select(x => x.Id), options);
+ ///
public Task DeleteMessagesAsync(IEnumerable messageIds, RequestOptions options = null)
=> ChannelHelper.DeleteMessagesAsync(this, Discord, messageIds, options);
+ ///
public Task TriggerTypingAsync(RequestOptions options = null)
=> ChannelHelper.TriggerTypingAsync(this, Discord, options);
public IDisposable EnterTypingState(RequestOptions options = null)
=> ChannelHelper.EnterTypingState(this, Discord, options);
-
+
public Task CreateWebhookAsync(string name, Stream avatar = null, RequestOptions options = null)
=> ChannelHelper.CreateWebhookAsync(this, Discord, name, avatar, options);
public Task GetWebhookAsync(ulong id, RequestOptions options = null)
@@ -92,14 +138,18 @@ namespace Discord.Rest
private string DebuggerDisplay => $"{Name} ({Id}, Text)";
//ITextChannel
+ ///
async Task ITextChannel.CreateWebhookAsync(string name, Stream avatar, RequestOptions options)
=> await CreateWebhookAsync(name, avatar, options).ConfigureAwait(false);
+ ///
async Task ITextChannel.GetWebhookAsync(ulong id, RequestOptions options)
=> await GetWebhookAsync(id, options).ConfigureAwait(false);
+ ///
async Task> ITextChannel.GetWebhooksAsync(RequestOptions options)
=> await GetWebhooksAsync(options).ConfigureAwait(false);
//IMessageChannel
+ ///
async Task IMessageChannel.GetMessageAsync(ulong id, CacheMode mode, RequestOptions options)
{
if (mode == CacheMode.AllowDownload)
@@ -107,6 +157,7 @@ namespace Discord.Rest
else
return null;
}
+ ///
IAsyncEnumerable> IMessageChannel.GetMessagesAsync(int limit, CacheMode mode, RequestOptions options)
{
if (mode == CacheMode.AllowDownload)
@@ -114,6 +165,7 @@ namespace Discord.Rest
else
return AsyncEnumerable.Empty>();
}
+ ///
IAsyncEnumerable> IMessageChannel.GetMessagesAsync(ulong fromMessageId, Direction dir, int limit, CacheMode mode, RequestOptions options)
{
if (mode == CacheMode.AllowDownload)
@@ -121,6 +173,7 @@ namespace Discord.Rest
else
return AsyncEnumerable.Empty>();
}
+ ///
IAsyncEnumerable> IMessageChannel.GetMessagesAsync(IMessage fromMessage, Direction dir, int limit, CacheMode mode, RequestOptions options)
{
if (mode == CacheMode.AllowDownload)
@@ -128,20 +181,26 @@ namespace Discord.Rest
else
return AsyncEnumerable.Empty>();
}
+ ///
async Task> IMessageChannel.GetPinnedMessagesAsync(RequestOptions options)
=> await GetPinnedMessagesAsync(options).ConfigureAwait(false);
+ ///
async Task IMessageChannel.SendFileAsync(string filePath, string text, bool isTTS, Embed embed, RequestOptions options)
=> await SendFileAsync(filePath, text, isTTS, embed, options).ConfigureAwait(false);
+ ///
async Task IMessageChannel.SendFileAsync(Stream stream, string filename, string text, bool isTTS, Embed embed, RequestOptions options)
=> await SendFileAsync(stream, filename, text, isTTS, embed, options).ConfigureAwait(false);
+ ///
async Task IMessageChannel.SendMessageAsync(string text, bool isTTS, Embed embed, RequestOptions options)
=> await SendMessageAsync(text, isTTS, embed, options).ConfigureAwait(false);
+ ///
IDisposable IMessageChannel.EnterTypingState(RequestOptions options)
=> EnterTypingState(options);
//IGuildChannel
+ ///
async Task IGuildChannel.GetUserAsync(ulong id, CacheMode mode, RequestOptions options)
{
if (mode == CacheMode.AllowDownload)
@@ -149,6 +208,7 @@ namespace Discord.Rest
else
return null;
}
+ ///
IAsyncEnumerable> IGuildChannel.GetUsersAsync(CacheMode mode, RequestOptions options)
{
if (mode == CacheMode.AllowDownload)
@@ -158,6 +218,7 @@ namespace Discord.Rest
}
//IChannel
+ ///
async Task IChannel.GetUserAsync(ulong id, CacheMode mode, RequestOptions options)
{
if (mode == CacheMode.AllowDownload)
@@ -165,6 +226,7 @@ namespace Discord.Rest
else
return null;
}
+ ///
IAsyncEnumerable> IChannel.GetUsersAsync(CacheMode mode, RequestOptions options)
{
if (mode == CacheMode.AllowDownload)
diff --git a/src/Discord.Net.Rest/Entities/Channels/RestVoiceChannel.cs b/src/Discord.Net.Rest/Entities/Channels/RestVoiceChannel.cs
index 5b44136e0..2af6c6768 100644
--- a/src/Discord.Net.Rest/Entities/Channels/RestVoiceChannel.cs
+++ b/src/Discord.Net.Rest/Entities/Channels/RestVoiceChannel.cs
@@ -8,10 +8,15 @@ using Model = Discord.API.Channel;
namespace Discord.Rest
{
+ ///
+ /// Represents a REST-based voice channel in a guild.
+ ///
[DebuggerDisplay(@"{DebuggerDisplay,nq}")]
public class RestVoiceChannel : RestGuildChannel, IVoiceChannel, IRestAudioChannel
{
+ ///
public int Bitrate { get; private set; }
+ ///
public int? UserLimit { get; private set; }
internal RestVoiceChannel(BaseDiscordClient discord, IGuild guild, ulong id)
@@ -24,6 +29,7 @@ namespace Discord.Rest
entity.Update(model);
return entity;
}
+ ///
internal override void Update(Model model)
{
base.Update(model);
@@ -32,6 +38,7 @@ namespace Discord.Rest
UserLimit = model.UserLimit.Value != 0 ? model.UserLimit.Value : (int?)null;
}
+ ///
public async Task ModifyAsync(Action func, RequestOptions options = null)
{
var model = await ChannelHelper.ModifyAsync(this, Discord, func, options).ConfigureAwait(false);
@@ -46,8 +53,10 @@ namespace Discord.Rest
Task IAudioChannel.ConnectAsync(Action configAction) => throw new NotSupportedException();
//IGuildChannel
+ ///
Task IGuildChannel.GetUserAsync(ulong id, CacheMode mode, RequestOptions options)
=> Task.FromResult(null);
+ ///
IAsyncEnumerable> IGuildChannel.GetUsersAsync(CacheMode mode, RequestOptions options)
=> AsyncEnumerable.Empty>();
}
diff --git a/src/Discord.Net.Rest/Entities/Guilds/RestBan.cs b/src/Discord.Net.Rest/Entities/Guilds/RestBan.cs
index 2c65c8b59..ec8f60ae5 100644
--- a/src/Discord.Net.Rest/Entities/Guilds/RestBan.cs
+++ b/src/Discord.Net.Rest/Entities/Guilds/RestBan.cs
@@ -3,9 +3,18 @@ using Model = Discord.API.Ban;
namespace Discord.Rest
{
+ ///
+ /// Represents a REST-based ban object.
+ ///
[DebuggerDisplay(@"{DebuggerDisplay,nq}")]
public class RestBan : IBan
{
+ ///
+ /// Gets the banned user.
+ ///
+ ///
+ /// A generic object that was banned.
+ ///
public RestUser User { get; }
///
public string Reason { get; }
@@ -20,6 +29,12 @@ namespace Discord.Rest
return new RestBan(RestUser.Create(client, model.User), model.Reason);
}
+ ///
+ /// Gets the name of the banned user.
+ ///
+ ///
+ /// A string containing the name of the user that was banned.
+ ///
public override string ToString() => User.ToString();
private string DebuggerDisplay => $"{User}: {Reason}";