| @@ -65,12 +65,12 @@ namespace Discord.Rest | |||||
| public static async Task AddReactionAsync(IMessage msg, IEmote emote, BaseDiscordClient client, RequestOptions options) | public static async Task AddReactionAsync(IMessage msg, IEmote emote, BaseDiscordClient client, RequestOptions options) | ||||
| { | { | ||||
| await client.ApiClient.AddReactionAsync(msg.Channel.Id, msg.Id, emote is Emote e ? $"{e.Name}:{e.Id}" : emote.Name, options).ConfigureAwait(false); | |||||
| await client.ApiClient.AddReactionAsync(msg.Channel.Id, msg.Id, emote is Emote e ? $"{e.Name}:{e.Id}" : UrlEncode(emote.Name), options).ConfigureAwait(false); | |||||
| } | } | ||||
| public static async Task RemoveReactionAsync(IMessage msg, ulong userId, IEmote emote, BaseDiscordClient client, RequestOptions options) | public static async Task RemoveReactionAsync(IMessage msg, ulong userId, IEmote emote, BaseDiscordClient client, RequestOptions options) | ||||
| { | { | ||||
| await client.ApiClient.RemoveReactionAsync(msg.Channel.Id, msg.Id, userId, emote is Emote e ? $"{e.Name}:{e.Id}" : emote.Name, options).ConfigureAwait(false); | |||||
| await client.ApiClient.RemoveReactionAsync(msg.Channel.Id, msg.Id, userId, emote is Emote e ? $"{e.Name}:{e.Id}" : UrlEncode(emote.Name), options).ConfigureAwait(false); | |||||
| } | } | ||||
| public static async Task RemoveAllReactionsAsync(IMessage msg, BaseDiscordClient client, RequestOptions options) | public static async Task RemoveAllReactionsAsync(IMessage msg, BaseDiscordClient client, RequestOptions options) | ||||
| @@ -80,14 +80,14 @@ namespace Discord.Rest | |||||
| public static async Task RemoveAllReactionsForEmoteAsync(IMessage msg, IEmote emote, BaseDiscordClient client, RequestOptions options) | public static async Task RemoveAllReactionsForEmoteAsync(IMessage msg, IEmote emote, BaseDiscordClient client, RequestOptions options) | ||||
| { | { | ||||
| await client.ApiClient.RemoveAllReactionsForEmoteAsync(msg.Channel.Id, msg.Id, emote is Emote e ? $"{e.Name}:{e.Id}" : emote.Name, options).ConfigureAwait(false); | |||||
| await client.ApiClient.RemoveAllReactionsForEmoteAsync(msg.Channel.Id, msg.Id, emote is Emote e ? $"{e.Name}:{e.Id}" : UrlEncode(emote.Name), options).ConfigureAwait(false); | |||||
| } | } | ||||
| public static IAsyncEnumerable<IReadOnlyCollection<IUser>> GetReactionUsersAsync(IMessage msg, IEmote emote, | public static IAsyncEnumerable<IReadOnlyCollection<IUser>> GetReactionUsersAsync(IMessage msg, IEmote emote, | ||||
| int? limit, BaseDiscordClient client, RequestOptions options) | int? limit, BaseDiscordClient client, RequestOptions options) | ||||
| { | { | ||||
| Preconditions.NotNull(emote, nameof(emote)); | Preconditions.NotNull(emote, nameof(emote)); | ||||
| var emoji = (emote is Emote e ? $"{e.Name}:{e.Id}" : emote.Name); | |||||
| var emoji = (emote is Emote e ? $"{e.Name}:{e.Id}" : UrlEncode(emote.Name)); | |||||
| return new PagedAsyncEnumerable<IUser>( | return new PagedAsyncEnumerable<IUser>( | ||||
| DiscordConfig.MaxUserReactionsPerBatch, | DiscordConfig.MaxUserReactionsPerBatch, | ||||
| @@ -114,7 +114,15 @@ namespace Discord.Rest | |||||
| }, | }, | ||||
| count: limit | count: limit | ||||
| ); | ); | ||||
| } | |||||
| private static string UrlEncode(string text) | |||||
| { | |||||
| #if NET461 | |||||
| return System.Net.WebUtility.UrlEncode(text); | |||||
| #else | |||||
| return System.Web.HttpUtility.UrlEncode(text); | |||||
| #endif | |||||
| } | } | ||||
| public static async Task PinAsync(IMessage msg, BaseDiscordClient client, | public static async Task PinAsync(IMessage msg, BaseDiscordClient client, | ||||