{"id":18747760,"url":"https://github.com/lhlyu/cqbot","last_synced_at":"2025-11-24T20:30:16.091Z","repository":{"id":65924672,"uuid":"602577102","full_name":"lhlyu/cqbot","owner":"lhlyu","description":"go-cqhttp python 框架，可以用于快速塔建 bot","archived":false,"fork":false,"pushed_at":"2023-04-17T23:41:32.000Z","size":50,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-08T09:17:04.013Z","etag":null,"topics":["bot","go-cqhttp","python","qqbot"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lhlyu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-02-16T14:04:10.000Z","updated_at":"2023-02-22T12:51:08.000Z","dependencies_parsed_at":null,"dependency_job_id":"a7b07781-c043-4d1e-8e76-9c016087cb21","html_url":"https://github.com/lhlyu/cqbot","commit_stats":{"total_commits":7,"total_committers":2,"mean_commits":3.5,"dds":0.1428571428571429,"last_synced_commit":"15397619f0e217728163de97e487886ffec1924b"},"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lhlyu%2Fcqbot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lhlyu%2Fcqbot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lhlyu%2Fcqbot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lhlyu%2Fcqbot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lhlyu","download_url":"https://codeload.github.com/lhlyu/cqbot/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239634824,"owners_count":19672185,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bot","go-cqhttp","python","qqbot"],"created_at":"2024-11-07T16:31:19.135Z","updated_at":"2025-11-24T20:30:15.972Z","avatar_url":"https://github.com/lhlyu.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Cqbot\n\ngo-cqhttp python 框架，可以用于快速塔建 bot\n\n## 安装\n\n```shell\npip install cqbot\n```\n\n## 使用\n\n可以从[examples](examples)文件夹下拷贝所需的文件\n\ngo-cqhttp需要去[releases](https://github.com/Mrs4s/go-cqhttp/releases)下载最新的文件\n\n- 下面是我的目录结构，仅供参考\n\n```\n├── mybot - 项目目录\n│   ├── bot.py - 机器人逻辑文件\n│   ├── config.yml - go-cqhttp配置文件，根据自己的要求修改\n│   ├── go-cqhttp - go-cqhttp执行文件，window下是exe结尾的文件， 如果使用docker构建不需要这个文件\n│   ├── Dockerfile - 构建镜像的文件\n│   ├── run.sh - 脚本构建镜像并创建容器运行\n```\n\n- [config.yml配置](https://docs.go-cqhttp.org/guide/config.html#%E9%85%8D%E7%BD%AE%E4%BF%A1%E6%81%AF)\n- [支持的事件](https://docs.go-cqhttp.org/event)\n- [支持的API](https://docs.go-cqhttp.org/api)\n- [支持的CQ码](https://docs.go-cqhttp.org/cqcode)\n\n## [例子](./examples)\n\n### 第一种方式\n\n```python\n# pip install cqbot\nimport json\nfrom typing import List, Any\n\n# pip install addict\nfrom addict import Dict\n\n# pip install cqbot\nfrom cqbot import *\n\n\ndef to_json(obj: object):\n    return json.dumps(obj.__dict__, default=lambda o: o.__dict__, ensure_ascii=False)\n\n\non = True\n\n\ndef cmd_enable(act: Action, msg: EventMessage, args: List[Any]) -\u003e bool:\n    global on\n    on = True\n    act.send_group_msg(msg.group_id, \"已启动！\")\n    return True\n\n\ndef cmd_stop(act: Action, msg: EventMessage, args: List[Any]) -\u003e bool:\n    global on\n    on = False\n    act.send_group_msg(msg.group_id, \"已停止！\")\n    return True\n\n\ndef cmd_test(act: Action, msg: EventMessage, args: List[Any]) -\u003e bool:\n    if len(args) == 0:\n        # 当没有参数的时候打印帮助\n        act.send_group_msg(msg.group_id, cmd.help())\n        return\n    # 将参数原样发回\n    act.send_group_msg(msg.group_id, ' '.join(args))\n    return True\n\n\n# 设置指令\ncmd = Cmd()\ncmd.add('#启动', '启动程序', cmd_enable)\ncmd.add('#停止', '停止程序', cmd_stop)\ncmd.add('#测试', '#测试 你的内容', cmd_test)\n\n\ndef on_message_group(act: Action, msg: EventMessage):\n    # 打印消息体\n    print('on_message_group:', to_json(msg))\n    # 如果是官方机器人则不处理\n    if msg.is_office_bot():\n        return\n    # 执行指令\n    if cmd.run(act, msg):\n        return\n    # 判断当前的消息是否at了机器人\n    if msg.is_at():\n        # 回复这条消息\n        message = f'{CQ.at(msg.user_id)} 好的{CQ.face(124)}'\n        act.send_group_msg(msg.group_id, message)\n        # 再发送一条文字转语音\n        message = f'{CQ.tts(\"人类的赞歌是勇气的赞歌，人类的伟大是勇气的伟大。\")}'\n        act.send_group_msg(msg.group_id, message)\n        return\n\n\ndef on_notice_group_recall(act: Action, msg: EventNotice):\n    # 如果是撤回机器人的消息则不处理\n    if msg.self_id == msg.user_id:\n        return\n    print('on_notice_group_recall:', to_json(msg))\n    # 获取被撤回的消息\n    recall_msg = act.get_msg(msg.message_id)\n    if recall_msg is None:\n        return\n    m = Dict(recall_msg)\n    # 将撤回的消息重新发回群里\n    message = f'{CQ.at(m.data.sender.user_id)}撤回了一条消息: {m.data.message}'\n    act.send_group_msg(msg.group_id, message)\n\n\nif __name__ == '__main__':\n    bot = Bot()\n    # 处理群消息\n    bot.on_message_group = on_message_group\n    # 处理群消息撤回\n    bot.on_notice_group_recall = on_notice_group_recall\n    bot.run()\n```\n\n### 第二种方式\n\n```python\nimport json\nfrom typing import List, Any\n\n# pip install addict\nfrom addict import Dict\n\n# pip install cqbot\nfrom cqbot import *\n\n\ndef to_json(obj: object):\n    return json.dumps(obj.__dict__, default=lambda o: o.__dict__, ensure_ascii=False)\n\n\non = True\n\n\ndef cmd_enable(act: Action, msg: EventMessage, args: List[Any]) -\u003e bool:\n    global on\n    on = True\n    act.send_group_msg(msg.group_id, \"已启动！\")\n    return True\n\n\ndef cmd_stop(act: Action, msg: EventMessage, args: List[Any]) -\u003e bool:\n    global on\n    on = False\n    act.send_group_msg(msg.group_id, \"已停止！\")\n    return True\n\n\ndef cmd_test(act: Action, msg: EventMessage, args: List[Any]) -\u003e bool:\n    if len(args) == 0:\n        # 当没有参数的时候打印帮助\n        act.send_group_msg(msg.group_id, cmd.help())\n        return\n    # 将参数原样发回\n    act.send_group_msg(msg.group_id, ' '.join(args))\n    return True\n\n\n# 设置指令\ncmd = Cmd()\ncmd.add('#启动', '启动程序', cmd_enable)\ncmd.add('#停止', '停止程序', cmd_stop)\ncmd.add('#测试', '#测试 你的内容', cmd_test)\n\n\n# 自定义一个Bot,继承Bot,重写需要处理的事件\nclass MyBot(Bot):\n\n    # 群消息处理\n    def on_message_group(self, act: Action, msg: EventMessage):\n        # 打印消息体\n        print('on_message_group:', to_json(msg))\n        # 如果是官方机器人则不处理\n        if msg.is_office_bot():\n            return\n        # 执行指令\n        if cmd.run(act, msg):\n            return\n        # 判断当前的消息是否at了机器人\n        if msg.is_at():\n            # 回复这条消息\n            message = f'{CQ.at(msg.user_id)} 好的{CQ.face(124)}'\n            act.send_group_msg(msg.group_id, message)\n            # 再发送一条文字转语音\n            message = f'{CQ.tts(\"人类的赞歌是勇气的赞歌，人类的伟大是勇气的伟大。\")}'\n            act.send_group_msg(msg.group_id, message)\n            return\n\n    # 群消息撤回处理\n    def on_notice_group_recall(self, act: Action, msg: EventNotice):\n        # 如果是撤回机器人的消息则不处理\n        if msg.self_id == msg.user_id:\n            return\n        print('on_notice_group_recall:', to_json(msg))\n        # 获取被撤回的消息\n        recall_msg = act.get_msg(msg.message_id)\n        if recall_msg is None:\n            return\n        m = Dict(recall_msg)\n        # 将撤回的消息重新发回群里\n        message = f'{CQ.at(m.data.sender.user_id)}撤回了一条消息: {m.data.message}'\n        act.send_group_msg(msg.group_id, message)\n\n\nif __name__ == '__main__':\n    bot = MyBot()\n    bot.run()\n```\n\n### 直接使用Api\n\n当`go-cqhttp`启动后可以直接使用`Action`方法\n\n```python\n# pip install cqbot\nfrom cqbot import *\n\n\nif __name__ == '__main__':\n    # 连接go-cqhttp暴露的http\n    act = Action('http://0.0.0.0:8000')\n    # 直接指定群号发送消息\n    act.send_group_msg(123, f'你好{CQ.face(78)}')\n```\n\n### CQ码使用\n\n```python\n# pip install cqbot\nfrom cqbot import *\n\nif __name__ == '__main__':\n    # 输出: [CQ:at,qq=12313]\n    print(CQ.at(12313))\n    # 输出: [CQ:face,id=12]\n    print(CQ.face(12))\n    \n```\n\n### 指令使用\n\n```python\nfrom typing import List, Any\nfrom cqbot import *\n\ndef cmd_test(act: Action, msg: EventMessage, args: List[Any]) -\u003e bool:\n    if len(args) == 0:\n        act.send_group_msg(msg.group_id, cmd.help())\n        return\n    act.send_group_msg(msg.group_id, ' '.join(args))\n    return True\n\n\n# 设置指令\ncmd = Cmd()\ncmd.add('#测试1', '#测试 你的内容', cmd_test)\ncmd.add('#测试2', '#测试 你的内容', cmd_test)\n\n\n# 监听群消息\ndef on_message_group(act: Action, msg: EventMessage):\n    # 执行指令\n    cmd.run(act, msg)\n```\n\n## 一些问题\n\n- 在服务器上部署后不好登录，或则提示账号设备不安全\n\n\u003e 可以在本地登录好，将 `session.token` `device.json` 一同上传到服务器，免去了登录的烦恼","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flhlyu%2Fcqbot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flhlyu%2Fcqbot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flhlyu%2Fcqbot/lists"}