《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的是一个跨平台 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}的天气是..."
—END—
开源协议:MIT
开源地址:https://github.com/nonebot/nonebot2
开发教程:https://nb2.baka.icu/docs/tutorial/create-project
留言与评论(共有 0 条评论) “” |