#话不多说,直接上代码#
##读取文件的方法##
为了保证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 ("不行喵" )