nonebot / adapter-red

NoneBot2 基于 Red 协议 的 QQNT 适配器
MIT License
123 stars 10 forks source link
qqnt red-protocol
# NoneBot-Adapter-Red _✨ NoneBot2 Red Protocol适配器 / Red Protocol Adapter for NoneBot2 ✨_

安装

Chronocat

请按照 Chronocat 的指引安装。

目前推荐版本为 v0.0.51

迁移指南

如果你原先为 go-cqhttp 用户,可以参考 迁移指南 来修改你的插件。

首次使用者同样可以参考该指南。

配置

修改 NoneBot 配置文件 .env 或者 .env.*

Driver

参考 driver 配置项,添加 ForwardDriver 支持。

如:

DRIVER=~httpx+~websockets
DRIVER=~aiohttp

关于 ForwardDriver ,参考 Driver

RED_AUTO_DETECT

是否自动检测 Chronocat 的配置文件 ~/.chronocat/config/chronocat.yml 并读取内容,默认为 False

配置文件详细内容请参考 Chronocat/config

该配置项需要在 Chronocat 版本 v0.0.46 以上才可用。

使用该配置项时,你需要通过 pip install nonebot-adapter-red[auto_detect] 安装 nonebot-adapter-red

如果你已经配置了 RED_BOTS,则该配置项不会生效。

RED_BOTS

配置机器人帐号,如:

RED_BOTS='
[
  {
    "port": "xxx",
    "token": "xxx",
    "host": "xxx"
  }
]
'

你需要从 Chronocat 的配置文件 ~/.chronocat/config/chronocat.yml 中获取 porttokenhost

在单账号下,

# ~/.chronocat/config/chronocat.yml
servers:
  - type: red
    # Chronocat 已经自动生成了随机 token。要妥善保存哦!
    # 客户端使用服务时需要提供这个 token!
    token: DEFINE_CHRONO_TOKEN  # token
    # Chronocat 开启 red 服务的端口,默认为 16530。
    port: 16530  # port
    # 服务器监听的地址。 如果你不知道这是什么,那么不填此项即可!
    listen: localhost  # host

而多账号下,

# ~/.chronocat/config/chronocat.yml
overrides:
  1234567890:
    servers:
      - type: red
        # Chronocat 已经自动生成了随机 token。要妥善保存哦!
        # 客户端使用服务时需要提供这个 token!
        token: DEFINE_CHRONO_TOKEN  # token
        # Chronocat 开启 red 服务的端口,默认为 16530。
        port: 16531  # port
        # 服务器监听的地址。 如果你不知道这是什么,那么不填此项即可!
        listen: localhost

旧版 Chronocat

对于旧版的 Chronocat,

功能

支持的事件:

支持的 api:

完整的 api 文档请参考 API 文档QQNTRedProtocol

示例

from pathlib import Path

from nonebot import on_command
from nonebot.adapters.red import Bot
from nonebot.adapters.red.event import MessageEvent
from nonebot.adapters.red.message import MessageSegment

matcher = on_command("test")

@matcher.handle()
async def handle_receive(bot: Bot, event: MessageEvent):
    if event.is_group:
        await bot.send_group_message(event.scene, MessageSegment.image(Path("path/to/img.jpg")))