fix main notification query

This commit is contained in:
Infinidoge 2025-02-21 16:10:17 -05:00
parent 69ce9f23b7
commit b7456dd759
Signed by: Infinidoge
SSH key fingerprint: SHA256:oAMyvotlNFraMmZmr+p6AxnNfW/GioTs1pOn3V4tQ7A

View file

@ -132,6 +132,13 @@ async def handle_triggers(ctx, message):
db_updates = []
search_query = """
WITH
pauses AS (SELECT user_id FROM user_pauses WHERE guild_id=:guild),
ignores AS (
SELECT target, user_id FROM user_ignores WHERE guild_id=:guild
UNION
SELECT target, user_id FROM user_blocks
)
SELECT keyword, user_id, use_embed
FROM ( -- Deduplicate notification recipients by user_id
SELECT keyword, user_id, use_embed, row_number() over (partition by user_id) n
@ -140,14 +147,11 @@ async def handle_triggers(ctx, message):
WHERE likely(disabled IS NOT 1) -- Don't notify users who opted out
AND (unlikely(notify_self IS 1) OR user_id IS NOT :author) -- Don't notify author unless wanted
AND (unlikely(bots_notify IS 1) OR :is_bot IS NOT 1) -- Don't notify from bots unless wanted
AND likely(NOT EXISTS(SELECT * FROM ( -- Don't notify if...
SELECT target FROM user_ignores -- Author or channel is ignored in this guild
WHERE user_id=user_id AND guild_id=:guild
UNION
SELECT target FROM user_blocks -- Author is blocked
WHERE user_id=user_id
) WHERE target IN (:author, :channel, :category, :parent)))
AND likely(NOT EXISTS(SELECT * FROM user_pauses WHERE user_id=user_id AND guild_id=:guild))
AND likely(:author NOT IN (SELECT target FROM ignores WHERE user_id=user_id))
AND likely(:channel NOT IN (SELECT target FROM ignores WHERE user_id=user_id))
AND likely(:category NOT IN (SELECT target FROM ignores WHERE user_id=user_id))
AND likely(:parent NOT IN (SELECT target FROM ignores WHERE user_id=user_id))
AND likely(user_id NOT IN pauses)
AND guild_id=:guild AND unlikely(contains(:content, keyword, regex))
)
WHERE n=1