From 488b5fce5374723d2ea7ee6eae7793564b759beb Mon Sep 17 00:00:00 2001 From: DJj123dj <80536295+DJj123dj@users.noreply.github.com> Date: Sat, 27 Dec 2025 10:42:10 +0100 Subject: [PATCH] Fixed fetch() errors of unknown guild members --- src/core/api/defaults/permission.ts | 5 +++-- src/core/api/modules/permission.ts | 10 +++++++--- src/core/api/openticket/option.ts | 10 +++++++++- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/core/api/defaults/permission.ts b/src/core/api/defaults/permission.ts index 23b4b02..2a67d3e 100644 --- a/src/core/api/defaults/permission.ts +++ b/src/core/api/defaults/permission.ts @@ -3,6 +3,7 @@ /////////////////////////////////////// import { ODDebugger } from "../modules/console" import { ODPermissionManager } from "../modules/permission" +import { ODClientManager_Default } from "./client" /**## ODPermissionManager_Default `default_class` * This is a special class that adds type definitions & typescript to the ODPermissionManager class. @@ -11,8 +12,8 @@ import { ODPermissionManager } from "../modules/permission" * This default class is made for the global variable `opendiscord.permissions`! */ export class ODPermissionManager_Default extends ODPermissionManager { - constructor(debug:ODDebugger){ - super(debug,true) + constructor(debug:ODDebugger,client:ODClientManager_Default){ + super(debug,client,true) } } diff --git a/src/core/api/modules/permission.ts b/src/core/api/modules/permission.ts index fbfd12b..5ae1d72 100644 --- a/src/core/api/modules/permission.ts +++ b/src/core/api/modules/permission.ts @@ -4,6 +4,7 @@ import { ODId, ODValidId, ODManager, ODSystemError, ODManagerData } from "./base" import * as discord from "discord.js" import { ODDebugger } from "./console" +import { ODClientManager } from "./client" /**## ODPermissionType `type` * All available permission types/levels. Can be used in the `ODPermission` class. @@ -111,6 +112,8 @@ export type ODPermissionCalculationCallback = (user:discord.User, channel?:disco export class ODPermissionManager extends ODManager { /**The function for calculating permissions in this manager. */ #calculation: ODPermissionCalculationCallback|null + /**An alias to the Open Discord client manager. */ + #client: ODClientManager /**The result which is returned when no other permissions match. (`member` by default) */ defaultResult: ODPermissionResult = { level:ODPermissionLevel["member"], @@ -119,9 +122,10 @@ export class ODPermissionManager extends ODManager { source:null } - constructor(debug:ODDebugger, useDefaultCalculation?:boolean){ + constructor(debug:ODDebugger, client:ODClientManager, useDefaultCalculation?:boolean){ super(debug,"permission") this.#calculation = useDefaultCalculation ? this.#defaultCalculation : null + this.#client = client } /**Edit the permission calculation function in this manager. */ @@ -193,7 +197,7 @@ export class ODPermissionManager extends ODManager { //check for global role permissions if (allowGlobalRoleScope){ if (guild){ - const member = await guild.members.fetch(user.id) + const member = await this.#client.fetchGuildMember(guild,user.id) if (member){ const memberRoles = member.roles.cache.map((role) => role.id) const roles = this.getFiltered((permission) => (!idRegex || (idRegex && idRegex.test(permission.id.value))) && permission.scope == "global-role" && (permission.value instanceof discord.Role) && memberRoles.includes(permission.value.id) && permission.value.guild.id == guild.id) @@ -256,7 +260,7 @@ export class ODPermissionManager extends ODManager { //check for channel role permissions if (allowChannelRoleScope){ - const member = await guild.members.fetch(user.id) + const member = await this.#client.fetchGuildMember(guild,user.id) if (member){ const memberRoles = member.roles.cache.map((role) => role.id) const roles = this.getFiltered((permission) => (!idRegex || (idRegex && idRegex.test(permission.id.value))) && permission.scope == "channel-role" && permission.channel && (permission.channel.id == channel.id) && (permission.value instanceof discord.Role) && memberRoles.includes(permission.value.id) && permission.value.guild.id == guild.id) diff --git a/src/core/api/openticket/option.ts b/src/core/api/openticket/option.ts index f5351a7..69d2be9 100644 --- a/src/core/api/openticket/option.ts +++ b/src/core/api/openticket/option.ts @@ -357,13 +357,21 @@ export class ODOptionSuffixManager extends ODManager { const suffix = this.getAll().find((suffix) => suffix.option.id.value == option.id.value) if (!suffix) return null try{ - const member = await guild.members.fetch(user.id) + const member = await this.#getMember(guild,user) + if (!member) return null return await suffix.getSuffix(member) }catch(err){ process.emit("uncaughtException",err) return null } } + async #getMember(guild:discord.Guild,user:discord.User){ + try{ + return await guild.members.fetch(user.id) + }catch{ + return null + } + } } /**## ODOptionSuffix `class`