diff --git a/azure/build.yml b/azure/build.yml
index 412e4a823..3399d7e3d 100644
--- a/azure/build.yml
+++ b/azure/build.yml
@@ -1,5 +1,5 @@
steps:
-- script: dotnet restore -v minimal Discord.Net.sln
+- script: dotnet restore --no-cache Discord.Net.sln
displayName: Restore packages
- script: dotnet build "Discord.Net.sln" --no-restore -v minimal -c $(buildConfiguration) /p:BuildNumber=$(buildNumber) /p:IsTagBuild=$(buildTag)
diff --git a/src/Discord.Net.Commands/Builders/ModuleClassBuilder.cs b/src/Discord.Net.Commands/Builders/ModuleClassBuilder.cs
index aec8dcbe3..28037b0fa 100644
--- a/src/Discord.Net.Commands/Builders/ModuleClassBuilder.cs
+++ b/src/Discord.Net.Commands/Builders/ModuleClassBuilder.cs
@@ -135,7 +135,8 @@ namespace Discord.Commands
if (builder.Name == null)
builder.Name = typeInfo.Name;
- var validCommands = typeInfo.DeclaredMethods.Where(IsValidCommandDefinition);
+ // Get all methods (including from inherited members), that are valid commands
+ var validCommands = typeInfo.GetMethods().Where(IsValidCommandDefinition);
foreach (var method in validCommands)
{
diff --git a/src/Discord.Net.Core/Entities/Channels/IMessageChannel.cs b/src/Discord.Net.Core/Entities/Channels/IMessageChannel.cs
index f5b986295..030a278bc 100644
--- a/src/Discord.Net.Core/Entities/Channels/IMessageChannel.cs
+++ b/src/Discord.Net.Core/Entities/Channels/IMessageChannel.cs
@@ -59,11 +59,15 @@ namespace Discord
/// The to be sent.
/// The options to be used when sending the request.
/// Whether the message attachment should be hidden as a spoiler.
+ ///
+ /// Specifies if notifications are sent for mentioned users and roles in the message .
+ /// If null, all mentioned roles and users will be notified.
+ ///
///
/// A task that represents an asynchronous send operation for delivering the message. The task result
/// contains the sent message.
///
- Task SendFileAsync(string filePath, string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false);
+ Task SendFileAsync(string filePath, string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null);
///
/// Sends a file to this message channel with an optional caption.
///
@@ -88,11 +92,15 @@ namespace Discord
/// The to be sent.
/// The options to be used when sending the request.
/// Whether the message attachment should be hidden as a spoiler.
+ ///
+ /// Specifies if notifications are sent for mentioned users and roles in the message .
+ /// If null, all mentioned roles and users will be notified.
+ ///
///
/// A task that represents an asynchronous send operation for delivering the message. The task result
/// contains the sent message.
///
- Task SendFileAsync(Stream stream, string filename, string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false);
+ Task SendFileAsync(Stream stream, string filename, string text = null, bool isTTS = false, Embed embed = null, RequestOptions options = null, bool isSpoiler = false, AllowedMentions allowedMentions = null);
///
/// Gets a message from this message channel.
diff --git a/src/Discord.Net.Core/Entities/Messages/AllowedMentionTypes.cs b/src/Discord.Net.Core/Entities/Messages/AllowedMentionTypes.cs
index 3ce6531b7..ecd872d83 100644
--- a/src/Discord.Net.Core/Entities/Messages/AllowedMentionTypes.cs
+++ b/src/Discord.Net.Core/Entities/Messages/AllowedMentionTypes.cs
@@ -8,17 +8,27 @@ namespace Discord
[Flags]
public enum AllowedMentionTypes
{
+ ///
+ /// No flag is set.
+ ///
+ ///
+ /// This flag is not used to control mentions.
+ ///
+ /// It will always be present and does not mean mentions will not be allowed.
+ ///
+ ///
+ None = 0,
///
/// Controls role mentions.
///
- Roles,
+ Roles = 1,
///
/// Controls user mentions.
///
- Users,
+ Users = 2,
///
/// Controls @everyone
and @here
mentions.
///
- Everyone,
+ Everyone = 4,
}
}
diff --git a/src/Discord.Net.Core/Entities/Messages/AllowedMentions.cs b/src/Discord.Net.Core/Entities/Messages/AllowedMentions.cs
index 9b168bbd0..d52feaa7d 100644
--- a/src/Discord.Net.Core/Entities/Messages/AllowedMentions.cs
+++ b/src/Discord.Net.Core/Entities/Messages/AllowedMentions.cs
@@ -39,7 +39,7 @@ namespace Discord
/// flag of the property. If the flag is set, the value of this property
/// must be null or empty.
///
- public List RoleIds { get; set; }
+ public List RoleIds { get; set; } = new List();
///
/// Gets or sets the list of all user ids that will be mentioned.
@@ -47,7 +47,7 @@ namespace Discord
/// flag of the property. If the flag is set, the value of this property
/// must be null or empty.
///
- public List UserIds { get; set; }
+ public List UserIds { get; set; } = new List();
///
/// Initializes a new instance of the class.
diff --git a/src/Discord.Net.Core/Entities/Users/IGuildUser.cs b/src/Discord.Net.Core/Entities/Users/IGuildUser.cs
index 60fa06cbd..92b146e05 100644
--- a/src/Discord.Net.Core/Entities/Users/IGuildUser.cs
+++ b/src/Discord.Net.Core/Entities/Users/IGuildUser.cs
@@ -73,7 +73,7 @@ namespace Discord
///
///
/// The following example checks if the current user has the ability to send a message with attachment in
- /// this channel; if so, uploads a file via .
+ /// this channel; if so, uploads a file via .
///
/// if (currentUser?.GetPermissions(targetChannel)?.AttachFiles)
/// await targetChannel.SendFileAsync("fortnite.png");
diff --git a/src/Discord.Net.Core/GatewayIntents.cs b/src/Discord.Net.Core/GatewayIntents.cs
new file mode 100644
index 000000000..e58fc07d1
--- /dev/null
+++ b/src/Discord.Net.Core/GatewayIntents.cs
@@ -0,0 +1,41 @@
+using System;
+
+namespace Discord
+{
+ [Flags]
+ public enum GatewayIntents
+ {
+ /// This intent includes no events
+ None = 0,
+ /// This intent includes GUILD_CREATE, GUILD_UPDATE, GUILD_DELETE, GUILD_ROLE_CREATE, GUILD_ROLE_UPDATE, GUILD_ROLE_DELETE, CHANNEL_CREATE, CHANNEL_UPDATE, CHANNEL_DELETE, CHANNEL_PINS_UPDATE
+ Guilds = 1 << 0,
+ /// This intent includes GUILD_MEMBER_ADD, GUILD_MEMBER_UPDATE, GUILD_MEMBER_REMOVE
+ GuildMembers = 1 << 1,
+ /// This intent includes GUILD_BAN_ADD, GUILD_BAN_REMOVE
+ GuildBans = 1 << 2,
+ /// This intent includes GUILD_EMOJIS_UPDATE
+ GuildEmojis = 1 << 3,
+ /// This intent includes GUILD_INTEGRATIONS_UPDATE
+ GuildIntegrations = 1 << 4,
+ /// This intent includes WEBHOOKS_UPDATE
+ GuildWebhooks = 1 << 5,
+ /// This intent includes INVITE_CREATE, INVITE_DELETE
+ GuildInvites = 1 << 6,
+ /// This intent includes VOICE_STATE_UPDATE
+ GuildVoiceStates = 1 << 7,
+ /// This intent includes PRESENCE_UPDATE
+ GuildPresences = 1 << 8,
+ /// This intent includes MESSAGE_CREATE, MESSAGE_UPDATE, MESSAGE_DELETE, MESSAGE_DELETE_BULK
+ GuildMessages = 1 << 9,
+ /// This intent includes MESSAGE_REACTION_ADD, MESSAGE_REACTION_REMOVE, MESSAGE_REACTION_REMOVE_ALL, MESSAGE_REACTION_REMOVE_EMOJI
+ GuildMessageReactions = 1 << 10,
+ /// This intent includes TYPING_START
+ GuildMessageTyping = 1 << 11,
+ /// This intent includes CHANNEL_CREATE, MESSAGE_CREATE, MESSAGE_UPDATE, MESSAGE_DELETE, CHANNEL_PINS_UPDATE
+ DirectMessages = 1 << 12,
+ /// This intent includes MESSAGE_REACTION_ADD, MESSAGE_REACTION_REMOVE, MESSAGE_REACTION_REMOVE_ALL, MESSAGE_REACTION_REMOVE_EMOJI
+ DirectMessageReactions = 1 << 13,
+ /// This intent includes TYPING_START
+ DirectMessageTyping = 1 << 14,
+ }
+}
diff --git a/src/Discord.Net.Rest/API/Rest/UploadFileParams.cs b/src/Discord.Net.Rest/API/Rest/UploadFileParams.cs
index 7ba21d012..64535e6d7 100644
--- a/src/Discord.Net.Rest/API/Rest/UploadFileParams.cs
+++ b/src/Discord.Net.Rest/API/Rest/UploadFileParams.cs
@@ -19,6 +19,7 @@ namespace Discord.API.Rest
public Optional Nonce { get; set; }
public Optional IsTTS { get; set; }
public Optional