feat(bots/discord): blacklist and whitelist for filters

This commit is contained in:
PalmDevs
2024-07-28 20:10:47 +07:00
parent e748a4da92
commit cdb6001955
8 changed files with 58 additions and 43 deletions

View File

@@ -113,24 +113,18 @@ export const getResponseFromText = async (
return responseConfig
}
export const shouldScanMessage = (
export const messageMatchesFilter = (
message: Message,
filter: NonNullable<Config['messageScan']>['filter'],
): message is Message<true> => {
if (message.author.bot) return false
if (!message.guild) return false
) => {
if (!filter) return true
const filters = [
filter.users?.includes(message.author.id),
message.member?.roles.cache.some(x => filter.roles?.includes(x.id)),
filter.channels?.includes(message.channel.id),
]
const memberRoles = new Set(message.member?.roles.cache.keys())
const blFilter = filter.blacklist
if (filter.whitelist && filters.every(x => !x)) return false
if (!filter.whitelist && filters.some(x => x)) return false
return true
// If matches blacklist, will return false
// Any other case, will return true
return !(blFilter && (blFilter.channels?.includes(message.channelId) || blFilter.roles?.some(role => memberRoles.has(role)) || blFilter.users?.includes(message.author.id)))
}
export const handleUserResponseCorrection = async (

View File

@@ -1,11 +1,11 @@
import { GuildMember, type User } from 'discord.js'
import type { Config } from 'config.schema'
import config from '../../../config'
export const isAdmin = (userOrMember: User | GuildMember, adminConfig: Config['admin']) => {
return adminConfig?.users?.includes(userOrMember.id) || (userOrMember instanceof GuildMember && isMemberAdmin(userOrMember, adminConfig))
export const isAdmin = (userOrMember: User | GuildMember) => {
return config.admin?.users?.includes(userOrMember.id) || (userOrMember instanceof GuildMember && isMemberAdmin(userOrMember))
}
export const isMemberAdmin = (member: GuildMember, adminConfig: Config['admin']) => {
export const isMemberAdmin = (member: GuildMember) => {
const roles = new Set(member.roles.cache.keys())
return Boolean(adminConfig?.roles?.[member.guild.id]?.some(role => roles.has(role)))
return Boolean(config?.admin?.roles?.[member.guild.id]?.some(role => roles.has(role)))
}