mirror of
https://github.com/slatinsky/DiscordChatExporter-frontend.git
synced 2025-05-11 18:36:49 +02:00
dev - eliminate roundtrip for referenced messages
This commit is contained in:
parent
40d6e87dc8
commit
d36bb53df7
5 changed files with 58 additions and 47 deletions
|
@ -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
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
let referencedMessage
|
||||
|
||||
if (message.reference) {
|
||||
referencedMessage = await getMessageContent(message.reference.messageId, selectedGuildId);
|
||||
referencedMessage = message.reference.message
|
||||
}
|
||||
else {
|
||||
referencedMessage = null;
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue