反思 说实话,这段代码并不完美,got装饰器有专门的获取消息的方法,而我仍然在使用获取事件消息的方式。
而这种实现方法最明显的缺陷就是无法在群聊以外的环境中使用。
阅读了其他人的代码后,我深感自己的代码水平还是太低。尽管投机取巧的实现了一些功能,但很明显的存在诸多的缺陷。
我将在接下来的时间内多多参考佬们的代码,也更多的去理解Python。汲取前人的智慧,追寻前辈的脚步,而不是一直通过自己的方法闭门造车。
统计一下存在缺陷的功能:
教学系统:大量的使用json文件,占用的资源太多
持续性会话系统:发送了空消息,影响PC用户的使用
比赛系统:代码不完美
抽图系统:代码重复性高,宛若屎山
帮助系统:同上
总结:菜!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 import osimport randomfrom pathlib import Pathfrom nonebot import on_commandfrom nonebot.adapters.onebot.v11 import MessageSegment, Eventfrom nonebot.matcher import Matcherfrom nonebot.adapters import Messagefrom nonebot.params import CommandArgMatchMap = on_command('比赛抽图模式启动' , priority=50 ) @MatchMap.handle() async def handle_first_receive (matcher: Matcher, args: Message = CommandArg( ) ): plain_text = args.extract_plain_text() if plain_text: matcher.set_arg("Map" , args) MapList = os.listdir(os.getcwd() + "/love/data/images/match/" ) @MatchMap.got("Map" , prompt=f"当前地图池为{str (MapList).replace('.png' , '' )} \nBan图指【BanXXX】\nBan图结束请发送【开始抽图】" )async def handle_func (event: Event ): try : MapName = str (event.get_message()).replace('Ban' , '' ) if MapName != '开始抽图' : MapList.remove(MapName + '.png' ) await MatchMap.reject("Ban图成功,地图池中还有:" + str (MapList).replace('.png' , '' )) else : await MatchMap.send("Ban图结束,最终地图池中还有:" + str (MapList).replace('.png' , '' ) + "这些地图" ) except : await MatchMap.reject("请检查指令是否正确~" ) @MatchMap.got("Number" , prompt=f"请发送需要抽取地图的数量,如果抽1张图请发送 1 。" ) async def handle_func (event: Event ): Number = eval (str (event.get_message())) output_list = [] while len (output_list) < Number: MapN = random.choice(MapList) if MapN not in output_list: message = MapN path = Path(os.getcwd() + f"/love/data/images/match/{MapN} " ).parent / f"{MapN} " image = MessageSegment.image(path) output_list.append(MapN) await MatchMap.send("呐呐~你抽到的地图为:" + message.replace('.png' , '' ) + image) await MatchMap.finish("抽图结束,祝您比赛愉快" )