diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/common/HighlightManager.ts | 22 | ||||
| -rw-r--r-- | src/listeners/message/highlight.ts | 2 | 
2 files changed, 21 insertions, 3 deletions
| diff --git a/src/lib/common/HighlightManager.ts b/src/lib/common/HighlightManager.ts index 6194255..83506bc 100644 --- a/src/lib/common/HighlightManager.ts +++ b/src/lib/common/HighlightManager.ts @@ -24,7 +24,15 @@ export class HighlightManager {  	 */  	public readonly userBlocks = new Collection<  		/* guild */ Snowflake, -		Collection</* word */ Snowflake, /* users */ Set<Snowflake>> +		Collection</* user */ Snowflake, /* users */ Set<Snowflake>> +	>(); + +	/** +	 * Channels that users have blocked +	 */ +	public readonly channelBlocks = new Collection< +		/* guild */ Snowflake, +		Collection</* user */ Snowflake, /* channels */ Set<Snowflake>>  	>();  	/** @@ -66,7 +74,17 @@ export class HighlightManager {  		for (const [word, users] of guildCache.entries()) {  			if (this.isMatch(message.content, word)) {  				for (const user of users) { -					if (!ret.has(user)) ret.set(user, word); +					if (!ret.has(user)) { +						if (!message.channel.permissionsFor(user)?.has('ViewChannel')) continue; + +						const blockedUsers = this.userBlocks.get(message.guildId)?.get(user) ?? new Set(); +						if (blockedUsers.has(message.author.id)) continue; + +						const blockedChannels = this.channelBlocks.get(message.guildId)?.get(user) ?? new Set(); +						if (blockedChannels.has(message.channel.id)) continue; + +						ret.set(user, word); +					}  				}  			}  		} diff --git a/src/listeners/message/highlight.ts b/src/listeners/message/highlight.ts index d3d7bfb..c751ad5 100644 --- a/src/listeners/message/highlight.ts +++ b/src/listeners/message/highlight.ts @@ -11,7 +11,7 @@ export default class HighlightListener extends BushListener {  	public override async exec(...[message]: BushClientEvents['messageCreate']) {  		if (!message.inGuild()) return; -		if (message.author.bot) return; +		if (message.author.bot || message.system) return;  		if (!(await message.guild.hasFeature('highlight'))) return; // allows highlighting to be disabled on a guild-by-guild basis  		const res = client.highlightManager.checkMessage(message); | 
