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.

46 lines
1.9 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()