qg-botsdk


Nameqg-botsdk JSON
Version 4.1.5 PyPI version JSON
download
home_pagehttps://github.com/GLGDLY/qg_botsdk
Summaryeasy-to-use SDK for Tencent QQ guild robot
upload_time2023-12-22 14:21:14
maintainer
docs_urlNone
authorGDLY
requires_python<4,>=3.7
license
keywords sample example setuptools
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            .. image:: https://socialify.git.ci/GLGDLY/qg_botsdk/image?description=1&font=Source%20Code%20Pro&forks=1&issues=1&language=1&logo=https%3A%2F%2Fgithub.com%2Ftencent-connect%2Fbot-docs%2Fblob%2Fmain%2Fdocs%2F.vuepress%2Fpublic%2Ffavicon-64px.png%3Fraw%3Dtrue&name=1&owner=1&pattern=Floating%20Cogs&pulls=1&stargazers=1&theme=Light

|

.. image:: https://img.shields.io/badge/language-python-green.svg?style=plastic
   :target: https://www.python.org/
.. image:: https://img.shields.io/badge/license-MIT-orange.svg?style=plastic
   :target: https://github.com/GLGDLY/qg_botsdk/blob/master/LICENSE
.. image:: https://img.shields.io/github/v/release/GLGDLY/qg_botsdk?style=plastic
   :target: https://github.com/GLGDLY/qg_botsdk/releases
.. image:: https://img.shields.io/pypi/dw/qg-botsdk?style=plastic&color=blue
   :target: https://pypi.org/project/qg-botsdk/
.. image:: https://app.codacy.com/project/badge/Grade/f015549b3dba4602be2fe0f5d8b0a8d5
   :target: https://www.codacy.com/gh/GLGDLY/qg_botsdk/dashboard?utm_source=github.com&utm_medium=referral&utm_content=GLGDLY/qg_botsdk&utm_campaign=Badge_Grade
.. image:: https://readthedocs.org/projects/qg-botsdk/badge/?version=latest
   :target: https://qg-botsdk.readthedocs.io/zh_CN/latest/

引言
=====

对于使用python进行频道官方机器人开发而言,市面上确实有不同的sdk可以选用,但其很多只提供异步asyncio+类继承的开发方式,对于不会相关技巧的朋友们,尤其新手,会有开发难度。

为此,qg_botsdk相应提供了另一个选择,这一款sdk虽然同样使用asyncio编写sdk底层,但其同时提供了threading和asyncio封装下的应用层调用,以抽象化封装的库编写方式,极大地降低应用层的开发难度。



亮点
=====

-   两种应用层开发方式(threading、asyncio),可根据自己的喜好选择,而底层均为asyncio实现,保持高并发能力

-   灵活的构建方式,即使官方删除或新增字段,SDK也不会规范于原来的数据格式,而会把真实数据反馈给你

-   轻量,简洁,统一的代码结构,通过录入回调函数处理不同事件,10行即可构建一个简单的程序

-   容易入门,无需学会asyncio、类继承等编程技巧也可使用,同时保留较高并发能力

-   保留官方http API中Json数据的结构字段,带你学习官方结构,日后可自行开发适合自己的SDK

-   简单易用的plugins编写与加载,使用例子可参阅 `example_13(装饰器).py <./example/example_13(%E8%A3%85%E9%A5%B0%E5%99%A8).py>`_

-   方便多场景(频道+群等)构建机器人的抽象化封装,使用例子可参阅 `example_16(Q群简单工作流).py <./example/example_16(Q%E7%BE%A4%E7%AE%80%E5%8D%95%E5%B7%A5%E4%BD%9C%E6%B5%81).py>`_

下载方式
==========

-   直接下载 `最新release <https://github.com/GLGDLY/qg_botsdk/releases>`_ ,放到项目中即可
-   pip安装(推荐):

.. code-block:: bash

    pip install qg-botsdk

**注意是qg-botsdk(中线),不是qg_botsdk(底线)**

一个简单的工作流
==================

| -   注册BOT实例,录入机器人平台获取的ID(BotAppId开发者ID)和token(机器人令牌)
| -   编写接收事件的函数->下方例子:``def deliver(data)``,并可借助model库检查数据格式(``data: Model.MESSAGE``)
| -   绑定接收事件的函数(bind_msg、bind_dm、bind_msg_delete、bind_guild_event、bind_guild_member、bind_reaction、bind_interaction、bind_audit、bind_forum、bind_audio)
| -   开始运行机器人:bot.start()

.. code-block:: python

    from qg_botsdk import BOT, Model   # 导入SDK核心类(BOT)、所有数据模型(Model)

    bot = BOT(bot_id='xxx', bot_token='xxx', is_private=True, is_sandbox=True)   # 实例化SDK核心类


    @bot.bind_msg()   # 绑定接收消息事件的函数
    def deliver(data: Model.MESSAGE):   # 创建接收消息事件的函数
        if '你好' in data.treated_msg:   # 判断消息是否存在特定内容
            data.reply('你好,世界')   # 发送被动回复(带message_id直接reply回复)
            # 如需使用如 Embed 等消息模板,可传入相应结构体, 如:
            # data.reply(ApiModel.MessageEmbed(title="你好", content="世界"))


    if __name__ == '__main__':
        bot.start()   # 开始运行机器人

已实现事件接收(已支持解析论坛事件)
===========================================

::

    from qg_botsdk.model import Model
    此库为所有事件的数据格式结构,可套用到代码以检查结构是否正确

-   bind_msg
-   bind_dm
-   bind_msg_delete
-   bind_guild_event
-   bind_guild_member
-   bind_reaction
-   bind_interaction
-   bind_audit
-   bind_forum
-   bind_audio

已实现API
=========

::

    - API已基本完善,具体详情可查阅:https://qg-botsdk.readthedocs.io/zh_CN/latest/API.html
    - 关于API的更多详细信息可阅读官方文档介绍:https://bot.q.qq.com/wiki/develop/api/

-   get_bot_id
-   get_bot_info
-   get_bot_guilds
-   get_guild_info
-   get_guild_channels
-   get_channels_info
-   create_channels
-   patch_channels
-   delete_channels
-   get_guild_members
-   get_role_members
-   get_member_info
-   delete_member
-   get_guild_roles
-   create_role
-   patch_role
-   delete_role
-   create_role_member
-   delete_role_member
-   get_channel_member_permission
-   put_channel_member_permission
-   get_channel_role_permission
-   put_channel_role_permission
-   get_message_info
-   send_msg
-   send_embed(已废弃)
-   send_ark_23(已废弃)
-   send_ark_24(已废弃)
-   send_ark_37(已废弃)
-   send_markdown(已废弃)
-   delete_msg
-   get_guild_setting
-   create_dm_guild
-   send_dm
-   delete_dm_msg
-   mute_all_member
-   mute_member
-   mute_members
-   create_announce
-   delete_announce
-   create_pinmsg
-   delete_pinmsg
-   get_pinmsg
-   get_schedules
-   get_schedule_info
-   create_schedule
-   patch_schedule
-   delete_schedule
-   create_reaction
-   delete_reaction
-   get_reaction_users
-   control_audio
-   bot_on_mic
-   bot_off_mic
-   get_threads
-   get_thread_info
-   create_thread
-   delete_thread
-   get_guild_permissions
-   create_permission_demand
-   upload_media
-   send_qq_dm
-   send_group_msg

特殊功能
========

-   register_start_event:绑定一个在机器人开始运行后马上执行的函数
-   register_repeat_event:绑定一个背景重复运行的函数
-   security_check:用于使用腾讯内容检测接口进行内容检测


相关链接
========

-   文档:
     * `readthedocs <https://qg-botsdk.readthedocs.io/zh_CN/latest/>`_
-   官方注册机器人:https://q.qq.com/#/
-   官方API文档:https://bot.q.qq.com/wiki/develop/api/
-   SDK QQ交流群:https://jq.qq.com/?_wv=1027&k=3NnWvGpz

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/GLGDLY/qg_botsdk",
    "name": "qg-botsdk",
    "maintainer": "",
    "docs_url": null,
    "requires_python": "<4,>=3.7",
    "maintainer_email": "",
    "keywords": "sample,example,setuptools",
    "author": "GDLY",
    "author_email": "tzlgdly@gmail.com",
    "download_url": "",
    "platform": null,
    "description": ".. image:: https://socialify.git.ci/GLGDLY/qg_botsdk/image?description=1&font=Source%20Code%20Pro&forks=1&issues=1&language=1&logo=https%3A%2F%2Fgithub.com%2Ftencent-connect%2Fbot-docs%2Fblob%2Fmain%2Fdocs%2F.vuepress%2Fpublic%2Ffavicon-64px.png%3Fraw%3Dtrue&name=1&owner=1&pattern=Floating%20Cogs&pulls=1&stargazers=1&theme=Light\r\n\r\n|\r\n\r\n.. image:: https://img.shields.io/badge/language-python-green.svg?style=plastic\r\n   :target: https://www.python.org/\r\n.. image:: https://img.shields.io/badge/license-MIT-orange.svg?style=plastic\r\n   :target: https://github.com/GLGDLY/qg_botsdk/blob/master/LICENSE\r\n.. image:: https://img.shields.io/github/v/release/GLGDLY/qg_botsdk?style=plastic\r\n   :target: https://github.com/GLGDLY/qg_botsdk/releases\r\n.. image:: https://img.shields.io/pypi/dw/qg-botsdk?style=plastic&color=blue\r\n   :target: https://pypi.org/project/qg-botsdk/\r\n.. image:: https://app.codacy.com/project/badge/Grade/f015549b3dba4602be2fe0f5d8b0a8d5\r\n   :target: https://www.codacy.com/gh/GLGDLY/qg_botsdk/dashboard?utm_source=github.com&utm_medium=referral&utm_content=GLGDLY/qg_botsdk&utm_campaign=Badge_Grade\r\n.. image:: https://readthedocs.org/projects/qg-botsdk/badge/?version=latest\r\n   :target: https://qg-botsdk.readthedocs.io/zh_CN/latest/\r\n\r\n\u5f15\u8a00\r\n=====\r\n\r\n\u5bf9\u4e8e\u4f7f\u7528python\u8fdb\u884c\u9891\u9053\u5b98\u65b9\u673a\u5668\u4eba\u5f00\u53d1\u800c\u8a00\uff0c\u5e02\u9762\u4e0a\u786e\u5b9e\u6709\u4e0d\u540c\u7684sdk\u53ef\u4ee5\u9009\u7528\uff0c\u4f46\u5176\u5f88\u591a\u53ea\u63d0\u4f9b\u5f02\u6b65asyncio+\u7c7b\u7ee7\u627f\u7684\u5f00\u53d1\u65b9\u5f0f\uff0c\u5bf9\u4e8e\u4e0d\u4f1a\u76f8\u5173\u6280\u5de7\u7684\u670b\u53cb\u4eec\uff0c\u5c24\u5176\u65b0\u624b\uff0c\u4f1a\u6709\u5f00\u53d1\u96be\u5ea6\u3002\r\n\r\n\u4e3a\u6b64\uff0cqg_botsdk\u76f8\u5e94\u63d0\u4f9b\u4e86\u53e6\u4e00\u4e2a\u9009\u62e9\uff0c\u8fd9\u4e00\u6b3esdk\u867d\u7136\u540c\u6837\u4f7f\u7528asyncio\u7f16\u5199sdk\u5e95\u5c42\uff0c\u4f46\u5176\u540c\u65f6\u63d0\u4f9b\u4e86threading\u548casyncio\u5c01\u88c5\u4e0b\u7684\u5e94\u7528\u5c42\u8c03\u7528\uff0c\u4ee5\u62bd\u8c61\u5316\u5c01\u88c5\u7684\u5e93\u7f16\u5199\u65b9\u5f0f\uff0c\u6781\u5927\u5730\u964d\u4f4e\u5e94\u7528\u5c42\u7684\u5f00\u53d1\u96be\u5ea6\u3002\r\n\r\n\r\n\r\n\u4eae\u70b9\r\n=====\r\n\r\n-   \u4e24\u79cd\u5e94\u7528\u5c42\u5f00\u53d1\u65b9\u5f0f\uff08threading\u3001asyncio\uff09\uff0c\u53ef\u6839\u636e\u81ea\u5df1\u7684\u559c\u597d\u9009\u62e9\uff0c\u800c\u5e95\u5c42\u5747\u4e3aasyncio\u5b9e\u73b0\uff0c\u4fdd\u6301\u9ad8\u5e76\u53d1\u80fd\u529b\r\n\r\n-   \u7075\u6d3b\u7684\u6784\u5efa\u65b9\u5f0f\uff0c\u5373\u4f7f\u5b98\u65b9\u5220\u9664\u6216\u65b0\u589e\u5b57\u6bb5\uff0cSDK\u4e5f\u4e0d\u4f1a\u89c4\u8303\u4e8e\u539f\u6765\u7684\u6570\u636e\u683c\u5f0f\uff0c\u800c\u4f1a\u628a\u771f\u5b9e\u6570\u636e\u53cd\u9988\u7ed9\u4f60\r\n\r\n-   \u8f7b\u91cf\uff0c\u7b80\u6d01\uff0c\u7edf\u4e00\u7684\u4ee3\u7801\u7ed3\u6784\uff0c\u901a\u8fc7\u5f55\u5165\u56de\u8c03\u51fd\u6570\u5904\u7406\u4e0d\u540c\u4e8b\u4ef6\uff0c10\u884c\u5373\u53ef\u6784\u5efa\u4e00\u4e2a\u7b80\u5355\u7684\u7a0b\u5e8f\r\n\r\n-   \u5bb9\u6613\u5165\u95e8\uff0c\u65e0\u9700\u5b66\u4f1aasyncio\u3001\u7c7b\u7ee7\u627f\u7b49\u7f16\u7a0b\u6280\u5de7\u4e5f\u53ef\u4f7f\u7528\uff0c\u540c\u65f6\u4fdd\u7559\u8f83\u9ad8\u5e76\u53d1\u80fd\u529b\r\n\r\n-   \u4fdd\u7559\u5b98\u65b9http API\u4e2dJson\u6570\u636e\u7684\u7ed3\u6784\u5b57\u6bb5\uff0c\u5e26\u4f60\u5b66\u4e60\u5b98\u65b9\u7ed3\u6784\uff0c\u65e5\u540e\u53ef\u81ea\u884c\u5f00\u53d1\u9002\u5408\u81ea\u5df1\u7684SDK\r\n\r\n-   \u7b80\u5355\u6613\u7528\u7684plugins\u7f16\u5199\u4e0e\u52a0\u8f7d\uff0c\u4f7f\u7528\u4f8b\u5b50\u53ef\u53c2\u9605 `example_13(\u88c5\u9970\u5668).py <./example/example_13(%E8%A3%85%E9%A5%B0%E5%99%A8).py>`_\r\n\r\n-   \u65b9\u4fbf\u591a\u573a\u666f\uff08\u9891\u9053+\u7fa4\u7b49\uff09\u6784\u5efa\u673a\u5668\u4eba\u7684\u62bd\u8c61\u5316\u5c01\u88c5\uff0c\u4f7f\u7528\u4f8b\u5b50\u53ef\u53c2\u9605 `example_16(Q\u7fa4\u7b80\u5355\u5de5\u4f5c\u6d41).py <./example/example_16(Q%E7%BE%A4%E7%AE%80%E5%8D%95%E5%B7%A5%E4%BD%9C%E6%B5%81).py>`_\r\n\r\n\u4e0b\u8f7d\u65b9\u5f0f\r\n==========\r\n\r\n-   \u76f4\u63a5\u4e0b\u8f7d `\u6700\u65b0release <https://github.com/GLGDLY/qg_botsdk/releases>`_ \uff0c\u653e\u5230\u9879\u76ee\u4e2d\u5373\u53ef\r\n-   pip\u5b89\u88c5\uff08\u63a8\u8350\uff09\uff1a\r\n\r\n.. code-block:: bash\r\n\r\n    pip install qg-botsdk\r\n\r\n**\u6ce8\u610f\u662fqg-botsdk\uff08\u4e2d\u7ebf\uff09\uff0c\u4e0d\u662fqg_botsdk\uff08\u5e95\u7ebf\uff09**\r\n\r\n\u4e00\u4e2a\u7b80\u5355\u7684\u5de5\u4f5c\u6d41\r\n==================\r\n\r\n| -   \u6ce8\u518cBOT\u5b9e\u4f8b\uff0c\u5f55\u5165\u673a\u5668\u4eba\u5e73\u53f0\u83b7\u53d6\u7684ID\uff08BotAppId\u5f00\u53d1\u8005ID\uff09\u548ctoken\uff08\u673a\u5668\u4eba\u4ee4\u724c\uff09\r\n| -   \u7f16\u5199\u63a5\u6536\u4e8b\u4ef6\u7684\u51fd\u6570->\u4e0b\u65b9\u4f8b\u5b50\uff1a``def deliver(data)``\uff0c\u5e76\u53ef\u501f\u52a9model\u5e93\u68c0\u67e5\u6570\u636e\u683c\u5f0f\uff08``data: Model.MESSAGE``\uff09\r\n| -   \u7ed1\u5b9a\u63a5\u6536\u4e8b\u4ef6\u7684\u51fd\u6570\uff08bind_msg\u3001bind_dm\u3001bind_msg_delete\u3001bind_guild_event\u3001bind_guild_member\u3001bind_reaction\u3001bind_interaction\u3001bind_audit\u3001bind_forum\u3001bind_audio\uff09\r\n| -   \u5f00\u59cb\u8fd0\u884c\u673a\u5668\u4eba\uff1abot.start()\r\n\r\n.. code-block:: python\r\n\r\n    from qg_botsdk import BOT, Model   # \u5bfc\u5165SDK\u6838\u5fc3\u7c7b\uff08BOT\uff09\u3001\u6240\u6709\u6570\u636e\u6a21\u578b\uff08Model\uff09\r\n\r\n    bot = BOT(bot_id='xxx', bot_token='xxx', is_private=True, is_sandbox=True)   # \u5b9e\u4f8b\u5316SDK\u6838\u5fc3\u7c7b\r\n\r\n\r\n    @bot.bind_msg()   # \u7ed1\u5b9a\u63a5\u6536\u6d88\u606f\u4e8b\u4ef6\u7684\u51fd\u6570\r\n    def deliver(data: Model.MESSAGE):   # \u521b\u5efa\u63a5\u6536\u6d88\u606f\u4e8b\u4ef6\u7684\u51fd\u6570\r\n        if '\u4f60\u597d' in data.treated_msg:   # \u5224\u65ad\u6d88\u606f\u662f\u5426\u5b58\u5728\u7279\u5b9a\u5185\u5bb9\r\n            data.reply('\u4f60\u597d\uff0c\u4e16\u754c')   # \u53d1\u9001\u88ab\u52a8\u56de\u590d\uff08\u5e26message_id\u76f4\u63a5reply\u56de\u590d\uff09\r\n            # \u5982\u9700\u4f7f\u7528\u5982 Embed \u7b49\u6d88\u606f\u6a21\u677f\uff0c\u53ef\u4f20\u5165\u76f8\u5e94\u7ed3\u6784\u4f53\uff0c \u5982\uff1a\r\n            # data.reply(ApiModel.MessageEmbed(title=\"\u4f60\u597d\", content=\"\u4e16\u754c\"))\r\n\r\n\r\n    if __name__ == '__main__':\r\n        bot.start()   # \u5f00\u59cb\u8fd0\u884c\u673a\u5668\u4eba\r\n\r\n\u5df2\u5b9e\u73b0\u4e8b\u4ef6\u63a5\u6536\uff08\u5df2\u652f\u6301\u89e3\u6790\u8bba\u575b\u4e8b\u4ef6\uff09\r\n===========================================\r\n\r\n::\r\n\r\n    from qg_botsdk.model import Model\r\n    \u6b64\u5e93\u4e3a\u6240\u6709\u4e8b\u4ef6\u7684\u6570\u636e\u683c\u5f0f\u7ed3\u6784\uff0c\u53ef\u5957\u7528\u5230\u4ee3\u7801\u4ee5\u68c0\u67e5\u7ed3\u6784\u662f\u5426\u6b63\u786e\r\n\r\n-   bind_msg\r\n-   bind_dm\r\n-   bind_msg_delete\r\n-   bind_guild_event\r\n-   bind_guild_member\r\n-   bind_reaction\r\n-   bind_interaction\r\n-   bind_audit\r\n-   bind_forum\r\n-   bind_audio\r\n\r\n\u5df2\u5b9e\u73b0API\r\n=========\r\n\r\n::\r\n\r\n    - API\u5df2\u57fa\u672c\u5b8c\u5584\uff0c\u5177\u4f53\u8be6\u60c5\u53ef\u67e5\u9605\uff1ahttps://qg-botsdk.readthedocs.io/zh_CN/latest/API.html\r\n    - \u5173\u4e8eAPI\u7684\u66f4\u591a\u8be6\u7ec6\u4fe1\u606f\u53ef\u9605\u8bfb\u5b98\u65b9\u6587\u6863\u4ecb\u7ecd\uff1ahttps://bot.q.qq.com/wiki/develop/api/\r\n\r\n-   get_bot_id\r\n-   get_bot_info\r\n-   get_bot_guilds\r\n-   get_guild_info\r\n-   get_guild_channels\r\n-   get_channels_info\r\n-   create_channels\r\n-   patch_channels\r\n-   delete_channels\r\n-   get_guild_members\r\n-   get_role_members\r\n-   get_member_info\r\n-   delete_member\r\n-   get_guild_roles\r\n-   create_role\r\n-   patch_role\r\n-   delete_role\r\n-   create_role_member\r\n-   delete_role_member\r\n-   get_channel_member_permission\r\n-   put_channel_member_permission\r\n-   get_channel_role_permission\r\n-   put_channel_role_permission\r\n-   get_message_info\r\n-   send_msg\r\n-   send_embed\uff08\u5df2\u5e9f\u5f03\uff09\r\n-   send_ark_23\uff08\u5df2\u5e9f\u5f03\uff09\r\n-   send_ark_24\uff08\u5df2\u5e9f\u5f03\uff09\r\n-   send_ark_37\uff08\u5df2\u5e9f\u5f03\uff09\r\n-   send_markdown\uff08\u5df2\u5e9f\u5f03\uff09\r\n-   delete_msg\r\n-   get_guild_setting\r\n-   create_dm_guild\r\n-   send_dm\r\n-   delete_dm_msg\r\n-   mute_all_member\r\n-   mute_member\r\n-   mute_members\r\n-   create_announce\r\n-   delete_announce\r\n-   create_pinmsg\r\n-   delete_pinmsg\r\n-   get_pinmsg\r\n-   get_schedules\r\n-   get_schedule_info\r\n-   create_schedule\r\n-   patch_schedule\r\n-   delete_schedule\r\n-   create_reaction\r\n-   delete_reaction\r\n-   get_reaction_users\r\n-   control_audio\r\n-   bot_on_mic\r\n-   bot_off_mic\r\n-   get_threads\r\n-   get_thread_info\r\n-   create_thread\r\n-   delete_thread\r\n-   get_guild_permissions\r\n-   create_permission_demand\r\n-   upload_media\r\n-   send_qq_dm\r\n-   send_group_msg\r\n\r\n\u7279\u6b8a\u529f\u80fd\r\n========\r\n\r\n-   register_start_event\uff1a\u7ed1\u5b9a\u4e00\u4e2a\u5728\u673a\u5668\u4eba\u5f00\u59cb\u8fd0\u884c\u540e\u9a6c\u4e0a\u6267\u884c\u7684\u51fd\u6570\r\n-   register_repeat_event\uff1a\u7ed1\u5b9a\u4e00\u4e2a\u80cc\u666f\u91cd\u590d\u8fd0\u884c\u7684\u51fd\u6570\r\n-   security_check\uff1a\u7528\u4e8e\u4f7f\u7528\u817e\u8baf\u5185\u5bb9\u68c0\u6d4b\u63a5\u53e3\u8fdb\u884c\u5185\u5bb9\u68c0\u6d4b\r\n\r\n\r\n\u76f8\u5173\u94fe\u63a5\r\n========\r\n\r\n-   \u6587\u6863\uff1a\r\n     * `readthedocs <https://qg-botsdk.readthedocs.io/zh_CN/latest/>`_\r\n-   \u5b98\u65b9\u6ce8\u518c\u673a\u5668\u4eba\uff1ahttps://q.qq.com/#/\r\n-   \u5b98\u65b9API\u6587\u6863\uff1ahttps://bot.q.qq.com/wiki/develop/api/\r\n-   SDK QQ\u4ea4\u6d41\u7fa4\uff1ahttps://jq.qq.com/?_wv=1027&k=3NnWvGpz\r\n",
    "bugtrack_url": null,
    "license": "",
    "summary": "easy-to-use SDK for Tencent QQ guild robot",
    "version": "4.1.5",
    "project_urls": {
        "Homepage": "https://github.com/GLGDLY/qg_botsdk"
    },
    "split_keywords": [
        "sample",
        "example",
        "setuptools"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e3f526b23bfba01e2e47dacac685c2f9efb4cfdfa5b46c45f66940496c2229b7",
                "md5": "2c0e0ab9a178dbe3c6d3239b5453d9e5",
                "sha256": "e9b28127cebedf6bc85123063f9d1d1bc60208390ad3f89a50fcbd0788c52af5"
            },
            "downloads": -1,
            "filename": "qg_botsdk-4.1.5-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "2c0e0ab9a178dbe3c6d3239b5453d9e5",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "<4,>=3.7",
            "size": 85767,
            "upload_time": "2023-12-22T14:21:14",
            "upload_time_iso_8601": "2023-12-22T14:21:14.723940Z",
            "url": "https://files.pythonhosted.org/packages/e3/f5/26b23bfba01e2e47dacac685c2f9efb4cfdfa5b46c45f66940496c2229b7/qg_botsdk-4.1.5-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-12-22 14:21:14",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "GLGDLY",
    "github_project": "qg_botsdk",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [],
    "lcname": "qg-botsdk"
}
        
Elapsed time: 0.17932s