import os import sqlite3 import sys from multiprocessing import Queue from settings import sqlite_file from queue import Empty def resource_path(relative_path, base_dir='.'): # PyInstaller打包后会把文件放到临时文件夹 _MEIPASS try: base_path = sys._MEIPASS except AttributeError: base_path = os.path.abspath(base_dir) return os.path.join(base_path, relative_path) class LiveChatConfig: def __init__(self): self.conn = sqlite3.connect(resource_path(sqlite_file, '..')) self.conn.execute("PRAGMA journal_mode=WAL;") def _query_config(self, key): cursor = self.conn.cursor() cursor.execute('select value from config where key=?', (key,)) result = cursor.fetchone() result = result[0] if result is not None else None cursor.close() return result @property def enter_live_room_prob(self): result = self._query_config('reply_prob_enter_live_room') return int(result) if result is not None else None @property def follow_prob(self): result = self._query_config('reply_prob_follow') return int(result) if result is not None else None @property def like_prob(self): result = self._query_config('reply_prob_like') return int(result) if result is not None else None @property def gift_prob(self): result = self._query_config('reply_prob_gift') return int(result) if result is not None else None @property def chat_prob(self): result = self._query_config('reply_prob_chat') return int(result) if result is not None else None @property def enter_live_room_prompt(self): return self._query_config('enter_live_room_prompt') @property def follow_prompt(self): return self._query_config('follow_prompt') @property def like_prompt(self): return self._query_config('like_prompt') @property def gift_prompt(self): return self._query_config('gift_prompt') @property def chat_prompt(self): return self._query_config('chat_prompt') @property def product_related_prompt(self): return self._query_config('product_related_prompt') @property def backend_token(self): return self._query_config('backend_token') @property def system_messages(self) -> list: results = [] cursor = self.conn.cursor() cursor.execute('select message from system_message') rows = cursor.fetchall() for message in rows: results.append(message[0]) cursor.close() return results class PromptQueue: def __init__(self, maxsize=0): self.queue = Queue(maxsize) self.maxsize = maxsize def put(self, item): if self.queue.full(): try: self.queue.get_nowait() # 丢掉最旧的数据 except: pass self.queue.put(item) def get(self, block=True, timeout=None): try: return self.queue.get(block, timeout) except Empty: return None def qsize(self): return self.queue.qsize() def empty(self): return self.queue.empty() def full(self): return self.queue.full()