《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的是一个跨平台 Python/ target=_blank class=infotextkey>Python 异步聊天机器人框架——nonebot2。
NoneBot2 是一个现代、跨平台、可扩展的 Python 聊天机器人框架,它基于 Python 的类型注解和异步特性,能够为你的需求实现提供便捷灵活的支持。
特性
应用案例
https://github.com/milkice233/efb-qq-slave
https://projectriri.github.io/bot-gateway/
https://github.com/jqqqqqqqqqq/UnifiedMessageRelay
https://github.com/Mother-Ship/cabbageWeb
https://github.com/spacemeowx2/splatoon2-qqbot
https://github.com/mrthanlon/SICNUBOT
https://github.com/Bluefissure/OtterBot
https://github.com/duan602728596/qqtools
https://github.com/UltraSoundX/SDFMU-Library
https://github.com/Ninzore/Wecab
https://github.com/Kyomotoi/ATRI
https://github.com/KimigaiiWuyi/GenshinUID
插件示例
命令式问答示例:
from nonebot import on_command from nonebot.rule import to_me from nonebot.matcher import Matcher from nonebot.adapters import Message from nonebot.params import Arg, CommandArg, ArgPlainText weather = on_command("weather", rule=to_me(), aliases={"天气", "天气预报"}, priority=5) @weather.handle() async def handle_first_receive(matcher: Matcher, args: Message = CommandArg()): plain_text = args.extract_plain_text() # 首次发送命令时跟随的参数,例:/天气 上海,则args为上海 if plain_text: matcher.set_arg("city", args) # 如果用户发送了参数则直接赋值 @weather.got("city", prompt="你想查询哪个城市的天气呢?") async def handle_city(city: Message = Arg(), city_name: str = ArgPlainText("city")): if city_name not in ["北京", "上海"]: # 如果参数不符合要求,则提示用户重新输入 # 可以使用平台的 Message 类直接构造模板消息 await weather.reject(city.template("你想查询的城市 {city} 暂不支持,请重新输入!")) city_weather = await get_weather(city_name) await weather.finish(city_weather) # 在这里编写获取天气信息的函数 async def get_weather(city: str) -> str: return f"{city}的天气是..."
开源协议:MIT
开源地址:https://github.com/nonebot/nonebot2
开发教程:https://nb2.baka.icu/docs/tutorial/create-project