Package: qq-bot
qq-bot-pythonsdk安装外发版本通过下面方式安装pipinstallqq-bot# 注意是 qq-bot 而不是 qqbot！更新包的话需要添加--upgrade注：需要python3.7+sdk使用需要使用的地方import SDKimportqqbot示例机器人``examples`<./examples/>`_ 目录下存放示例机器人，可供实现参考。qqbot-API基于https://bot.q.qq.com/wiki/develop/api/机器人开放平台API实现的API接口封装。使用方法通过import对应API的类来进行使用，构造参数（Token对象，是否沙盒模式）。比如下面的例子，通过api当前机器人的相关信息：importqqbottoken=qqbot.Token("{appid}","{token}")api=qqbot.UserAPI(token,False)user=api.me()print(user.username)# 打印机器人名字async 示例：importqqbottoken=qqbot.Token("{appid}","{token}")api=qqbot.AsyncUserAPI(token,False)# 获取looploop=asyncio.get_event_loop()user=loop.run_until_complete(api.me())print(user.username)# 打印机器人名字qqbot-事件监听异步模块基于 websocket 技术用于监听频道内的相关事件，如消息、成员变化等事件，用于开发者对事件进行相应的处理。使用方法通过注册需要监听的事件并设置回调函数后，即可完成对事件的监听。比如下面这个例子：需要监听机器人被@后消息并进行相应的回复。先初始化需要用的token对象（appid和token参数从机器人管理端获取 ）通过qqbot.listen_events注册需要监听的事件通过qqbot.HandlerType定义需要监听的事件（部分事件可能需要权限申请）token=qqbot.Token("{appid}","{token}")# 注册事件类型和回调，可以注册多个qqbot_handler=qqbot.Handler(qqbot.HandlerType.AT_MESSAGE_EVENT_HANDLER,_message_handler)qqbot.listen_events(token,False,qqbot_handler)最后定义注册事件回调执行函数,如_message_handler。def_message_handler(event,message:Message):msg_api=qqbot.MessageAPI(token,False)# 打印返回信息qqbot.logger.info("event%s"%event+",receive message%s"%message.content)# 构造消息发送请求数据对象send=qqbot.MessageSendRequest("<@%s>谢谢你，加油"%message.author.id,message.id)# 通过api发送回复消息msg_api.post_message(message.channel_id,send)async 示例:# async的异步接口的使用示例token=qqbot.Token("{appid}","{token}")qqbot_handler=qqbot.Handler(qqbot.HandlerType.AT_MESSAGE_EVENT_HANDLER,_message_handler)qqbot.async_listen_events(token,False,qqbot_handler)asyncdef_message_handler(event,message:qqbot.Message):"""
  定义事件回调的处理

  :param event: 事件类型
  :param message: 事件对象（如监听消息是Message对象）
  """msg_api=qqbot.AsyncMessageAPI(token,False)# 打印返回信息qqbot.logger.info("event%s"%event+",receive message%s"%message.content)foriinrange(5):awaitasyncio.sleep(5)# 构造消息发送请求数据对象send=qqbot.MessageSendRequest("<@%s>谢谢你，加油 "%message.author.id,message.id)# 通过api发送回复消息awaitmsg_api.post_message(message.channel_id,send)注：当前支持事件及回调数据对象为：classHandlerType(Enum):PLAIN_EVENT_HANDLER=0# 透传事件GUILD_EVENT_HANDLER=1# 频道事件GUILD_MEMBER_EVENT_HANDLER=2# 频道成员事件CHANNEL_EVENT_HANDLER=3# 子频道事件MESSAGE_EVENT_HANDLER=4# 消息事件AT_MESSAGE_EVENT_HANDLER=5# At消息事件# DIRECT_MESSAGE_EVENT_HANDLER = 6  # 私信消息事件# AUDIO_EVENT_HANDLER = 7  # 音频事件事件回调函数的参数 1 为事件名称，参数 2 返回具体的数据对象。# 透传事件（无具体的数据对象，根据后台返回Json对象）def_plain_handler(event,data):# 频道事件def_guild_handler(event,guild:Guild):# 频道成员事件def_guild_member_handler(event,guild_member:GuildMember):# 子频道事件def_channel_handler(event,channel:Channel):# 消息事件# At消息事件def_message_handler(event,message:Message):日志打印基于自带的 logging 模块封装的日志模块，提供了日志写入以及美化了打印格式，并支持通过设置QQBOT_LOG_LEVEL环境变量来调整日志打印级别（默认打印级别为INFO）。使用方法引用模块，并获取logger实例：fromcore.utilimportlogginglogger=logging.getLogger()或者通过qqbot.logger也可以获取logger对象然后就可以愉快地使用 logger 进行打印。例如：logger.info("hello world!")设置日志级别SDK默认的日志级别为INFO级别，需要修改请查看下面信息Debug日志命令行启动py后通过增加参数-d或--debug可以打开debug日志python3demo_at_reply.py-d其他级别日志通过export命令添加QQBOT_LOG_LEVEL环境变量可以设置日志级别。例如：exportQQBOT_LOG_LEVEL=10# 10表示DEBUG级别几个可选取值（参考了logging模块的取值）：Level取值CRITICAL50ERROR40WARNING30INFO20DEBUG10NOTSET0禁用日志文件输出默认情况下 qqbot 会在当前执行目录下生成格式为qqbot.log.*的日志文件。如果想禁用这些日志文件，可以通过设置QQBOT_DISABLE_LOG环境变量为 1 来关闭。exportQQBOT_DISABLE_LOG=1# 1表示禁用日志修改日志输出路径SDK也支持修改日志输出路径，由于实际路径不尽相同，所以此处使用os模块来设置临时环境变量。importosos.environ["QQBOT_LOG_PATH"]=os.path.join(os.getcwd(),"log","%(name)s.log")# 日志将生成在执行目录下log文件夹内修改日志格式通过export命令添加QQBOT_LOG_FILE_FORMAT和QQBOT_LOG_PRINT_FORMAT环境变量可以设置日志格式。例如：# 设置文件输出格式exportQQBOT_LOG_FILE_FORMAT="%(asctime)s [%(levelname)s] %(funcName)s (%(filename)s:%(lineno)s): %(message)s"如需使用转义字符，可以使用os模块添加。例如：# 设置控制台输出格式importosos.environ["QQBOT_LOG_PRINT_FORMAT"]="%(asctime)s\033[1;33m[%(levelname)s]%(funcName)s(%(filename)s:%(lineno)s):\033[0m%(message)s"sdk开发环境配置pipinstall-rrequirements.txt# 安装依赖的pip包pre-commitinstall# 安装格式化代码的钩子单元测试代码库提供API接口测试和 websocket 的单测用例，位于tests目录中。如果需要自己运行，可以在tests目录重命名.test.yaml文件后添加自己的测试参数启动测试：# test yaml 用于设置test相关的参数，开源版本需要去掉参数token:appid:"xxx"token:"xxxxx"test_params:guild_id:"xx"guild_owner_id:"xx"guild_owner_name:"xx"guild_test_member_id:"xx"guild_test_role_id:"xx"channel_id:"xx"channel_name:"xx"robot_name:"xxx"is_sandbox:False单测执行方法：先确保已安装pytest：pipinstallpytest然后在项目根目录下执行单测：pytest加入官方社区欢迎扫码加入QQ 频道开发者社区。