You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123 lines
3.2 KiB
Python

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()