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 { 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)
}
}
+7 -3
View File
@@ -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<ODPermission> {
/**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<ODPermission> {
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<ODPermission> {
//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<ODPermission> {
//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)
+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)
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`