@@ -13,15 +13,20 @@ namespace Discord.Rest
{
await client.ApiClient.DeleteGuildRoleAsync(role.Guild.Id, role.Id, options).ConfigureAwait(false);
}
public static async Task<Model> ModifyAsync(IRole role, BaseDiscordClient client,
public static async Task<Model> ModifyAsync(IRole role, BaseDiscordClient client,
Action<RoleProperties> func, RequestOptions options)
{
var args = new RoleProperties();
func(args);
if (args.Icon.IsSpecified)
if (args.Icon.IsSpecified || args.Emoji.IsSpecified )
{
role.Guild.Features.EnsureFeature(GuildFeature.RoleIcons);
if (args.Icon.IsSpecified && args.Emoji.IsSpecified)
{
throw new ArgumentException("Emoji and Icon properties cannot be present on a role at the same time.");
}
}
var apiArgs = new API.Rest.ModifyGuildRoleParams
@@ -31,8 +36,20 @@ namespace Discord.Rest
Mentionable = args.Mentionable,
Name = args.Name,
Permissions = args.Permissions.IsSpecified ? args.Permissions.Value.RawValue.ToString() : Optional.Create<string>(),
Icon = args.Icon.IsSpecified ? args.Icon.Value.ToModel() : Optional<API.Image>.Unspecified
Icon = args.Icon.IsSpecified ? args.Icon.Value.Value.ToModel() : Optional<API.Image?>.Unspecified,
Emoji = args.Emoji.GetValueOrDefault()?.Name ?? Optional<string>.Unspecified
};
if (args.Icon.IsSpecified && role.Emoji != null)
{
apiArgs.Emoji = null;
}
if (args.Emoji.IsSpecified && !string.IsNullOrEmpty(role.Icon))
{
apiArgs.Icon = null;
}
var model = await client.ApiClient.ModifyGuildRoleAsync(role.Guild.Id, role.Id, apiArgs, options).ConfigureAwait(false);
if (args.Position.IsSpecified)