diff options
Diffstat (limited to 'streaming')
-rw-r--r-- | streaming/index.js | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/streaming/index.js b/streaming/index.js index 0fd545a41..7f30b4e88 100644 --- a/streaming/index.js +++ b/streaming/index.js @@ -229,20 +229,26 @@ if (cluster.isMaster) { const unpackedPayload = JSON.parse(payload) const targetAccountIds = [unpackedPayload.account.id].concat(unpackedPayload.mentions.map(item => item.id)).concat(unpackedPayload.reblog ? [unpackedPayload.reblog.account.id] : []) + const accountDomain = unpackedPayload.account.acct.split('@')[1] - client.query(`SELECT target_account_id FROM blocks WHERE account_id = $1 AND target_account_id IN (${placeholders(targetAccountIds, 1)}) UNION SELECT target_account_id FROM mutes WHERE account_id = $1 AND target_account_id IN (${placeholders(targetAccountIds, 1)})`, [req.accountId].concat(targetAccountIds), (err, result) => { - done() + const queries = [ + client.query(`SELECT 1 FROM blocks WHERE account_id = $1 AND target_account_id IN (${placeholders(targetAccountIds, 1)}) UNION SELECT 1 FROM mutes WHERE account_id = $1 AND target_account_id IN (${placeholders(targetAccountIds, 1)})`, [req.accountId].concat(targetAccountIds)), + ] - if (err) { - log.error(err) - return - } + if (accountDomain) { + queries.push(client.query('SELECT 1 FROM account_domain_blocks WHERE account_id = $1 AND domain = $2', [req.accountId, accountDomain])) + } - if (result.rows.length > 0) { + Promise.all(queries).then(values => { + done() + + if (values[0].rows.length > 0 || (values.length > 1 && values[1].rows.length > 0)) { return } transmit() + }).catch(err => { + log.error(err) }) }) } else { |