NoneBot读取猫猫词库方法

NoneBot读取猫猫词库方法

十一月 01, 2022

#话不多说,直接上代码# ##读取文件的方法## 为了保证Bot的可移植性,将词库文件存在机器人插件目录中,同时使用此函数读取根目录路径,与之相对路径合并,生成绝对路径,保证文件的可读性。

1
2
3
4
5
6
7
8
9
10
11
12
13
14


def getRootPath():
# 获取文件目录
curPath = os.path.abspath(os.path.dirname(__file__))
# 获取项目根路径,内容为当前项目的名字
rootPath = curPath[:curPath.find('love2') + len('love2')]
return rootPath
FilePath_1=str(getRootPath())

print(FilePath_1)
def FilePath(FilePath_2):#拼接捏
FilePath_2=FilePath_1+FilePath_2
return FilePath_2

##将文件生成字典## 主要分为三个步骤: 1.读取文件生成列表 2.读取每个列表利用分割符将每个列表再分成两个列表 3.遍历列表,将每两个列表生成一个字典

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20


i = 0
FG_2 = []
Fi_1 = open(FilePath(r'\introduce\cat.ini'))
#第一步
Fi_2 = Fi_1.readlines()
#第二步
for i in range(len(Fi_2)):
FG_1 = Fi_2[i].split("=")
FG_2.append(FG_1[0])
FG_2.append(FG_1[1])
i = i + 1
#第三步
zd_1 = {}
i = 0
while i<=175:
i = i + 2
zd_1[FG_2[i]]=FG_2[i+1]

##无限响应器-处理所有的消息## 读取词库最大的问题在于,如何将每个消息文本都拿去和字典尝试。 经过尝试我找到了如此办法。

  • 将on_message的消息反应设置为空,并降低事件响应器优先级。
  • (降低优先级是为了防止将其他正常的事件响应器盖过) 为什么使用字典: 因为字典读取失败会返回 None,是不会发出任何消息的。 一旦Key找到了对应的键,消息就会返回出来。 基于此机制,代码获得实现, 原理并不复杂,但很好的避免了大量的使用代码设置回复语的代码厄余问题。 上代码:(这里的异常处理是多余的,,小声bb)
1
2
3
4
5
6
7
8
9

dialogue_1 = on_message(priority=100)#这里优先级的大小是数值越大便越小
@dialogue_1.handle() #出错
async def handle_func(bot: Bot,event:GroupMessageEvent):
jsq = zd_1.get(str(event.get_message()))
try:
await dialogue_1.send(jsq)
except:
print("不行喵")