refactor: use get guild role endpoint (#10443)

* refactor: use get guild role endpoint

* style: import order

---------

Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
This commit is contained in:
Almeida
2024-08-21 23:14:33 +01:00
committed by GitHub
parent 00accf7470
commit bba0e72e22
2 changed files with 34 additions and 7 deletions

View File

@@ -2,7 +2,8 @@
const process = require('node:process');
const { Collection } = require('@discordjs/collection');
const { Routes } = require('discord-api-types/v10');
const { DiscordAPIError } = require('@discordjs/rest');
const { RESTJSONErrorCodes, Routes } = require('discord-api-types/v10');
const CachedManager = require('./CachedManager');
const { DiscordjsTypeError, ErrorCodes } = require('../errors');
const { Role } = require('../structures/Role');
@@ -61,16 +62,29 @@ class RoleManager extends CachedManager {
* .catch(console.error);
*/
async fetch(id, { cache = true, force = false } = {}) {
if (id && !force) {
if (!id) {
const data = await this.client.rest.get(Routes.guildRoles(this.guild.id));
const roles = new Collection();
for (const role of data) roles.set(role.id, this._add(role, cache));
return roles;
}
if (!force) {
const existing = this.cache.get(id);
if (existing) return existing;
}
// We cannot fetch a single role, as of this commit's date, Discord API throws with 405
const data = await this.client.rest.get(Routes.guildRoles(this.guild.id));
const roles = new Collection();
for (const role of data) roles.set(role.id, this._add(role, cache));
return id ? roles.get(id) ?? null : roles;
try {
const data = await this.client.rest.get(Routes.guildRole(this.guild.id, id));
return this._add(data, cache);
} catch (error) {
// TODO: Remove this catch in the next major version
if (error instanceof DiscordAPIError && error.code === RESTJSONErrorCodes.UnknownRole) {
return null;
}
throw error;
}
}
/**