Python SDK 接入指南

PyPI

sdk 安装

外发版本通过下面方式安装

  1. pip install qq-bot
  • 注意是qq-bot而不是 qqbot
  • 注意不要命名代码为qqbot.py,会导致冲突
  • 更新包的话需要添加 --upgrade 注:需要python3.7+

sdk 使用

需要使用的地方 import SDK

  1. import qqbot

示例机器人

examples 目录下存放示例机器人,可供实现参考。

qqbot-API

基于 机器人开放平台API 实现的 API 接口封装。

使用方法

通过 import 对应 API 的类来进行使用,构造参数(Token 对象,是否沙盒模式)。

比如下面的例子,通过 api 当前机器人的相关信息:

  1. import qqbot
  2. token = qqbot.Token("{appid}","{token}")
  3. api = qqbot.UserAPI(token, False)
  4. user = api.me()
  5. print(user.username) # 打印机器人名字

async 示例:

  1. import qqbot
  2. token = qqbot.Token("{appid}","{token}")
  3. api = qqbot.AsyncUserAPI(token, False)
  4. # 获取loop
  5. loop = asyncio.get_event_loop()
  6. user = loop.run_until_complete(api.me())
  7. print(user.username) # 打印机器人名字

qqbot-事件监听

异步模块基于 websocket 技术用于监听频道内的相关事件,如消息、成员变化等事件,用于开发者对事件进行相应的处理。

更完整的事件说明,请参考 事件监听

使用方法

通过注册需要监听的事件并设置回调函数后,即可完成对事件的监听。

比如下面这个例子:需要监听机器人被@后消息并进行相应的回复。

  • 先初始化需要用的 token 对象
  • 通过 qqbot.listen_events 注册需要监听的事件
  • 通过 qqbot.HandlerType 定义需要监听的事件(部分事件可能需要权限申请)

    1. t_token = qqbot.Token(test_config["token"]["appid"], test_config["token"]["token"])
    2. # 注册事件类型和回调,可以注册多个
    3. qqbot_handler = qqbot.Handler(qqbot.HandlerType.AT_MESSAGE_EVENT_HANDLER, _message_handler)
    4. qqbot.listen_events(t_token, False, qqbot_handler)
  • 最后定义注册事件回调执行函数,如 _message_handler

    1. def _message_handler(event, message: Message):
    2. msg_api = qqbot.MessageAPI(t_token, False)
    3. # 打印返回信息
    4. qqbot.logger.info("event %s" % event + ",receive message %s" % message.content)
    5. # 构造消息发送请求数据对象
    6. send = qqbot.MessageSendRequest("<@%s>谢谢你,加油" % message.author.id, message.id)
    7. # 通过api发送回复消息
    8. msg_api.post_message(message.channel_id, send)
  • async 示例:

    1. # async的异步接口的使用示例
    2. t_token = qqbot.Token(test_config["token"]["appid"], test_config["token"]["token"])
    3. qqbot_handler = qqbot.Handler(qqbot.HandlerType.AT_MESSAGE_EVENT_HANDLER, _message_handler)
    4. qqbot.async_listen_events(t_token, False, qqbot_handler)
    1. async def _message_handler(event, message: qqbot.Message):
    2. """
    3. 定义事件回调的处理
    4. :param event: 事件类型
    5. :param message: 事件对象(如监听消息是Message对象)
    6. """
    7. msg_api = qqbot.AsyncMessageAPI(t_token, False)
    8. # 打印返回信息
    9. qqbot.logger.info("event %s" % event + ",receive message %s" % message.content)
    10. for i in range(5):
    11. await asyncio.sleep(5)
    12. # 构造消息发送请求数据对象
    13. send = qqbot.MessageSendRequest("<@%s>谢谢你,加油 " % message.author.id, message.id)
    14. # 通过api发送回复消息
    15. await msg_api.post_message(message.channel_id, send)
  • 注:当前支持事件及回调数据对象为:

    1. class HandlerType(Enum):
    2. PLAIN_EVENT_HANDLER = 0 # 透传事件
    3. GUILD_EVENT_HANDLER = 1 # 频道事件
    4. GUILD_MEMBER_EVENT_HANDLER = 2 # 频道成员事件
    5. CHANNEL_EVENT_HANDLER = 3 # 子频道事件
    6. MESSAGE_EVENT_HANDLER = 4 # 消息事件
    7. AT_MESSAGE_EVENT_HANDLER = 5 # At消息事件
    8. # DIRECT_MESSAGE_EVENT_HANDLER = 6 # 私信消息事件
    9. # AUDIO_EVENT_HANDLER = 7 # 音频事件

    事件回调函数的参数 1 为事件名称,参数 2 返回具体的数据对象。

    1. # 透传事件(无具体的数据对象,根据后台返回Json对象)
    2. def _plain_handler(event, data):
    3. # 频道事件
    4. def _guild_handler(event, guild:Guild):
    5. # 频道成员事件
    6. def _guild_member_handler(event, guild_member: GuildMember):
    7. # 子频道事件
    8. def _channel_handler(event, channel: Channel):
    9. # 消息事件
    10. # At消息事件
    11. def _message_handler(event, message: Message):

日志打印

基于自带的 logging 模块封装的日志模块,提供了日志写入以及美化了打印格式,并支持通过设置 QQBOT_LOG_LEVEL 环境变量来调整日志打印级别(默认打印级别为 INFO)。

使用方法

引用模块,并获取 logger 实例:

  1. from core.util import logging
  2. logger = logging.getLogger(__name__)

然后就可以愉快地使用 logger 进行打印。例如:

  1. logger.info("hello world!")

设置日志级别

通过 export 命令添加 QQBOT_LOG_LEVEL 环境变量可以设置日志级别。例如:

  1. export QQBOT_LOG_LEVEL=10 # 10表示DEBUG级别

几个可选取值(参考了logging 模块的取值):

Level 取值
CRITICAL 50
ERROR 40
WARNING 30
INFO 20
DEBUG 10
NOTSET 0

禁用日志文件输出

默认情况下 qqbot 会在当前执行目录下生成格式为 qqbot.log.* 的日志文件。如果想禁用这些日志文件,可以通过设置 QQBOT_DISABLE_LOG 环境变量为 1 来关闭。

  1. export QQBOT_DISABLE_LOG=1 # 1表示禁用日志