guilds: add message contexts

- guilds: fix fetch_readable_channels()
This commit is contained in:
Luna 2019-06-18 16:42:08 -03:00
parent 9514551405
commit 2322c2603c
1 changed files with 25 additions and 16 deletions

View File

@ -391,7 +391,7 @@ async def fetch_readable_channels(guild_id: int, user_id: int) -> List[int]:
for channel_id in channel_ids:
perms = await get_permissions(user_id, channel_id)
if perms.read_messages:
if perms.bits.read_messages:
res.append(channel_id)
return res
@ -416,30 +416,39 @@ async def search_messages(guild_id):
can_read = await fetch_readable_channels(guild_id, user_id)
rows = await app.db.fetch(f"""
SELECT messages.id,
COUNT(*) OVER() as total_results
FROM messages
SELECT orig.id AS current_id,
COUNT(*) OVER() as total_results,
array((SELECT messages.id AS before_id
FROM messages WHERE messages.id < orig.id
ORDER BY messages.id DESC LIMIT 2)) AS before,
array((SELECT messages.id AS after_id
FROM messages WHERE messages.id > orig.id
ORDER BY messages.id ASC LIMIT 2)) AS after
FROM messages AS orig
WHERE guild_id = $1
AND messages.content LIKE '%'||$2||'%'
AND ARRAY[messages.channel_id] <@ $4::bigint[]
ORDER BY messages.id DESC
AND orig.content LIKE '%'||$2||'%'
AND ARRAY[orig.channel_id] <@ $4::bigint[]
ORDER BY orig.id DESC
LIMIT 50
OFFSET $3
""", guild_id, j['content'], j['offset'], can_read)
results = 0 if not rows else rows[0]['total_results']
main_messages = [r['id'] for r in rows]
# fetch contexts for each message
# (2 messages before, 2 messages after).
# TODO: actual contexts
res = []
for message_id in main_messages:
msg = await app.storage.get_message(message_id)
for row in rows:
before, after = [], []
for before_id in reversed(row['before']):
before.append(await app.storage.get_message(before_id))
for after_id in row['after']:
after.append(await app.storage.get_message(after_id))
msg = await app.storage.get_message(row['current_id'])
msg['hit'] = True
res.append([msg])
res.append(before + [msg] + after)
return jsonify({
'total_results': results,