gsuid_core/gsuid_core/load_template.py
2024-04-24 11:54:18 +08:00

108 lines
3.4 KiB
Python

import re
import json
from typing import Dict, List, TypedDict
from gsuid_core.logger import logger
from gsuid_core.models import Message
from gsuid_core.data_store import get_res_path
from gsuid_core.message_models import Button, ButtonType
buttons_template_path = get_res_path(['template', 'buttons'])
markdown_template_path = get_res_path(['template', 'markdown'])
custom_buttons_template = get_res_path(['template', 'custom_buttons'])
class MarkdownTemplates(TypedDict):
template_id: str
para: List[str]
button_templates: Dict[str, ButtonType] = {}
markdown_templates: Dict[str, MarkdownTemplates] = {}
custom_buttons: Dict[str, Message] = {}
def template_button_to_buttons(button_data: Dict):
btl = []
for buttons in button_data['rows']:
btr = []
for button in buttons['buttons']:
bt = Button(
button["render_data"]["label"],
button['action']['data'],
button["render_data"]["visited_label"],
)
btr.append(bt)
btl.append(btr)
btr = []
return btl
def parse_button(buttons):
fake_buttons = []
for i in buttons:
if isinstance(i, Button):
fake_buttons.append(i)
elif isinstance(i, List):
fake_buttons.extend(i)
return fake_buttons
try:
for button_template in buttons_template_path.iterdir():
with open(button_template, 'r', encoding='UTF-8') as f:
button_data = json.load(f)
btl = template_button_to_buttons(button_data)
button_templates[button_template.stem] = btl
for markdown_template in markdown_template_path.iterdir():
with open(markdown_template, 'r') as file:
file_content = file.read()
para_list = re.findall(r'{{([^\n{}]+)}}', file_content)
new_text = re.sub(r'{{([^\n{}]+)}}', '$$', file_content.strip())
rep = (
r'('
+ (
new_text.replace('(', r'\(')
.replace(')', r'\)')
.replace(']', r'\]')
.replace('[', r'\[')
.replace('\n!', r')?\r?\!?(')
.replace('\n', r')?\r?(')
)
+ r')?'
)
for para in para_list:
rep = rep.replace(
'$$', rf'(?P<{para.replace(".", "")}>[\s\S]+)', 1
)
markdown_templates[rep] = {
'template_id': markdown_template.stem,
'para': [i[1:] for i in para_list],
}
markdown_templates = dict(
sorted(
markdown_templates.items(), key=lambda x: len(x[0]), reverse=True
)
)
for custom_button in custom_buttons_template.iterdir():
with open(custom_button, 'r', encoding='UTF-8') as f:
button_data = json.load(f)
if 'id' in button_data and button_data['id']:
custom_buttons[custom_button.stem] = Message(
type='template_buttons', data=button_data['id']
)
elif 'custom_button' in button_data and button_data['custom_button']:
custom_buttons[custom_button.stem] = Message(
type='buttons', data=button_data['custom_button']
)
except Exception as e:
logger.warning('[启动] [加载模板] 加载失败...检查模板文件..')
logger.error(e)