pepperbot


Namepepperbot JSON
Version 0.3.7 PyPI version JSON
download
home_pagehttps://github.com/SSmJaE/PepperBot
SummaryAn intuitive multi-platform bot framework, easily forward messages among platforms, support QQ, WeChat, Telegram. 一个符合直觉的跨社交平台机器人框架,轻松地在平台间传递消息,支持QQ、微信、Telegram
upload_time2023-08-16 09:16:41
maintainer
docs_urlNone
author
requires_python>=3.8
licenseMIT
keywords telegram async asyncio bot chinese cqhttp cross-platform framework keaimao onebot pydantic pyrogram python qq type-annotations type-hint wechat
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            <h1 align="center">PepperBot</h1>

<p align="center">
<img  src="./archive/icon.png" width="200" />
</p>

<p align="center">一个符合直觉的跨社交平台机器人框架,轻松地在平台间传递消息,支持QQ、微信、Telegram</p>
<p align="center">
<a href="https://ssmjae.github.io/PepperBot/">文档</a> ·
<a href="https://jq.qq.com/?_wv=1027&k=EPhcRRib">QQ交流群</a>  
</p>

<p align="center">
<img src="./archive/coverage-badge.svg" />
<img src="https://badge.fury.io/py/pepperbot.svg" />
<img src="https://img.shields.io/badge/python-3.8+-blue.svg" />
<img src="https://static.pepy.tech/badge/pepperbot/month" />

</p>

## 生而跨平台

- QQ 基于 `Onebot`,`Mirai`(待实现)、`OPQ`(待实现)
- 微信基于`可爱猫`
- Telegram基于`Pyrogram`
- 提供了跨平台、易用的消息类型(片段)
- 通用事件,比如群消息、私聊消息等,提供了统一的接口,只需要写一次代码,就可以无缝应用到各个平台上,跨平台的消息传递从未如此轻松随意
- 可以跨群、跨平台共享指令(的状态),或者全局锁定用户(不管用户是通过群聊还是私聊)

## 性能也够用

- 底层基于异步的 Sanic 框架,目前有一定生态的 python web 框架中,[性能最好的](https://www.techempower.com/benchmarks/)
- 轻量,主要处理消息,对于其他功能,暴露底层接口,方便实现深度定制
- 几行代码,即可实现**多进程负载均衡**

## 自带全家桶

- 支持 `Django`或`starlette` 风格的集中化路由,或者`flask`或`fastAPI` 风格的装饰器式路由
- 非常灵活的权限系统,支持路由、class、method级别的权限控制
- Django 类视图风格或Vue 生命周期风格的**指令系统**
- 定时任务
- 日志支持
- 基于`ormar`的异步数据库支持(ormar基于`sqlalchemy` + `pydantic`)
- 自带插件市场,可以安装社区指令
- [ ] 提供cli工具,快速创建项目
- [ ] 类似`Selenium`的事件等待
- [ ] `fastAPI`风格的**依赖注入**

## 接口合语义

- API 符合直觉,直观,流畅地把想法映射到代码上
- 基于 python3.6 之后的类型注解,提供了完全的类型提示
- 大部分可以自动获取的参数,都会自动获取,不需要每次手动提供了
- 只会动态注入用到的参数,没必要每次写一长串用不到的参数了!
- 文档中,均有可直接复制使用的代码片段,快速开发

## 测试文档全

- 自带linter
  - 通过元编程(AST 之类)手段,对编写的各种代码进行规则检查,并输出易于理解的错误信息,将问题消灭在框架启动之前
- 文档比较全
- 测试覆盖比较全面
- 大量官方示例/指令
- 来自作者的 QA(加群以获取)

## 安装

```bash
pip install pepperbot
```

## 使用

[具体使用见文档](https://ssmjae.github.io/PepperBot/)

## 示例

六行代码实现消息互转

```py
class WhateverNameYouWant:
    async def group_message(self, bot: UniversalGroupBot, chain: MessageChain):
        if bot.onebot: # 转发qq消息至微信、TG
            await bot.arbitrary.keaimao.group_message("19521241254@chatroom", *chain.segments)
            await bot.arbitrary.telegram.group_message("bot_father", *chain.segments)

        if bot.keaimao: # 转发微信消息至qq、TG
            await bot.arbitrary.onebot.group_message("1041902989", *chain.segments)
            await bot.arbitrary.telegram.group_message("bot_father", *chain.segments)
```

只需要非常少的代码,就可以实现**跨平台**的群消息的响应

```py
@register()
class WhateverNameYouWant:

    # 注册跨平台群事件
    async def group_message(self, bot: GroupBot, chain: MessageChain, sender: Sender):
        # chain即为消息链,pure_text是消息中的纯文本,不包含表情、图片等
        if "撤回我" == chain.pure_text:
            await chain.withdraw() # 可以直接“撤回消息”,符合直觉

        if "踢出我" == chain.pure_text:
            await sender.kickout() # 可以直接踢出发言群员

        # 也可以对消息链进行in操作,相当于in chain.pure_text
        if "禁言我" in chain:
            await sender.ban(10) # 可以直接禁言发言群员

        if chain.regex("有人(在|吗|嘛|在吗).?"):
            # 发送一条群消息
            # 接受任意个参数,必须是合法的消息片段,比如Text,Face,Image
            await bot.group_message(
                Text("没人"),
                Image("http://123.jpg"),
            )
```

## 生态

[插件市场](https://ssmjae.github.io/PepperBot/market/)

### 可以记忆上下文的GPT群聊机器人

[pepperbot-ai-query](https://github.com/SSmJaE/PepperBot/tree/master/capabilities/pepperbot_gpt_example )

### 通过GPT,自动检测群聊中的广告信息

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/SSmJaE/PepperBot",
    "name": "pepperbot",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": "",
    "keywords": "Telegram async asyncio bot chinese cqhttp cross-platform framework keaimao onebot pydantic pyrogram python qq type-annotations type-hint wechat",
    "author": "",
    "author_email": "SSmJaE <ssmjae327@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/98/e2/fc7d584c4f16cf992f94a5312b1b638a794e14959054dc284b6a65f2e534/pepperbot-0.3.7.tar.gz",
    "platform": null,
    "description": "<h1 align=\"center\">PepperBot</h1>\n\n<p align=\"center\">\n<img  src=\"./archive/icon.png\" width=\"200\" />\n</p>\n\n<p align=\"center\">\u4e00\u4e2a\u7b26\u5408\u76f4\u89c9\u7684\u8de8\u793e\u4ea4\u5e73\u53f0\u673a\u5668\u4eba\u6846\u67b6\uff0c\u8f7b\u677e\u5730\u5728\u5e73\u53f0\u95f4\u4f20\u9012\u6d88\u606f\uff0c\u652f\u6301QQ\u3001\u5fae\u4fe1\u3001Telegram</p>\n<p align=\"center\">\n<a href=\"https://ssmjae.github.io/PepperBot/\">\u6587\u6863</a> \u00b7\n<a href=\"https://jq.qq.com/?_wv=1027&k=EPhcRRib\">QQ\u4ea4\u6d41\u7fa4</a>  \n</p>\n\n<p align=\"center\">\n<img src=\"./archive/coverage-badge.svg\" />\n<img src=\"https://badge.fury.io/py/pepperbot.svg\" />\n<img src=\"https://img.shields.io/badge/python-3.8+-blue.svg\" />\n<img src=\"https://static.pepy.tech/badge/pepperbot/month\" />\n\n</p>\n\n## \u751f\u800c\u8de8\u5e73\u53f0\n\n- QQ \u57fa\u4e8e `Onebot`\uff0c`Mirai`(\u5f85\u5b9e\u73b0)\u3001`OPQ`(\u5f85\u5b9e\u73b0)\n- \u5fae\u4fe1\u57fa\u4e8e`\u53ef\u7231\u732b`\n- Telegram\u57fa\u4e8e`Pyrogram`\n- \u63d0\u4f9b\u4e86\u8de8\u5e73\u53f0\u3001\u6613\u7528\u7684\u6d88\u606f\u7c7b\u578b(\u7247\u6bb5)\n- \u901a\u7528\u4e8b\u4ef6\uff0c\u6bd4\u5982\u7fa4\u6d88\u606f\u3001\u79c1\u804a\u6d88\u606f\u7b49\uff0c\u63d0\u4f9b\u4e86\u7edf\u4e00\u7684\u63a5\u53e3\uff0c\u53ea\u9700\u8981\u5199\u4e00\u6b21\u4ee3\u7801\uff0c\u5c31\u53ef\u4ee5\u65e0\u7f1d\u5e94\u7528\u5230\u5404\u4e2a\u5e73\u53f0\u4e0a\uff0c\u8de8\u5e73\u53f0\u7684\u6d88\u606f\u4f20\u9012\u4ece\u672a\u5982\u6b64\u8f7b\u677e\u968f\u610f\n- \u53ef\u4ee5\u8de8\u7fa4\u3001\u8de8\u5e73\u53f0\u5171\u4eab\u6307\u4ee4(\u7684\u72b6\u6001)\uff0c\u6216\u8005\u5168\u5c40\u9501\u5b9a\u7528\u6237(\u4e0d\u7ba1\u7528\u6237\u662f\u901a\u8fc7\u7fa4\u804a\u8fd8\u662f\u79c1\u804a)\n\n## \u6027\u80fd\u4e5f\u591f\u7528\n\n- \u5e95\u5c42\u57fa\u4e8e\u5f02\u6b65\u7684 Sanic \u6846\u67b6\uff0c\u76ee\u524d\u6709\u4e00\u5b9a\u751f\u6001\u7684 python web \u6846\u67b6\u4e2d\uff0c[\u6027\u80fd\u6700\u597d\u7684](https://www.techempower.com/benchmarks/)\n- \u8f7b\u91cf\uff0c\u4e3b\u8981\u5904\u7406\u6d88\u606f\uff0c\u5bf9\u4e8e\u5176\u4ed6\u529f\u80fd\uff0c\u66b4\u9732\u5e95\u5c42\u63a5\u53e3\uff0c\u65b9\u4fbf\u5b9e\u73b0\u6df1\u5ea6\u5b9a\u5236\n- \u51e0\u884c\u4ee3\u7801\uff0c\u5373\u53ef\u5b9e\u73b0**\u591a\u8fdb\u7a0b\u8d1f\u8f7d\u5747\u8861**\n\n## \u81ea\u5e26\u5168\u5bb6\u6876\n\n- \u652f\u6301 `Django`\u6216`starlette` \u98ce\u683c\u7684\u96c6\u4e2d\u5316\u8def\u7531\uff0c\u6216\u8005`flask`\u6216`fastAPI` \u98ce\u683c\u7684\u88c5\u9970\u5668\u5f0f\u8def\u7531\n- \u975e\u5e38\u7075\u6d3b\u7684\u6743\u9650\u7cfb\u7edf\uff0c\u652f\u6301\u8def\u7531\u3001class\u3001method\u7ea7\u522b\u7684\u6743\u9650\u63a7\u5236\n- Django \u7c7b\u89c6\u56fe\u98ce\u683c\u6216Vue \u751f\u547d\u5468\u671f\u98ce\u683c\u7684**\u6307\u4ee4\u7cfb\u7edf**\n- \u5b9a\u65f6\u4efb\u52a1\n- \u65e5\u5fd7\u652f\u6301\n- \u57fa\u4e8e`ormar`\u7684\u5f02\u6b65\u6570\u636e\u5e93\u652f\u6301(ormar\u57fa\u4e8e`sqlalchemy` + `pydantic`)\n- \u81ea\u5e26\u63d2\u4ef6\u5e02\u573a\uff0c\u53ef\u4ee5\u5b89\u88c5\u793e\u533a\u6307\u4ee4\n- [ ] \u63d0\u4f9bcli\u5de5\u5177\uff0c\u5feb\u901f\u521b\u5efa\u9879\u76ee\n- [ ] \u7c7b\u4f3c`Selenium`\u7684\u4e8b\u4ef6\u7b49\u5f85\n- [ ] `fastAPI`\u98ce\u683c\u7684**\u4f9d\u8d56\u6ce8\u5165**\n\n## \u63a5\u53e3\u5408\u8bed\u4e49\n\n- API \u7b26\u5408\u76f4\u89c9\uff0c\u76f4\u89c2\uff0c\u6d41\u7545\u5730\u628a\u60f3\u6cd5\u6620\u5c04\u5230\u4ee3\u7801\u4e0a\n- \u57fa\u4e8e python3.6 \u4e4b\u540e\u7684\u7c7b\u578b\u6ce8\u89e3\uff0c\u63d0\u4f9b\u4e86\u5b8c\u5168\u7684\u7c7b\u578b\u63d0\u793a\n- \u5927\u90e8\u5206\u53ef\u4ee5\u81ea\u52a8\u83b7\u53d6\u7684\u53c2\u6570\uff0c\u90fd\u4f1a\u81ea\u52a8\u83b7\u53d6\uff0c\u4e0d\u9700\u8981\u6bcf\u6b21\u624b\u52a8\u63d0\u4f9b\u4e86\n- \u53ea\u4f1a\u52a8\u6001\u6ce8\u5165\u7528\u5230\u7684\u53c2\u6570\uff0c\u6ca1\u5fc5\u8981\u6bcf\u6b21\u5199\u4e00\u957f\u4e32\u7528\u4e0d\u5230\u7684\u53c2\u6570\u4e86\uff01\n- \u6587\u6863\u4e2d\uff0c\u5747\u6709\u53ef\u76f4\u63a5\u590d\u5236\u4f7f\u7528\u7684\u4ee3\u7801\u7247\u6bb5\uff0c\u5feb\u901f\u5f00\u53d1\n\n## \u6d4b\u8bd5\u6587\u6863\u5168\n\n- \u81ea\u5e26linter\n  - \u901a\u8fc7\u5143\u7f16\u7a0b(AST \u4e4b\u7c7b)\u624b\u6bb5\uff0c\u5bf9\u7f16\u5199\u7684\u5404\u79cd\u4ee3\u7801\u8fdb\u884c\u89c4\u5219\u68c0\u67e5\uff0c\u5e76\u8f93\u51fa\u6613\u4e8e\u7406\u89e3\u7684\u9519\u8bef\u4fe1\u606f\uff0c\u5c06\u95ee\u9898\u6d88\u706d\u5728\u6846\u67b6\u542f\u52a8\u4e4b\u524d\n- \u6587\u6863\u6bd4\u8f83\u5168\n- \u6d4b\u8bd5\u8986\u76d6\u6bd4\u8f83\u5168\u9762\n- \u5927\u91cf\u5b98\u65b9\u793a\u4f8b/\u6307\u4ee4\n- \u6765\u81ea\u4f5c\u8005\u7684 QA(\u52a0\u7fa4\u4ee5\u83b7\u53d6)\n\n## \u5b89\u88c5\n\n```bash\npip install pepperbot\n```\n\n## \u4f7f\u7528\n\n[\u5177\u4f53\u4f7f\u7528\u89c1\u6587\u6863](https://ssmjae.github.io/PepperBot/)\n\n## \u793a\u4f8b\n\n\u516d\u884c\u4ee3\u7801\u5b9e\u73b0\u6d88\u606f\u4e92\u8f6c\n\n```py\nclass WhateverNameYouWant:\n    async def group_message(self, bot: UniversalGroupBot, chain: MessageChain):\n        if bot.onebot: # \u8f6c\u53d1qq\u6d88\u606f\u81f3\u5fae\u4fe1\u3001TG\n            await bot.arbitrary.keaimao.group_message(\"19521241254@chatroom\", *chain.segments)\n            await bot.arbitrary.telegram.group_message(\"bot_father\", *chain.segments)\n\n        if bot.keaimao: # \u8f6c\u53d1\u5fae\u4fe1\u6d88\u606f\u81f3qq\u3001TG\n            await bot.arbitrary.onebot.group_message(\"1041902989\", *chain.segments)\n            await bot.arbitrary.telegram.group_message(\"bot_father\", *chain.segments)\n```\n\n\u53ea\u9700\u8981\u975e\u5e38\u5c11\u7684\u4ee3\u7801\uff0c\u5c31\u53ef\u4ee5\u5b9e\u73b0**\u8de8\u5e73\u53f0**\u7684\u7fa4\u6d88\u606f\u7684\u54cd\u5e94\n\n```py\n@register()\nclass WhateverNameYouWant:\n\n    # \u6ce8\u518c\u8de8\u5e73\u53f0\u7fa4\u4e8b\u4ef6\n    async def group_message(self, bot: GroupBot, chain: MessageChain, sender: Sender):\n        # chain\u5373\u4e3a\u6d88\u606f\u94fe\uff0cpure_text\u662f\u6d88\u606f\u4e2d\u7684\u7eaf\u6587\u672c\uff0c\u4e0d\u5305\u542b\u8868\u60c5\u3001\u56fe\u7247\u7b49\n        if \"\u64a4\u56de\u6211\" == chain.pure_text:\n            await chain.withdraw() # \u53ef\u4ee5\u76f4\u63a5\u201c\u64a4\u56de\u6d88\u606f\u201d\uff0c\u7b26\u5408\u76f4\u89c9\n\n        if \"\u8e22\u51fa\u6211\" == chain.pure_text:\n            await sender.kickout() # \u53ef\u4ee5\u76f4\u63a5\u8e22\u51fa\u53d1\u8a00\u7fa4\u5458\n\n        # \u4e5f\u53ef\u4ee5\u5bf9\u6d88\u606f\u94fe\u8fdb\u884cin\u64cd\u4f5c\uff0c\u76f8\u5f53\u4e8ein chain.pure_text\n        if \"\u7981\u8a00\u6211\" in chain:\n            await sender.ban(10) # \u53ef\u4ee5\u76f4\u63a5\u7981\u8a00\u53d1\u8a00\u7fa4\u5458\n\n        if chain.regex(\"\u6709\u4eba(\u5728|\u5417|\u561b|\u5728\u5417).?\"):\n            # \u53d1\u9001\u4e00\u6761\u7fa4\u6d88\u606f\n            # \u63a5\u53d7\u4efb\u610f\u4e2a\u53c2\u6570\uff0c\u5fc5\u987b\u662f\u5408\u6cd5\u7684\u6d88\u606f\u7247\u6bb5\uff0c\u6bd4\u5982Text\uff0cFace\uff0cImage\n            await bot.group_message(\n                Text(\"\u6ca1\u4eba\"),\n                Image(\"http://123.jpg\"),\n            )\n```\n\n## \u751f\u6001\n\n[\u63d2\u4ef6\u5e02\u573a](https://ssmjae.github.io/PepperBot/market/)\n\n### \u53ef\u4ee5\u8bb0\u5fc6\u4e0a\u4e0b\u6587\u7684GPT\u7fa4\u804a\u673a\u5668\u4eba\n\n[pepperbot-ai-query](https://github.com/SSmJaE/PepperBot/tree/master/capabilities/pepperbot_gpt_example )\n\n### \u901a\u8fc7GPT\uff0c\u81ea\u52a8\u68c0\u6d4b\u7fa4\u804a\u4e2d\u7684\u5e7f\u544a\u4fe1\u606f\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "An intuitive multi-platform bot framework, easily forward messages among platforms, support QQ, WeChat, Telegram. \u4e00\u4e2a\u7b26\u5408\u76f4\u89c9\u7684\u8de8\u793e\u4ea4\u5e73\u53f0\u673a\u5668\u4eba\u6846\u67b6\uff0c\u8f7b\u677e\u5730\u5728\u5e73\u53f0\u95f4\u4f20\u9012\u6d88\u606f\uff0c\u652f\u6301QQ\u3001\u5fae\u4fe1\u3001Telegram",
    "version": "0.3.7",
    "project_urls": {
        "Documentation": "https://SSmJaE.github.io/PepperBot",
        "Homepage": "https://github.com/SSmJaE/PepperBot",
        "Repository": "https://github.com/SSmJaE/PepperBot"
    },
    "split_keywords": [
        "telegram",
        "async",
        "asyncio",
        "bot",
        "chinese",
        "cqhttp",
        "cross-platform",
        "framework",
        "keaimao",
        "onebot",
        "pydantic",
        "pyrogram",
        "python",
        "qq",
        "type-annotations",
        "type-hint",
        "wechat"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "649e7ddde2705f5288f93501faa75adec68554d88414acd40fbad683871cbf20",
                "md5": "62ce7bc9f139d353cd39437bf20cc197",
                "sha256": "796f7264cfb7ab8dc9b5e440ee7574edb2dda58a11f6271a0bf0907dd35c570e"
            },
            "downloads": -1,
            "filename": "pepperbot-0.3.7-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "62ce7bc9f139d353cd39437bf20cc197",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 109898,
            "upload_time": "2023-08-16T09:16:39",
            "upload_time_iso_8601": "2023-08-16T09:16:39.660685Z",
            "url": "https://files.pythonhosted.org/packages/64/9e/7ddde2705f5288f93501faa75adec68554d88414acd40fbad683871cbf20/pepperbot-0.3.7-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "98e2fc7d584c4f16cf992f94a5312b1b638a794e14959054dc284b6a65f2e534",
                "md5": "615d31bc2a5c1f0a09c711f81482a8b8",
                "sha256": "b9f96bd3ec00e4fe80e317793a820b2e9c798ac778c1df94bb0a03600c2ee880"
            },
            "downloads": -1,
            "filename": "pepperbot-0.3.7.tar.gz",
            "has_sig": false,
            "md5_digest": "615d31bc2a5c1f0a09c711f81482a8b8",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 98366,
            "upload_time": "2023-08-16T09:16:41",
            "upload_time_iso_8601": "2023-08-16T09:16:41.165077Z",
            "url": "https://files.pythonhosted.org/packages/98/e2/fc7d584c4f16cf992f94a5312b1b638a794e14959054dc284b6a65f2e534/pepperbot-0.3.7.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-08-16 09:16:41",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "SSmJaE",
    "github_project": "PepperBot",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "pepperbot"
}
        
Elapsed time: 0.20889s