dev - eliminate roundtrip for referenced messages

This commit is contained in:
slatinsky 2024-08-05 02:41:41 +02:00
parent 40d6e87dc8
commit d36bb53df7
5 changed files with 58 additions and 47 deletions

View file

@ -173,4 +173,53 @@ def enrich_messages(list_of_messages: list, guild_id: str) -> list:
if message["type"] == "ThreadCreated":
message["thread"] = get_channel_info(message["reference"]["channelId"], guild_id)
return list_of_messages
return list_of_messages
def message_ids_to_messages(guild_id, message_ids: list):
"""
Convert message ids to messages.
"""
collection_messages = Database.get_guild_collection(guild_id, "messages")
denylisted_user_ids = Database.get_denylisted_user_ids()
if len(message_ids) == 0:
return []
messages = collection_messages.find(
{
"_id": {
"$in": message_ids
},
"author._id": {
"$nin": denylisted_user_ids
}
}
)
list_of_messages = list(messages)
return list_of_messages
def enrich_messages_with_referenced(list_of_messages: list, guild_id: str):
ref_messageids = []
for message in list_of_messages:
if "reference" in message:
ref_messageids.append(message["reference"]["messageId"])
print("ref_messageids", ref_messageids)
ref_messages = message_ids_to_messages(guild_id, ref_messageids)
all_messages = ref_messages + list_of_messages
# enriching messages is a heavy operation - run it only one for initial list + referenced messages - then sort them later
enriched_all_messages = enrich_messages(all_messages, guild_id)
enriched_all_messages_lookup = {str(message["_id"]): message for message in enriched_all_messages}
list_of_messages_enriched = [enriched_all_messages_lookup.get(str(message["_id"]), None) for message in list_of_messages]
for message in list_of_messages_enriched:
if "reference" in message:
message["reference"]["message"] = enriched_all_messages_lookup.get(message["reference"]["messageId"], None)
return list_of_messages_enriched

View file

@ -1,6 +1,6 @@
from fastapi import APIRouter
from pydantic import BaseModel
from ..common.enrich_messages import enrich_messages
from ..common.enrich_messages import enrich_messages_with_referenced
from ..common.Database import Database
@ -38,7 +38,7 @@ async def get_multiple_message_content(message_req_obj: MessageRequest):
}
)
list_of_messages = list(messages)
list_of_messages = enrich_messages(list_of_messages, guild_id)
return list_of_messages
list_of_messages_enriched = enrich_messages_with_referenced(list_of_messages, guild_id)
return list_of_messages_enriched

View file

@ -5,7 +5,7 @@ import pymongo
import re
from dateutil.relativedelta import relativedelta
from ..common.enrich_messages import enrich_messages
from ..common.enrich_messages import enrich_messages_with_referenced
from ..common.helpers import pad_id, print_json
from ..common.Database import Database
@ -315,28 +315,7 @@ def extend_users(user_ids: list, usernames: list, guild_id: str):
user_ids = list(set(user_ids)) # remove duplicates
return user_ids
def message_ids_to_messages(guild_id, message_ids: list):
"""
Convert message ids to messages.
"""
collection_messages = Database.get_guild_collection(guild_id, "messages")
denylisted_user_ids = Database.get_denylisted_user_ids()
if len(message_ids) == 0:
return []
messages = collection_messages.find(
{
"_id": {
"$in": message_ids
},
"author._id": {
"$nin": denylisted_user_ids
}
}
)
list_of_messages = list(messages)
return list_of_messages
def simplify_mongo_query(query: dict | list):
@ -650,25 +629,7 @@ async def search_messages(guild_id: str, prompt: str = None, only_ids: bool = Tr
return ids
else:
list_of_messages = list(cursor)
message_ids = []
for message in list_of_messages:
if "reference" in message:
message_ids.append(message["reference"]["messageId"])
ref_messages = message_ids_to_messages(guild_id, message_ids)
all_messages = ref_messages + list_of_messages
# enriching messages is a heavy operation - run it only one for initial list + referenced messages - then sort them later
enriched_all_messages = enrich_messages(all_messages, guild_id)
enriched_all_messages_lookup = {str(message["_id"]): message for message in enriched_all_messages}
list_of_messages_enriched = [enriched_all_messages_lookup.get(str(message["_id"]), None) for message in list_of_messages]
for message in list_of_messages_enriched:
if "reference" in message:
message["reference"]["message"] = enriched_all_messages_lookup.get(message["reference"]["messageId"], None)
list_of_messages_enriched = enrich_messages_with_referenced(list_of_messages, guild_id)
return list_of_messages_enriched

View file

@ -22,7 +22,7 @@
let referencedMessage
if (message.reference) {
referencedMessage = await getMessageContent(message.reference.messageId, selectedGuildId);
referencedMessage = message.reference.message
}
else {
referencedMessage = null;

View file

@ -130,11 +130,12 @@ export interface Message {
emotes: Reaction[] | null; // emotes in the message
mentions: Mention[] | null;
attachments: Asset[] | null;
embeds: NewType[] | null;
embeds: Embed[] | null;
reference: {
messageId: string;
channelId: string;
guildId: string;
message: Message | null;
} | null;
guildId: string;
channelId: string;