diff --git a/src/Discord.Net.Commands/Attributes/GroupAttribute.cs b/src/Discord.Net.Commands/Attributes/GroupAttribute.cs
index d2cc6165f..41bf3e261 100644
--- a/src/Discord.Net.Commands/Attributes/GroupAttribute.cs
+++ b/src/Discord.Net.Commands/Attributes/GroupAttribute.cs
@@ -14,7 +14,7 @@ namespace Discord.Commands
Prefix = null;
}
/// Creates a with the provided prefix.
- /// The prefix of the module group.
+ /// The prefix of the module group.
public GroupAttribute(string prefix)
{
Prefix = prefix;
diff --git a/src/Discord.Net.Commands/Attributes/NameAttribute.cs b/src/Discord.Net.Commands/Attributes/NameAttribute.cs
index b52a2fe71..aba44370b 100644
--- a/src/Discord.Net.Commands/Attributes/NameAttribute.cs
+++ b/src/Discord.Net.Commands/Attributes/NameAttribute.cs
@@ -7,8 +7,11 @@ namespace Discord.Commands
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Parameter, AllowMultiple = false, Inherited = true)]
public class NameAttribute : Attribute
{
+ /// Gets the name of the command.
public string Text { get; }
+ /// Marks the public name of a command, module, or parameter with the provided name.
+ /// The public name of the object.
public NameAttribute(string text)
{
Text = text;
diff --git a/src/Discord.Net.Commands/Attributes/PreconditionAttribute.cs b/src/Discord.Net.Commands/Attributes/PreconditionAttribute.cs
index 6b6bd8b6e..772027f55 100644
--- a/src/Discord.Net.Commands/Attributes/PreconditionAttribute.cs
+++ b/src/Discord.Net.Commands/Attributes/PreconditionAttribute.cs
@@ -3,6 +3,7 @@ using System.Threading.Tasks;
namespace Discord.Commands
{
+ /// Requires the module or class to pass the specified precondition before execution can begin.
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = true, Inherited = true)]
public abstract class PreconditionAttribute : Attribute
{
diff --git a/src/Discord.Net.Commands/CommandException.cs b/src/Discord.Net.Commands/CommandException.cs
index 335033258..c44bb2a01 100644
--- a/src/Discord.Net.Commands/CommandException.cs
+++ b/src/Discord.Net.Commands/CommandException.cs
@@ -2,7 +2,7 @@ using System;
namespace Discord.Commands
{
- /// An exception thrown when a command fails to execute.
+ /// Thrown when a command fails to execute.
public class CommandException : Exception
{
/// The command that caused the exception.
diff --git a/src/Discord.Net.Core/Entities/Guilds/IGuild.cs b/src/Discord.Net.Core/Entities/Guilds/IGuild.cs
index 2f0599d76..8ac539ef7 100644
--- a/src/Discord.Net.Core/Entities/Guilds/IGuild.cs
+++ b/src/Discord.Net.Core/Entities/Guilds/IGuild.cs
@@ -1,4 +1,4 @@
-using Discord.Audio;
+using Discord.Audio;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
@@ -15,34 +15,34 @@ namespace Discord
bool IsEmbeddable { get; }
/// Gets the default message notifications for users who haven't explicitly set their notification settings.
DefaultMessageNotifications DefaultMessageNotifications { get; }
- /// Gets the level of mfa requirements a user must fulfill before being allowed to perform administrative actions in this guild.
+ /// Gets the level of Multi-Factor Authentication requirements a user must fulfill before being allowed to perform administrative actions in this guild.
MfaLevel MfaLevel { get; }
/// Gets the level of requirements a user must fulfill before being allowed to post messages in this guild.
VerificationLevel VerificationLevel { get; }
- /// Returns the id of this guild's icon, or null if one is not set.
+ /// Returns the ID of this guild's icon, or null if one is not set.
string IconId { get; }
/// Returns the url to this guild's icon, or null if one is not set.
string IconUrl { get; }
- /// Returns the id of this guild's splash image, or null if one is not set.
+ /// Returns the ID of this guild's splash image, or null if one is not set.
string SplashId { get; }
/// Returns the url to this guild's splash image, or null if one is not set.
string SplashUrl { get; }
/// Returns true if this guild is currently connected and ready to be used. Only applies to the WebSocket client.
bool Available { get; }
- /// Gets the id of the AFK voice channel for this guild if set, or null if not.
+ /// Gets the ID of the AFK voice channel for this guild if set, or null if not.
ulong? AFKChannelId { get; }
- /// Gets the id of the the default channel for this guild.
+ /// Gets the ID of the the default channel for this guild.
ulong DefaultChannelId { get; }
- /// Gets the id of the embed channel for this guild if set, or null if not.
+ /// Gets the ID of the embed channel for this guild if set, or null if not.
ulong? EmbedChannelId { get; }
- /// Gets the id of the channel where randomized welcome messages are sent, or null if not.
+ /// Gets the ID of the channel where randomized welcome messages are sent, or null if not.
ulong? SystemChannelId { get; }
- /// Gets the id of the user that created this guild.
+ /// Gets the ID of the user that created this guild.
ulong OwnerId { get; }
- /// Gets the id of the region hosting this guild's voice channels.
+ /// Gets the ID of the region hosting this guild's voice channels.
string VoiceRegionId { get; }
- /// Gets the IAudioClient currently associated with this guild.
+ /// Gets the currently associated with this guild.
IAudioClient AudioClient { get; }
/// Gets the built-in role containing all users in this guild.
IRole EveryoneRole { get; }
@@ -67,34 +67,53 @@ namespace Discord
/// Gets a collection of all users banned on this guild.
Task> GetBansAsync(RequestOptions options = null);
/// Bans the provided user from this guild and optionally prunes their recent messages.
- /// The number of days to remove messages from this user for - must be between [0, 7]
+ /// The user to ban.
+ /// The number of days to remove messages from this user for - must be between [0, 7]
+ /// The reason of the ban to be written in the audit log.
Task AddBanAsync(IUser user, int pruneDays = 0, string reason = null, RequestOptions options = null);
- /// Bans the provided user id from this guild and optionally prunes their recent messages.
+ /// Bans the provided user ID from this guild and optionally prunes their recent messages.
+ /// The ID of the user to ban.
/// The number of days to remove messages from this user for - must be between [0, 7]
+ /// The reason of the ban to be written in the audit log.
Task AddBanAsync(ulong userId, int pruneDays = 0, string reason = null, RequestOptions options = null);
/// Unbans the provided user if it is currently banned.
Task RemoveBanAsync(IUser user, RequestOptions options = null);
- /// Unbans the provided user id if it is currently banned.
+ /// Unbans the provided user ID if it is currently banned.
Task RemoveBanAsync(ulong userId, RequestOptions options = null);
/// Gets a collection of all channels in this guild.
Task> GetChannelsAsync(CacheMode mode = CacheMode.AllowDownload, RequestOptions options = null);
- /// Gets the channel in this guild with the provided id, or null if not found.
+ /// Gets the channel in this guild with the provided ID, or null if not found.
+ /// The channel ID.
Task GetChannelAsync(ulong id, CacheMode mode = CacheMode.AllowDownload, RequestOptions options = null);
+ /// Gets a collection of all text channels in this guild.
Task> GetTextChannelsAsync(CacheMode mode = CacheMode.AllowDownload, RequestOptions options = null);
+ /// Gets a text channel in this guild with the provided ID, or null if not found.
+ /// The text channel ID.
Task GetTextChannelAsync(ulong id, CacheMode mode = CacheMode.AllowDownload, RequestOptions options = null);
+ /// Gets a collection of all voice channels in this guild.
Task> GetVoiceChannelsAsync(CacheMode mode = CacheMode.AllowDownload, RequestOptions options = null);
+ /// Gets a collection of all category channels in this guild.
Task> GetCategoriesAsync(CacheMode mode = CacheMode.AllowDownload, RequestOptions options = null);
+ /// Gets the voice channel in this guild with the provided ID, or null if not found.
+ /// The text channel ID.
Task GetVoiceChannelAsync(ulong id, CacheMode mode = CacheMode.AllowDownload, RequestOptions options = null);
+ /// Gets the voice AFK channel in this guild with the provided ID, or null if not found.
Task GetAFKChannelAsync(CacheMode mode = CacheMode.AllowDownload, RequestOptions options = null);
+ /// Gets the default system text channel in this guild with the provided ID, or null if none is set.
Task GetSystemChannelAsync(CacheMode mode = CacheMode.AllowDownload, RequestOptions options = null);
+ /// Gets the top viewable text channel in this guild with the provided ID, or null if not found.
Task GetDefaultChannelAsync(CacheMode mode = CacheMode.AllowDownload, RequestOptions options = null);
+ /// Gets the embed channel in this guild.
Task GetEmbedChannelAsync(CacheMode mode = CacheMode.AllowDownload, RequestOptions options = null);
/// Creates a new text channel.
+ /// The new name for the text channel.
Task CreateTextChannelAsync(string name, RequestOptions options = null);
/// Creates a new voice channel.
+ /// The new name for the voice channel.
Task CreateVoiceChannelAsync(string name, RequestOptions options = null);
/// Creates a new channel category.
+ /// The new name for the category.
Task CreateCategoryAsync(string name, RequestOptions options = null);
Task> GetIntegrationsAsync(RequestOptions options = null);
@@ -103,14 +122,20 @@ namespace Discord
/// Gets a collection of all invites to this guild.
Task> GetInvitesAsync(RequestOptions options = null);
- /// Gets the role in this guild with the provided id, or null if not found.
+ /// Gets the role in this guild with the provided ID, or null if not found.
+ /// The role ID.
IRole GetRole(ulong id);
- /// Creates a new role.
+ /// Creates a new role with the provided name.
+ /// The new name for the role.
+ /// The guild permission that the role should possess.
+ /// The color of the role.
+ /// Whether the role is separated from others on the sidebar.
Task CreateRoleAsync(string name, GuildPermissions? permissions = null, Color? color = null, bool isHoisted = false, RequestOptions options = null);
/// Gets a collection of all users in this guild.
Task> GetUsersAsync(CacheMode mode = CacheMode.AllowDownload, RequestOptions options = null); //TODO: shouldnt this be paged?
- /// Gets the user in this guild with the provided id, or null if not found.
+ /// Gets the user in this guild with the provided ID, or null if not found.
+ /// The user ID.
Task GetUserAsync(ulong id, CacheMode mode = CacheMode.AllowDownload, RequestOptions options = null);
/// Gets the current user for this guild.
Task GetCurrentUserAsync(CacheMode mode = CacheMode.AllowDownload, RequestOptions options = null);
@@ -119,20 +144,29 @@ namespace Discord
/// Downloads all users for this guild if the current list is incomplete.
Task DownloadUsersAsync();
/// Removes all users from this guild if they have not logged on in a provided number of days or, if simulate is true, returns the number of users that would be removed.
+ /// The number of days required for the users to be kicked.
+ /// Whether this prune action is a simulation.
+ /// The number of users removed from this guild.
Task PruneUsersAsync(int days = 30, bool simulate = false, RequestOptions options = null);
- /// Gets the webhook in this guild with the provided id, or null if not found.
+ /// Gets the webhook in this guild with the provided ID, or null if not found.
+ /// The webhook ID.
Task GetWebhookAsync(ulong id, RequestOptions options = null);
/// Gets a collection of all webhooks for this guild.
Task> GetWebhooksAsync(RequestOptions options = null);
/// Gets a specific emote from this guild.
+ /// The guild emote ID.
Task GetEmoteAsync(ulong id, RequestOptions options = null);
/// Creates a new emote in this guild.
+ /// The name of the guild emote.
+ /// The image of the new emote.
+ /// The roles to limit the emote usage to.
Task CreateEmoteAsync(string name, Image image, Optional> roles = default(Optional>), RequestOptions options = null);
/// Modifies an existing emote in this guild.
Task ModifyEmoteAsync(GuildEmote emote, Action func, RequestOptions options = null);
/// Deletes an existing emote from this guild.
+ /// The guild emote to delete.
Task DeleteEmoteAsync(GuildEmote emote, RequestOptions options = null);
}
-}
\ No newline at end of file
+}
diff --git a/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs b/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs
index 259dae5a8..5acb359c3 100644
--- a/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs
+++ b/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs
@@ -34,30 +34,53 @@ namespace Discord.WebSocket
private ImmutableArray _features;
private AudioClient _audioClient;
+ ///
public string Name { get; private set; }
+ ///
public int AFKTimeout { get; private set; }
+ ///
public bool IsEmbeddable { get; private set; }
+ ///
public VerificationLevel VerificationLevel { get; private set; }
+ ///
public MfaLevel MfaLevel { get; private set; }
+ ///
public DefaultMessageNotifications DefaultMessageNotifications { get; private set; }
+ /// Gets the number of members.
+ ///
+ /// The number of members is returned by Discord and is the most accurate.
+ /// You may see discrepancy between the Users collection and this.
+ ///
public int MemberCount { get; internal set; }
+ /// Gets the number of members downloaded to the local guild cache.
public int DownloadedMemberCount { get; private set; }
internal bool IsAvailable { get; private set; }
+ /// Indicates whether the client is connected to this guild.
public bool IsConnected { get; internal set; }
internal ulong? AFKChannelId { get; private set; }
internal ulong? EmbedChannelId { get; private set; }
internal ulong? SystemChannelId { get; private set; }
+ ///
public ulong OwnerId { get; private set; }
+ /// Gets the user that owns this guild.
public SocketGuildUser Owner => GetUser(OwnerId);
+ ///
public string VoiceRegionId { get; private set; }
+ ///
public string IconId { get; private set; }
+ ///
public string SplashId { get; private set; }
+ ///
public DateTimeOffset CreatedAt => SnowflakeUtils.FromSnowflake(Id);
+ ///
public string IconUrl => CDN.GetGuildIconUrl(Id, IconId);
+ ///
public string SplashUrl => CDN.GetGuildSplashUrl(Id, SplashId);
+ /// Indicates whether the client has all the members downloaded to the local guild cache.
public bool HasAllMembers => MemberCount == DownloadedMemberCount;// _downloaderPromise.Task.IsCompleted;
+ /// Indicates whether the guild cache is synced to this guild.
public bool IsSynced => _syncPromise.Task.IsCompleted;
public Task SyncPromise => _syncPromise.Task;
public Task DownloaderPromise => _downloaderPromise.Task;
@@ -270,32 +293,43 @@ namespace Discord.WebSocket
}
//General
+ ///
public Task DeleteAsync(RequestOptions options = null)
=> GuildHelper.DeleteAsync(this, Discord, options);
+ ///
public Task ModifyAsync(Action func, RequestOptions options = null)
=> GuildHelper.ModifyAsync(this, Discord, func, options);
+ ///
public Task ModifyEmbedAsync(Action func, RequestOptions options = null)
=> GuildHelper.ModifyEmbedAsync(this, Discord, func, options);
+ ///
public Task ReorderChannelsAsync(IEnumerable args, RequestOptions options = null)
=> GuildHelper.ReorderChannelsAsync(this, Discord, args, options);
+ ///
public Task ReorderRolesAsync(IEnumerable args, RequestOptions options = null)
=> GuildHelper.ReorderRolesAsync(this, Discord, args, options);
+ ///
public Task LeaveAsync(RequestOptions options = null)
=> GuildHelper.LeaveAsync(this, Discord, options);
//Bans
+ /// Gets a collection of the banned users in this guild.
public Task> GetBansAsync(RequestOptions options = null)
=> GuildHelper.GetBansAsync(this, Discord, options);
+ ///
public Task AddBanAsync(IUser user, int pruneDays = 0, string reason = null, RequestOptions options = null)
=> GuildHelper.AddBanAsync(this, Discord, user.Id, pruneDays, reason, options);
+ ///
public Task AddBanAsync(ulong userId, int pruneDays = 0, string reason = null, RequestOptions options = null)
=> GuildHelper.AddBanAsync(this, Discord, userId, pruneDays, reason, options);
+ ///
public Task RemoveBanAsync(IUser user, RequestOptions options = null)
=> GuildHelper.RemoveBanAsync(this, Discord, user.Id, options);
+ ///
public Task RemoveBanAsync(ulong userId, RequestOptions options = null)
=> GuildHelper.RemoveBanAsync(this, Discord, userId, options);
@@ -441,12 +475,16 @@ namespace Discord.WebSocket
=> GuildHelper.GetWebhooksAsync(this, Discord, options);
//Emotes
+ ///
public Task GetEmoteAsync(ulong id, RequestOptions options = null)
=> GuildHelper.GetEmoteAsync(this, Discord, id, options);
+ ///
public Task CreateEmoteAsync(string name, Image image, Optional> roles = default(Optional>), RequestOptions options = null)
=> GuildHelper.CreateEmoteAsync(this, Discord, name, image, roles, options);
+ ///
public Task ModifyEmoteAsync(GuildEmote emote, Action func, RequestOptions options = null)
=> GuildHelper.ModifyEmoteAsync(this, Discord, emote.Id, func, options);
+ ///
public Task DeleteEmoteAsync(GuildEmote emote, RequestOptions options = null)
=> GuildHelper.DeleteEmoteAsync(this, Discord, emote.Id, options);
@@ -630,71 +668,105 @@ namespace Discord.WebSocket
internal SocketGuild Clone() => MemberwiseClone() as SocketGuild;
//IGuild
+ ///
ulong? IGuild.AFKChannelId => AFKChannelId;
+ ///
IAudioClient IGuild.AudioClient => null;
+ ///
bool IGuild.Available => true;
+ ///
ulong IGuild.DefaultChannelId => DefaultChannel?.Id ?? 0;
+ ///
ulong? IGuild.EmbedChannelId => EmbedChannelId;
+ ///
ulong? IGuild.SystemChannelId => SystemChannelId;
+ ///
IRole IGuild.EveryoneRole => EveryoneRole;
+ ///
IReadOnlyCollection IGuild.Roles => Roles;
+ ///
async Task> IGuild.GetBansAsync(RequestOptions options)
=> await GetBansAsync(options).ConfigureAwait(false);
+ ///
Task> IGuild.GetChannelsAsync(CacheMode mode, RequestOptions options)
=> Task.FromResult>(Channels);
+ ///
Task IGuild.GetChannelAsync(ulong id, CacheMode mode, RequestOptions options)
=> Task.FromResult(GetChannel(id));
+ ///
Task> IGuild.GetTextChannelsAsync(CacheMode mode, RequestOptions options)
=> Task.FromResult>(TextChannels);
+ ///
Task IGuild.GetTextChannelAsync(ulong id, CacheMode mode, RequestOptions options)
=> Task.FromResult(GetTextChannel(id));
+ ///
Task> IGuild.GetVoiceChannelsAsync(CacheMode mode, RequestOptions options)
=> Task.FromResult>(VoiceChannels);
+ ///
Task> IGuild.GetCategoriesAsync(CacheMode mode , RequestOptions options)
=> Task.FromResult>(CategoryChannels);
+ ///
Task IGuild.GetVoiceChannelAsync(ulong id, CacheMode mode, RequestOptions options)
=> Task.FromResult(GetVoiceChannel(id));
+ ///
Task IGuild.GetAFKChannelAsync(CacheMode mode, RequestOptions options)
=> Task.FromResult(AFKChannel);
+ ///
Task IGuild.GetDefaultChannelAsync(CacheMode mode, RequestOptions options)
=> Task.FromResult(DefaultChannel);
+ ///
Task IGuild.GetEmbedChannelAsync(CacheMode mode, RequestOptions options)
=> Task.FromResult(EmbedChannel);
+ ///
Task IGuild.GetSystemChannelAsync(CacheMode mode, RequestOptions options)
=> Task.FromResult(SystemChannel);
+ ///
async Task IGuild.CreateTextChannelAsync(string name, RequestOptions options)
=> await CreateTextChannelAsync(name, options).ConfigureAwait(false);
+ ///
async Task IGuild.CreateVoiceChannelAsync(string name, RequestOptions options)
=> await CreateVoiceChannelAsync(name, options).ConfigureAwait(false);
+ ///
async Task IGuild.CreateCategoryAsync(string name, RequestOptions options)
=> await CreateCategoryChannelAsync(name, options).ConfigureAwait(false);
+ ///
async Task> IGuild.GetIntegrationsAsync(RequestOptions options)
=> await GetIntegrationsAsync(options).ConfigureAwait(false);
+ ///
async Task IGuild.CreateIntegrationAsync(ulong id, string type, RequestOptions options)
=> await CreateIntegrationAsync(id, type, options).ConfigureAwait(false);
+ ///
async Task> IGuild.GetInvitesAsync(RequestOptions options)
=> await GetInvitesAsync(options).ConfigureAwait(false);
+ ///
IRole IGuild.GetRole(ulong id)
=> GetRole(id);
+ ///
async Task IGuild.CreateRoleAsync(string name, GuildPermissions? permissions, Color? color, bool isHoisted, RequestOptions options)
=> await CreateRoleAsync(name, permissions, color, isHoisted, options).ConfigureAwait(false);
+ ///
Task> IGuild.GetUsersAsync(CacheMode mode, RequestOptions options)
=> Task.FromResult>(Users);
+ ///
Task IGuild.GetUserAsync(ulong id, CacheMode mode, RequestOptions options)
=> Task.FromResult(GetUser(id));
+ ///
Task IGuild.GetCurrentUserAsync(CacheMode mode, RequestOptions options)
=> Task.FromResult(CurrentUser);
+ ///
Task IGuild.GetOwnerAsync(CacheMode mode, RequestOptions options)
=> Task.FromResult(Owner);
+ ///
async Task IGuild.GetWebhookAsync(ulong id, RequestOptions options)
=> await GetWebhookAsync(id, options);
+ ///
async Task> IGuild.GetWebhooksAsync(RequestOptions options)
=> await GetWebhooksAsync(options);
}