Skip to content

Commit 4f7c58d

Browse files
committed
feat: allow guild emoji to be set as role icon
1 parent c941f41 commit 4f7c58d

File tree

3 files changed

+16
-7
lines changed

3 files changed

+16
-7
lines changed

src/managers/RoleManager.js

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ class RoleManager extends CachedManager {
105105
* @property {PermissionResolvable} [permissions] The permissions for the new role
106106
* @property {number} [position] The position of the new role
107107
* @property {boolean} [mentionable] Whether or not the new role should be mentionable
108-
* @property {?(BufferResolvable|Base64Resolvable)} [icon] The icon for the role
108+
* @property {?(BufferResolvable|Base64Resolvable|EmojiResolvable)} [icon] The icon for the role
109109
* @property {?string} [unicodeEmoji] The name of the unicode emoji for the role
110110
* @property {string} [reason] The reason for creating this role
111111
*/
@@ -134,7 +134,10 @@ class RoleManager extends CachedManager {
134134
let { name, color, hoist, permissions, position, mentionable, reason, icon, unicodeEmoji } = options;
135135
if (color) color = resolveColor(color);
136136
if (typeof permissions !== 'undefined') permissions = new Permissions(permissions);
137-
if (icon) icon = await DataResolver.resolveImage(icon);
137+
if (icon) {
138+
const guildEmojiURL = this.guild.emojis.resolve(icon)?.url;
139+
icon = guildEmojiURL ? await DataResolver.resolveImage(guildEmojiURL) : await DataResolver.resolveImage(icon);
140+
}
138141

139142
const data = await this.client.api.guilds(this.guild.id).roles.post({
140143
data: {
@@ -188,13 +191,19 @@ class RoleManager extends CachedManager {
188191
});
189192
}
190193

194+
let icon = data.icon;
195+
if (typeof icon !== 'undefined') {
196+
const guildEmojiURL = this.guild.emojis.resolve(icon)?.url;
197+
icon = guildEmojiURL ? await DataResolver.resolveImage(guildEmojiURL) : await DataResolver.resolveImage(icon);
198+
}
199+
191200
const _data = {
192201
name: data.name,
193202
color: typeof data.color === 'undefined' ? undefined : resolveColor(data.color),
194203
hoist: data.hoist,
195204
permissions: typeof data.permissions === 'undefined' ? undefined : new Permissions(data.permissions),
196205
mentionable: data.mentionable,
197-
icon: typeof data.icon === 'undefined' ? undefined : await DataResolver.resolveImage(data.icon),
206+
icon,
198207
unicode_emoji: data.unicodeEmoji,
199208
};
200209

src/structures/Role.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ class Role extends Base {
195195
* @property {number} [position] The position of the role
196196
* @property {PermissionResolvable} [permissions] The permissions of the role
197197
* @property {boolean} [mentionable] Whether or not the role should be mentionable
198-
* @property {?(BufferResolvable|Base64Resolvable)} [icon] The icon for the role
198+
* @property {?(BufferResolvable|Base64Resolvable|EmojiResolvable)} [icon] The icon for the role
199199
* @property {?string} [unicodeEmoji] The name of the unicode emoji for the role
200200
*/
201201

@@ -308,7 +308,7 @@ class Role extends Base {
308308

309309
/**
310310
* Sets a new icon for the role.
311-
* @param {?(BufferResolvable|Base64Resolvable)} icon The icon for the role
311+
* @param {?(BufferResolvable|Base64Resolvable|EmojiResolvable)} icon The icon for the role
312312
* @param {string} [reason] Reason for changing the role's icon
313313
* @returns {Promise<Role>}
314314
*/

typings/index.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1620,7 +1620,7 @@ export class Role extends Base {
16201620
public setMentionable(mentionable: boolean, reason?: string): Promise<Role>;
16211621
public setName(name: string, reason?: string): Promise<Role>;
16221622
public setPermissions(permissions: PermissionResolvable, reason?: string): Promise<Role>;
1623-
public setIcon(icon: BufferResolvable | Base64Resolvable | null, reason?: string): Promise<Role>;
1623+
public setIcon(icon: BufferResolvable | Base64Resolvable | EmojiResolvable | null, reason?: string): Promise<Role>;
16241624
public setPosition(position: number, options?: SetRolePositionOptions): Promise<Role>;
16251625
public setUnicodeEmoji(unicodeEmoji: string | null, reason?: string): Promise<Role>;
16261626
public toJSON(): unknown;
@@ -4582,7 +4582,7 @@ export interface RoleData {
45824582
position?: number;
45834583
permissions?: PermissionResolvable;
45844584
mentionable?: boolean;
4585-
icon?: BufferResolvable | Base64Resolvable | null;
4585+
icon?: BufferResolvable | Base64Resolvable | EmojiResolvable | null;
45864586
unicodeEmoji?: string | null;
45874587
}
45884588

0 commit comments

Comments
 (0)