Skip to content
On this page

QQ 群机器人 Beta

QQ 开放平台 完成企业主体入驻,即可创建可在 QQ 群聊里使用的 QQ 群机器人。

在公网下使用

QQ 群聊适配器需要在本地启动资源服务让腾讯端能够访问媒体资源,默认在公网下使用。

python
from amiyabot.adapters.tencent.qqGroup import qq_group

client_secret = '******' # 密钥

bot = AmiyaBot(appid='******', token='******', adapter=qq_group(client_secret))
  • 在机器人启动时,资源服务也会一同启动。
  • 默认的资源服务是端口单例的,实例化多个 QQ 群聊适配器 AmiyaBot 或使用 多账号 时,同一个端口的资源服务会相互共享。

修改资源服务配置

引入 QQGroupChainBuilderOptions 修改默认的资源服务配置。

参数名类型释义默认值
hoststr资源服务监听地址0.0.0.0
portint资源服务监听端口8086
resource_pathstr临时文件存放目录./resource
http_server_optionsdictHttpServer **kwargs
python
from amiyabot.adapters.tencent.qqGroup import qq_group
from amiyabot.adapters.tencent.qqGroup.builder import QQGroupChainBuilderOptions

bot = AmiyaBot(
    appid='******',
    token='******',
    adapter=qq_group(
        client_secret='******',
        default_chain_builder_options=QQGroupChainBuilderOptions(
            '0.0.0.0',
            8086,
            './resource',
        ),
    ),
)

自定义资源服务

多数情况下我们推荐使用第三方托管服务来搭建资源服务,如 腾讯云COS阿里云OSS 等。

通过自定义默认的 ChainBuilder,来实现上传文件到托管服务以及返回生成的 url。

普通 ChainBuilder 可参考 进阶指南 - 介入媒体消息的构建过程 ,但在这里更推荐继承适配器中的 QQGroupChainBuilder

普通 ChainBuilder

python
from typing import Union
from graiax import silkcoder
from amiyabot import ChainBuilder

class MyBuilder(ChainBuilder):
    @classmethod
    async def get_image(cls, image: Union[str, bytes]) -> Union[str, bytes]:
        # 上传图片到第三方托管服务
        ...
        return url # 返回访问资源的 URL

    @classmethod
    async def get_voice(cls, voice_file: str) -> str:
        # 上传语音文件到第三方托管服务,语音文件必须是 silk 格式
        voice: bytes = await silkcoder.async_encode(voice_file, ios_adaptive=True)
        ...
        return url # 返回访问资源的 URL

    @classmethod
    async def get_video(cls, video_file: str) -> str:
        # 上传视频文件到第三方托管服务
        ...
        return url # 返回访问资源的 URL


bot = AmiyaBot(..., adapter=qq_group(default_chain_builder=MyBuilder()))

继承 QQGroupChainBuilder

🚧 文档编写中... 🚧