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