No pude encontrar nada, así que escribí un Python script que comprueba los nuevos mensajes, y me envía notificaciones a través de pushover. Lo convertí en una aplicación y lo añadí a los elementos de inicio de sesión, así que sólo recibo las notificaciones de esta manera cuando la tapa del macbook está abierta. No es limpio, pero funciona.
import sqlite3
import pathlib
import time
import logging
import sys
import requests
logger = logging.getLogger('message-notifier')
def dict_factory(cursor, row):
d = {}
for idx, col in enumerate(cursor.description):
d[col[0]] = row[idx]
return d
conn = sqlite3.connect(str(pathlib.Path.home() / 'Library' / 'Messages' / 'chat.db'))
conn.row_factory = dict_factory
notified = set()
try:
while True:
logger.info('running')
x = conn.execute("select is_read, ROWID from message "
"WHERE is_from_me = 0 "
"order by date desc limit 10;")
for msg in x.fetchall():
if not msg['is_read'] and msg['ROWID'] not in notified:
logger.info(f'pushing notification for {msg["ROWID"]}')
notified.add(msg['ROWID'])
try:
requests.post('https://api.pushover.net/1/messages.json',
data={
"token": "token",
"user": "user",
"message": "msg",
"title": "tit"
})
except:
logger.exception('encountered:')
continue
if msg['is_read'] and msg['ROWID'] in notified:
logger.info(f"removing {msg['ROWID']} from notified msgs")
notified.remove(msg['ROWID'])
continue
time.sleep(5)
finally:
conn.close()