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