123 lines
3.7 KiB
Python
123 lines
3.7 KiB
Python
import markdown
|
|
import re
|
|
from bs4 import BeautifulSoup, Tag
|
|
|
|
"""/**
|
|
* @description 发送私聊消息
|
|
* @param user_id 对方 QQ 号
|
|
* @param message 要发送的内容
|
|
* @param auto_escape 消息内容是否作为纯文本发送(即不解析 CQ 码),只在 message 字段是字符串时有效
|
|
*/
|
|
function send_private_msg(user_id: number, message: Lagrange.Message, auto_escape: boolean = false) {
|
|
return {
|
|
action: 'send_private_msg',
|
|
params: { user_id, message, auto_escape }
|
|
};
|
|
}"""
|
|
|
|
template = """/**
|
|
* @description %s%s */
|
|
public %s(%s) {
|
|
return this.send({
|
|
action: '%s',
|
|
params: { %s }
|
|
});
|
|
}
|
|
|
|
"""
|
|
|
|
onebot_document = open('./scripts/onebot.md', 'r', encoding='utf-8').read()
|
|
html = markdown.markdown(onebot_document)
|
|
soup = BeautifulSoup(html, 'html.parser')
|
|
|
|
def snake_to_camel(s, capitalize_first_letter=False):
|
|
components = s.split('_')
|
|
camel = ''.join(x.capitalize() for x in components)
|
|
if not capitalize_first_letter:
|
|
camel = camel[0].lower() + camel[1:]
|
|
|
|
return camel
|
|
|
|
def next_node(el: Tag):
|
|
p = el.next_sibling
|
|
while len(p.text.strip()) == 0:
|
|
p = p.next_sibling
|
|
return p
|
|
|
|
tss = """/**
|
|
* @author 锦恢
|
|
* @email 1193466151@qq.com
|
|
* @description Lagrange.Core 前端接口
|
|
* @comment 接口调用详细参考文档
|
|
* - https://github.com/botuniverse/onebot-11/blob/master/communication/ws.md
|
|
*/
|
|
|
|
import * as Lagrange from '../type';
|
|
|
|
"""
|
|
|
|
for el in soup.find_all('h2'):
|
|
el: Tag
|
|
|
|
function_name = None
|
|
function_desc = None
|
|
for child in el.children:
|
|
if child.name == 'code':
|
|
function_name = child.text
|
|
elif child.name is None:
|
|
function_desc = child.text
|
|
|
|
if function_name and function_desc:
|
|
ts_func_name = snake_to_camel(function_name)
|
|
|
|
title2 = next_node(el)
|
|
table = next_node(title2)
|
|
|
|
count = 0
|
|
params = []
|
|
for line in table.text.strip().split('\n'):
|
|
count += 1
|
|
if count >= 3:
|
|
splits = [l for l in line.split('|') if len(l.strip()) > 0]
|
|
print(splits)
|
|
if len(splits) == 4:
|
|
param = {
|
|
'name': splits[0].strip(),
|
|
'type': splits[1].strip().split()[0],
|
|
'default': splits[2].strip(),
|
|
'desc': splits[3].strip()
|
|
}
|
|
elif len(splits) == 3:
|
|
param = {
|
|
'name': splits[0].strip(),
|
|
'type': splits[1].strip().split()[0],
|
|
'default': '-',
|
|
'desc': splits[2].strip()
|
|
}
|
|
|
|
if param['type'] == 'message':
|
|
param['type'] = 'string | Lagrange.Send.Default[]'
|
|
|
|
params.append(param)
|
|
|
|
t1 = function_desc.strip()
|
|
t2 = '\n'
|
|
for param in params:
|
|
t2 += ' * @param {} {}\n'.format(param['name'], param['desc'])
|
|
t3 = ts_func_name
|
|
t4 = []
|
|
for param in params:
|
|
if param['default'] == '-':
|
|
t4.append('{}: {}'.format(param['name'], param['type']))
|
|
for param in params:
|
|
if param['default'] != '-':
|
|
t4.append('{}: {} = {}'.format(param['name'], param['type'], param['default']))
|
|
t4 = ', '.join(t4)
|
|
t5 = function_name
|
|
t6 = [param['name'] for param in params]
|
|
t6 = ', '.join(t6)
|
|
ts_code = template % (t1, t2, t3, t4, t5, t6)
|
|
|
|
tss += ts_code
|
|
|
|
open('./scripts/onebot.ts', 'w', encoding='utf-8').write(tss) |