概述
nonebot-adapter-mirai2
是一个用于为 nonebot2
提供 mirai-api-http
协议兼容功能的协议适配器。
而 mirai-api-http
是无头 Bot
客户端 mirai
的一个基于 http
的 api
协议。在你使用这一协议之前>你可能需要对 http
协议有一定的了解。
相关链接
说明
该项目依赖 nonebot2
而存在, 因此使用之前必须先安装 nonebot2
安装
我们推荐您在虚拟环境中使用, 这样可以防止干扰您的其他 python 项目的正常运行
python -m venv venv # 创建一个虚拟环境
source venv/bin/activate # win 请在 PowerShell 或 cmd 使用 venv/bin/activate.ps1 或 venv/bin/activate.bat # 进入虚拟环境
pip install nb-cli # 安装 nonebot2 脚手架(推荐)
# 当然你也可以不使用脚手架 → pip install nonebot2
nb create # 使用 nb-cli 创建一个最原始的 bot
nb adapter install mirai2 # 仅在上一条指令创建 bot 时没有选中 mirai2 的情况下才需要
# 退出虚拟环境请使用 deactivate
配置 .env
ENVIRONMENT=dev
VERIFY_KEY=QDTTEGYGfOGBVcX # MiraiApiHttp2 配置文件里的 token
driver=~fastapi+~websockets # nonebot_adapter_mirai2 需要使用 websockets 驱动所以需要加该行
MIRAI_HOST=127.0.0.1 # MiraiApiHttp2 的 ip
MIRAI_PORT=5700 # MiraiApiHttp2 的端口
MIRAI_QQ=["1234567890"] # Mirai 上已经登录的 qq 号
SUPERUSER=[] # nonebot2 的超管(也可理解为bot的主人什么的)
使用
需先启动 mirai 并登录 bot 账号,因为使用的是正向 ws
bot.py
中的内容
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import nonebot
from nonebot.adapters.mirai2 import Adapter as MIRAI2Adapter # 引用 nonebot_adapter_mirai2
nonebot.init()
app = nonebot.get_asgi()
driver = nonebot.get_driver()
driver.register_adapter(MIRAI2Adapter) # 将其塞入 nonebot2 中
nonebot.load_from_toml("pyproject.toml")
if __name__ == "__main__":
nonebot.logger.warning("Always use `nb run` to start the bot instead of manually running!")
nonebot.run(app="__mp_main__:app")
注意
- 因
nonebot2.0.0b1
的adapter
相关api
存在变化,因此该adapter
很可能不兼容早于nonebot2.0.0b1
的版本号。 nonebot_adapter_mirai2
使用的是正向 ws, 因此需要用户首先启动mirai
并已登录bot
账号, 然后再启动nonebot2
- 如果想
Pull requests
请往dev
分支中提交pr
,我将在后续更新时合并到main
中
mirai
侧 ws
配置范例
adapters:
- ws
debug: false
enableVerify: true
verifyKey: INITKEYGfCYBVcX
singleMode: false
cacheSize: 2048
adapterSettings:
ws:
host: localhost
port: 5700 # 该端口务必不要和 nonebot2 相冲突, 因为 nonebot2 会默认监听 8080 端口。
# 如果 mirai 侧也监听 8080 端口则会导致其中一方的 web 服务启动失败
群消息
from nonebot import on_message
from nonebot.adapters.mirai2 import Bot, GroupMessage, MessageSegment
msging = on_message()
@msging.handle()
async def _(bot: Bot, event: GroupMessage):
...
await msging.send(MessageSegment.plan("xxx"))
好友消息
from nonebot.adapters.mirai2 import FriendMessage, MessageSegment
msg = on_message()
@msg.handle()
async def _(bot: Bot, event: FriendMessage):
...
几乎所有类型的事件处理器都可以在 `nonebot.adapters.mirai2.event.* 中导入。
范例
from nonebot import on_notice
from nonebot.adapters.mirai2.event import BotUnmuteEvent
notice = on_notice()
async def _(bot: Bot, event: BotUnmuteEvent)
...