You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
2.1 KiB
62 lines
2.1 KiB
import asyncio
|
|
import pickle
|
|
import traceback
|
|
from datetime import datetime
|
|
|
|
import aiofiles
|
|
import discord
|
|
|
|
from services.environment_service import EnvService
|
|
|
|
|
|
class Pickler:
|
|
def __init__(
|
|
self,
|
|
full_conversation_history,
|
|
conversation_threads,
|
|
conversation_thread_owners,
|
|
):
|
|
self.full_conversation_history = full_conversation_history
|
|
self.conversation_threads = conversation_threads
|
|
self.conversation_thread_owners = conversation_thread_owners
|
|
|
|
# This function will be called by the bot to process the message queue
|
|
@staticmethod
|
|
async def process_pickle_queue(pickle_queue, PROCESS_WAIT_TIME, EMPTY_WAIT_TIME):
|
|
while True:
|
|
try:
|
|
# If the queue is empty, sleep for a short time before checking again
|
|
if pickle_queue.empty():
|
|
await asyncio.sleep(EMPTY_WAIT_TIME)
|
|
continue
|
|
|
|
# Get the next object to pickle from the queue
|
|
to_pickle = await pickle_queue.get()
|
|
|
|
# Pickle all the objects inside to_pickle using aiofiles
|
|
async with aiofiles.open(
|
|
EnvService.save_path()
|
|
/ "pickles"
|
|
/ "full_conversation_history.pickle",
|
|
"wb",
|
|
) as f:
|
|
await f.write(pickle.dumps(to_pickle.full_conversation_history))
|
|
|
|
async with aiofiles.open(
|
|
EnvService.save_path() / "pickles" / "conversation_threads.pickle",
|
|
"wb",
|
|
) as f:
|
|
await f.write(pickle.dumps(to_pickle.conversation_threads))
|
|
|
|
async with aiofiles.open(
|
|
EnvService.save_path()
|
|
/ "pickles"
|
|
/ "conversation_thread_owners.pickle",
|
|
"wb",
|
|
) as f:
|
|
await f.write(pickle.dumps(to_pickle.conversation_thread_owners))
|
|
|
|
await asyncio.sleep(PROCESS_WAIT_TIME)
|
|
except Exception:
|
|
traceback.print_exc()
|