天天看點

基于Nonebot架構的QQ機器人詞庫生成器

基于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")


           

食用方法:

基于Nonebot架構的QQ機器人詞庫生成器

2021-8-26