Fixed fetch() errors of unknown guild members
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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`
|
||||
|
||||
Reference in New Issue
Block a user