From 0bf126088fcc13cfc9a03eefa4bbd9b422acbf7c Mon Sep 17 00:00:00 2001
From: Still Hsu <341464@gmail.com>
Date: Tue, 26 Jun 2018 11:25:42 +0800
Subject: [PATCH] Add vanity invite support
---
src/Discord.Net.Core/Entities/Guilds/IGuild.cs | 9 +++++++++
src/Discord.Net.Rest/DiscordRestApiClient.cs | 8 ++++++++
src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs | 6 ++++++
src/Discord.Net.Rest/Entities/Guilds/RestGuild.cs | 12 ++++++++++++
.../Entities/Guilds/SocketGuild.cs | 12 ++++++++++++
5 files changed, 47 insertions(+)
diff --git a/src/Discord.Net.Core/Entities/Guilds/IGuild.cs b/src/Discord.Net.Core/Entities/Guilds/IGuild.cs
index 4c1c274d0..604945758 100644
--- a/src/Discord.Net.Core/Entities/Guilds/IGuild.cs
+++ b/src/Discord.Net.Core/Entities/Guilds/IGuild.cs
@@ -120,6 +120,15 @@ namespace Discord
/// Gets a collection of all invites to this guild.
Task> GetInvitesAsync(RequestOptions options = null);
+ ///
+ /// Gets the vanity invite URL of this guild.
+ ///
+ /// The options to be used when sending the request.
+ ///
+ /// An awaitable containing the partial metadata of the vanity invite found within
+ /// this guild.
+ ///
+ Task GetVanityInviteAsync(RequestOptions options = null);
/// Gets the role in this guild with the provided id, or null if not found.
IRole GetRole(ulong id);
diff --git a/src/Discord.Net.Rest/DiscordRestApiClient.cs b/src/Discord.Net.Rest/DiscordRestApiClient.cs
index 1094fc4d1..2236dbbf8 100644
--- a/src/Discord.Net.Rest/DiscordRestApiClient.cs
+++ b/src/Discord.Net.Rest/DiscordRestApiClient.cs
@@ -925,6 +925,14 @@ namespace Discord.API
}
catch (HttpException ex) when (ex.HttpCode == HttpStatusCode.NotFound) { return null; }
}
+ public async Task GetVanityInviteAsync(ulong guildId, RequestOptions options = null)
+ {
+ Preconditions.NotEqual(guildId, 0, nameof(guildId));
+ options = RequestOptions.CreateOrClone(options);
+
+ var ids = new BucketIds(guildId: guildId);
+ return await SendAsync("GET", () => $"guilds/{guildId}/vanity-url", ids, options: options).ConfigureAwait(false);
+ }
public async Task> GetGuildInvitesAsync(ulong guildId, RequestOptions options = null)
{
Preconditions.NotEqual(guildId, 0, nameof(guildId));
diff --git a/src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs b/src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs
index c76b41a91..4bd0e9972 100644
--- a/src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs
+++ b/src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs
@@ -210,6 +210,12 @@ namespace Discord.Rest
var models = await client.ApiClient.GetGuildInvitesAsync(guild.Id, options).ConfigureAwait(false);
return models.Select(x => RestInviteMetadata.Create(client, guild, null, x)).ToImmutableArray();
}
+ public static async Task GetVanityInviteAsync(IGuild guild, BaseDiscordClient client,
+ RequestOptions options)
+ {
+ var model = await client.ApiClient.GetVanityInviteAsync(guild.Id, options).ConfigureAwait(false);
+ return RestInviteMetadata.Create(client, guild, null, model);
+ }
//Roles
public static async Task CreateRoleAsync(IGuild guild, BaseDiscordClient client,
diff --git a/src/Discord.Net.Rest/Entities/Guilds/RestGuild.cs b/src/Discord.Net.Rest/Entities/Guilds/RestGuild.cs
index 357e22c85..9b3143268 100644
--- a/src/Discord.Net.Rest/Entities/Guilds/RestGuild.cs
+++ b/src/Discord.Net.Rest/Entities/Guilds/RestGuild.cs
@@ -238,6 +238,15 @@ namespace Discord.Rest
//Invites
public Task> GetInvitesAsync(RequestOptions options = null)
=> GuildHelper.GetInvitesAsync(this, Discord, options);
+ ///
+ /// Gets the vanity invite URL of this guild.
+ ///
+ /// The options to be used when sending the request.
+ ///
+ /// A partial metadata of the vanity invite found within this guild.
+ ///
+ public Task GetVanityInviteAsync(RequestOptions options = null)
+ => GuildHelper.GetVanityInviteAsync(this, Discord, options);
//Roles
public RestRole GetRole(ulong id)
@@ -397,6 +406,9 @@ namespace Discord.Rest
async Task> IGuild.GetInvitesAsync(RequestOptions options)
=> await GetInvitesAsync(options).ConfigureAwait(false);
+ ///
+ async Task IGuild.GetVanityInviteAsync(RequestOptions options)
+ => await GetVanityInviteAsync(options).ConfigureAwait(false);
IRole IGuild.GetRole(ulong id)
=> GetRole(id);
diff --git a/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs b/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs
index f41f61a7c..680706713 100644
--- a/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs
+++ b/src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs
@@ -345,6 +345,15 @@ namespace Discord.WebSocket
//Invites
public Task> GetInvitesAsync(RequestOptions options = null)
=> GuildHelper.GetInvitesAsync(this, Discord, options);
+ ///
+ /// Gets the vanity invite URL of this guild.
+ ///
+ /// The options to be used when sending the request.
+ ///
+ /// A partial metadata of the vanity invite found within this guild.
+ ///
+ public Task GetVanityInviteAsync(RequestOptions options = null)
+ => GuildHelper.GetVanityInviteAsync(this, Discord, options);
//Roles
public SocketRole GetRole(ulong id)
@@ -700,6 +709,9 @@ namespace Discord.WebSocket
async Task> IGuild.GetInvitesAsync(RequestOptions options)
=> await GetInvitesAsync(options).ConfigureAwait(false);
+ ///
+ async Task IGuild.GetVanityInviteAsync(RequestOptions options)
+ => await GetVanityInviteAsync(options).ConfigureAwait(false);
IRole IGuild.GetRole(ulong id)
=> GetRole(id);