基于Nonebot架構的QQ機器人詞庫生成器
廢話不說直接上代碼~~
ck_list = []
successful_num = 0
# 導入詞庫
raw_file = str(input("請輸入詞庫檔案路徑:"))
with open(raw_file, 'r', encoding='utf-8') as fp:
raw_ck_list = fp.readlines() # 擷取檔案内容
for line in raw_ck_list:
ck_list.append(line.strip()) # 去掉首尾空格
moudle = str(input("請輸入寫入模式(a追加 w覆寫):"))
# 建立ciku.py檔案并寫入代碼
with open("ciku.py", moudle, encoding='utf-8') as fp:
# 判斷模式
if moudle == 'w':
content = 'from nonebot import on_keyword\n' \
'from nonebot.typing import T_State\n' \
'from nonebot.adapters.cqhttp import Message, Bot, Event, MessageSegment\n' \
'import random\n'
fp.write(content)
for index, raw_ck in enumerate(ck_list):
try:
kw = '{'
rp = ''
fc = ''
ls = raw_ck.split("-") # 将未處理的詞庫通過-分割成一個len為3的清單
name = str(ls[0])
kw_ls = ls[1].split("^") # 将item通過^分割為清單
rp_ls = ls[2].split("^")
if ls[3]: # 判斷是否輸入CQ碼
fc_ls = ls[3].split("^")
else:
fc_ls = [] # false
for item in kw_ls:
if item != kw_ls[-1]:
kw = kw + '"' + item + '", '
else:
kw = kw + '"' + item + '"}'
# print(kw)
if fc_ls: # 含有cq碼
content = '\n\n########################################################################\n' \
+ name + '= on_keyword(' + kw + ')\n' \
'@' + name + '.handle()\n' \
'async def ' + name + '_handle(bot: Bot, event: Event, state: T_State):\n\t' \
'id = str(event.get_user_id())\n\t' \
'fc_ls = ' + str(fc_ls) + '\n\t' \
'rp_ls = ' + str(rp_ls) + '\n\t' \
'face = [{"type": "face","data": {"id": random.choice(fc_ls)}}]\n\t' \
'rp = random.choice(rp_ls)\n\t' \
'await ' + name + '.send(MessageSegment.at(id) + face + rp)\n'
else:
content = '\n\n########################################################################\n' \
+ name + '= on_keyword(' + kw + ')\n' \
'@' + name + '.handle()\n' \
'async def ' + name + '_handle(bot: Bot, event: Event, state: T_State):\n\t' \
'id = str(event.get_user_id())\n\t' \
'rp_ls = ' + str(rp_ls) + '\n\t' \
'rp = random.choice(rp_ls)\n\t' \
'await ' + name + '.send(MessageSegment.at(id) + rp)\n'
# 寫入代碼
fp.write(content)
print(f"\033[0;32;40m {index+1}.{name}詞庫寫入成功!\033[0m")
successful_num += 1
except:
print(f"\033[1;31;40m Failed:{index + 1}.{name}詞庫寫入失敗...www\033[0m")
print(f"\033[0;36;40m 詞庫寫入完成!共{len(ck_list)}條!成功寫入{successful_num}條! \033[0m")
食用方法:
2021-8-26