📝NoneBot2 接入 QQ 频道的几种方式 #175
Replies: 3 comments 2 replies
-
使用 go-cqhttp + go-cqhttp 频道支持适配补丁对于拥有官方机器人的人来说,使用官方接口是一个好的选择,但是官方接口也有诸多限制,比如
如果不想被这些条条框框所限制,或者没有官方机器人,使用 go-cqhttp(下面简称 gocq)+ go-cqhttp 频道支持适配补丁(下面简称补丁)是一个好的选择,只需要你的机器人在频道内即可 gocq + 补丁基于 OneBot V11,这意味着你需要使用 OneBot V11 适配器而不是前文提到的 QQ 频道适配器 新建项目同样使用 配置 gocqgocq 的登录与配置与连接 NoneBot 这里不再赘述,详情请看 gocq 文档 和 OneBot 适配器文档 但是这里需要强调一点:使用频道功能需要将登录协议设置为 安卓手机(1)或者 IPAD(0或者5),登录协议修改参考 gocq 文档 安装补丁补丁是一个 NoneBot 插件,因此可以通过脚手架安装 nb plugin install nonebot-plugin-guild-patch 也可以通过 pip/poetry 等安装 pip install nonebot_plugin_guild_patch
poetry add nonebot_plugin_guild_patch 在上面的步骤执行完毕后,启动 gocq 和 NoneBot,新建像下面这样的 from nonebot.rule import to_me
from nonebot.plugin import on_command
from nonebot.params import CommandArg
from nonebot.adapters.onebot.v11 import Message
from nonebot_plugin_guild_patch import GuildMessageEvent
matcher = on_command("echo", rule=to_me())
@matcher.handle()
async def _(args: Message = CommandArg()):
await matcher.send(args)
效果如下 接下来,你就可以开始使用 NoneBot 开发频道机器人了 相关链接: |
Beta Was this translation helpful? Give feedback.
-
发送图片机器人发送图片是一件很平常的事情,接下来将讲解不同的接入方式如何发送图片 go-cqhttp + 补丁这种方式发送图片的实现最简单,只需要像向 QQ 内发送图片那样发送即可,即使用 下面的 from pathlib import Path
from nonebot.rule import to_me
from nonebot.plugin import on_command
from nonebot.adapters.onebot.v11 import MessageSegment
from nonebot_plugin_guild_patch import GuildMessageEvent # DO NOT DELETE
matcher = on_command("流汗", rule=to_me())
@matcher.handle()
async def _():
await matcher.finish(MessageSegment.image(Path(__file__).parent / "ddl.png")) 效果如下 更多用法详见 频道适配器频道适配器的发送相对麻烦一点 发送网络图片使用
下面的 from nonebot import on_command
from nonebot.adapters.qqguild import MessageSegment
matcher = on_command("mix")
@matcher.handle()
async def _():
msg = MessageSegment.image("https://avatars.githubusercontent.com/u/32300164?v=4")
await matcher.finish(msg) 效果如下 发送本地图片使用 发送本地图片不能与 from pathlib import Path
from nonebot import on_command
from nonebot.adapters.qqguild import MessageSegment
matcher = on_command("流汗")
@matcher.handle()
async def _():
msg = MessageSegment.file_image(Path(__file__).parent / "ddl.png")
await matcher.finish(msg) 以下内容已经过时,频道适配器已经支持 form-data 发送图片
本地图片要稍微棘手一点,因为根据文档,发送本地图片需要以 NoneBot 发送消息(
|
Beta Was this translation helpful? Give feedback.
-
补个圣经 |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
NoneBot2 接入 QQ 频道的几种方式
目前使用 NoneBot2 接入频道有两种方式
QQ 频道适配器
QQ 频道适配器(下面简称频道适配器)使用官方机器人接口,这意味着你需要拥有 QQ 开放平台 账号和机器人
申请机器人和机器人资料设置这里不会提到,下面将讲解 NoneBot 如何连接官方接口
新建频道机器人项目
使用
nb init
新建项目并选择频道适配器配置机器人
2023/1/9更新:配置文档已经写进频道适配器的
README
内,可参考README
来配置需要修改下面的配置
DRIVER
QQGUILD_BOTS
频道机器人 List此外,还有一个可选配置
QQGUILD_IS_SANDBOX
是否为沙箱环境(bool)在
.env
或.env.*
中修改配置文件DRIVER
需要同时拥有支持 HTTP 和支持正向 WebSocket 的驱动器,选择驱动器参见文档我个人使用的驱动器组合如下
DRIVER=~fastapi+~httpx+~websockets
QQGUILD_BOTS
为一个频道机器人 List,其中每个元素均为一个 Dict,拥有三个 keyid
BotAppID(开发者ID)token
机器人令牌secret
机器人密钥就像下面这样
下方为我的配置
对应开发平台的开发设置
启动 NoneBot,当出现下面的日志时即为连接成功
这时即可收到机器人相关1的消息,效果如下
Footnotes
@机器人或回复机器人的消息等,可启用
GUILD_MESSAGES
intents 来监听所有消息事件(仅私域) ↩Beta Was this translation helpful? Give feedback.
All reactions