fix: Sending 2 requests instead of 1 to create a Guild role. (#1557)
The GuildHelper.CreateRoleAsync() was sending 2 requests to create a role. One to create the role, and one to modify the role that was created. This can be done in one request. So i have moved it to a single request to lower the amount of requests send to the api. This will also solve issue #1451.
This commit is contained in:
19
src/Discord.Net.Rest/API/Rest/CreateGuildRoleParams.cs
Normal file
19
src/Discord.Net.Rest/API/Rest/CreateGuildRoleParams.cs
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
namespace Discord.API.Rest
|
||||||
|
{
|
||||||
|
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
|
||||||
|
public class CreateGuildRoleParams
|
||||||
|
{
|
||||||
|
[JsonProperty("name")]
|
||||||
|
public Optional<string> Name { get; set; }
|
||||||
|
[JsonProperty("permissions")]
|
||||||
|
public Optional<ulong> Permissions { get; set; }
|
||||||
|
[JsonProperty("color")]
|
||||||
|
public Optional<uint> Color { get; set; }
|
||||||
|
[JsonProperty("hoist")]
|
||||||
|
public Optional<bool> Hoist { get; set; }
|
||||||
|
[JsonProperty("mentionable")]
|
||||||
|
public Optional<bool> Mentionable { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1174,13 +1174,13 @@ namespace Discord.API
|
|||||||
var ids = new BucketIds(guildId: guildId);
|
var ids = new BucketIds(guildId: guildId);
|
||||||
return await SendAsync<IReadOnlyCollection<Role>>("GET", () => $"guilds/{guildId}/roles", ids, options: options).ConfigureAwait(false);
|
return await SendAsync<IReadOnlyCollection<Role>>("GET", () => $"guilds/{guildId}/roles", ids, options: options).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
public async Task<Role> CreateGuildRoleAsync(ulong guildId, RequestOptions options = null)
|
public async Task<Role> CreateGuildRoleAsync(ulong guildId, Rest.CreateGuildRoleParams args, RequestOptions options = null)
|
||||||
{
|
{
|
||||||
Preconditions.NotEqual(guildId, 0, nameof(guildId));
|
Preconditions.NotEqual(guildId, 0, nameof(guildId));
|
||||||
options = RequestOptions.CreateOrClone(options);
|
options = RequestOptions.CreateOrClone(options);
|
||||||
|
|
||||||
var ids = new BucketIds(guildId: guildId);
|
var ids = new BucketIds(guildId: guildId);
|
||||||
return await SendAsync<Role>("POST", () => $"guilds/{guildId}/roles", ids, options: options).ConfigureAwait(false);
|
return await SendJsonAsync<Role>("POST", () => $"guilds/{guildId}/roles", args, ids, options: options).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
public async Task DeleteGuildRoleAsync(ulong guildId, ulong roleId, RequestOptions options = null)
|
public async Task DeleteGuildRoleAsync(ulong guildId, ulong roleId, RequestOptions options = null)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -264,19 +264,18 @@ namespace Discord.Rest
|
|||||||
{
|
{
|
||||||
if (name == null) throw new ArgumentNullException(paramName: nameof(name));
|
if (name == null) throw new ArgumentNullException(paramName: nameof(name));
|
||||||
|
|
||||||
var model = await client.ApiClient.CreateGuildRoleAsync(guild.Id, options).ConfigureAwait(false);
|
var createGuildRoleParams = new API.Rest.CreateGuildRoleParams
|
||||||
var role = RestRole.Create(client, guild, model);
|
|
||||||
|
|
||||||
await role.ModifyAsync(x =>
|
|
||||||
{
|
{
|
||||||
x.Name = name;
|
Color = color?.RawValue ?? Optional.Create<uint>(),
|
||||||
x.Permissions = (permissions ?? role.Permissions);
|
Hoist = isHoisted,
|
||||||
x.Color = (color ?? Color.Default);
|
Mentionable = isMentionable,
|
||||||
x.Hoist = isHoisted;
|
Name = name,
|
||||||
x.Mentionable = isMentionable;
|
Permissions = permissions?.RawValue ?? Optional.Create<ulong>()
|
||||||
}, options).ConfigureAwait(false);
|
};
|
||||||
|
|
||||||
return role;
|
var model = await client.ApiClient.CreateGuildRoleAsync(guild.Id, createGuildRoleParams, options).ConfigureAwait(false);
|
||||||
|
|
||||||
|
return RestRole.Create(client, guild, model);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Users
|
//Users
|
||||||
|
|||||||
Reference in New Issue
Block a user