Fixed fetch() errors of unknown guild members

This commit is contained in:
DJj123dj
2025-12-27 10:42:10 +01:00
parent c2117a67ed
commit 488b5fce53
3 changed files with 19 additions and 6 deletions
+3 -2
View File
@@ -3,6 +3,7 @@
/////////////////////////////////////// ///////////////////////////////////////
import { ODDebugger } from "../modules/console" import { ODDebugger } from "../modules/console"
import { ODPermissionManager } from "../modules/permission" import { ODPermissionManager } from "../modules/permission"
import { ODClientManager_Default } from "./client"
/**## ODPermissionManager_Default `default_class` /**## ODPermissionManager_Default `default_class`
* This is a special class that adds type definitions & typescript to the ODPermissionManager 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`! * This default class is made for the global variable `opendiscord.permissions`!
*/ */
export class ODPermissionManager_Default extends ODPermissionManager { export class ODPermissionManager_Default extends ODPermissionManager {
constructor(debug:ODDebugger){ constructor(debug:ODDebugger,client:ODClientManager_Default){
super(debug,true) super(debug,client,true)
} }
} }
+7 -3
View File
@@ -4,6 +4,7 @@
import { ODId, ODValidId, ODManager, ODSystemError, ODManagerData } from "./base" import { ODId, ODValidId, ODManager, ODSystemError, ODManagerData } from "./base"
import * as discord from "discord.js" import * as discord from "discord.js"
import { ODDebugger } from "./console" import { ODDebugger } from "./console"
import { ODClientManager } from "./client"
/**## ODPermissionType `type` /**## ODPermissionType `type`
* All available permission types/levels. Can be used in the `ODPermission` class. * 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<ODPermission> { export class ODPermissionManager extends ODManager<ODPermission> {
/**The function for calculating permissions in this manager. */ /**The function for calculating permissions in this manager. */
#calculation: ODPermissionCalculationCallback|null #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) */ /**The result which is returned when no other permissions match. (`member` by default) */
defaultResult: ODPermissionResult = { defaultResult: ODPermissionResult = {
level:ODPermissionLevel["member"], level:ODPermissionLevel["member"],
@@ -119,9 +122,10 @@ export class ODPermissionManager extends ODManager<ODPermission> {
source:null source:null
} }
constructor(debug:ODDebugger, useDefaultCalculation?:boolean){ constructor(debug:ODDebugger, client:ODClientManager, useDefaultCalculation?:boolean){
super(debug,"permission") super(debug,"permission")
this.#calculation = useDefaultCalculation ? this.#defaultCalculation : null this.#calculation = useDefaultCalculation ? this.#defaultCalculation : null
this.#client = client
} }
/**Edit the permission calculation function in this manager. */ /**Edit the permission calculation function in this manager. */
@@ -193,7 +197,7 @@ export class ODPermissionManager extends ODManager<ODPermission> {
//check for global role permissions //check for global role permissions
if (allowGlobalRoleScope){ if (allowGlobalRoleScope){
if (guild){ if (guild){
const member = await guild.members.fetch(user.id) const member = await this.#client.fetchGuildMember(guild,user.id)
if (member){ if (member){
const memberRoles = member.roles.cache.map((role) => role.id) 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) 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<ODPermission> {
//check for channel role permissions //check for channel role permissions
if (allowChannelRoleScope){ if (allowChannelRoleScope){
const member = await guild.members.fetch(user.id) const member = await this.#client.fetchGuildMember(guild,user.id)
if (member){ if (member){
const memberRoles = member.roles.cache.map((role) => role.id) 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) 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)
+9 -1
View File
@@ -357,13 +357,21 @@ export class ODOptionSuffixManager extends ODManager<ODOptionSuffix> {
const suffix = this.getAll().find((suffix) => suffix.option.id.value == option.id.value) const suffix = this.getAll().find((suffix) => suffix.option.id.value == option.id.value)
if (!suffix) return null if (!suffix) return null
try{ 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) return await suffix.getSuffix(member)
}catch(err){ }catch(err){
process.emit("uncaughtException",err) process.emit("uncaughtException",err)
return null return null
} }
} }
async #getMember(guild:discord.Guild,user:discord.User){
try{
return await guild.members.fetch(user.id)
}catch{
return null
}
}
} }
/**## ODOptionSuffix `class` /**## ODOptionSuffix `class`