{"id":23020298,"url":"https://github.com/kokkorojs/kokkoro","last_synced_at":"2025-10-10T00:31:57.262Z","repository":{"id":37400897,"uuid":"434615280","full_name":"kokkorojs/kokkoro","owner":"kokkorojs","description":"とある咕咕の QQ 机器人框架 (OxO)?!...","archived":false,"fork":false,"pushed_at":"2024-07-27T16:03:18.000Z","size":1148,"stargazers_count":60,"open_issues_count":0,"forks_count":11,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-09-23T22:39:25.594Z","etag":null,"topics":["bot","priconne","qq","qqbot"],"latest_commit_sha":null,"homepage":"https://kokkoro.js.org","language":"TypeScript","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/kokkorojs.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":"2021-12-03T13:58:51.000Z","updated_at":"2025-01-17T16:07:16.000Z","dependencies_parsed_at":"2023-01-31T22:01:37.048Z","dependency_job_id":"eb4663dc-f45f-44b3-9eb9-b834c10a3629","html_url":"https://github.com/kokkorojs/kokkoro","commit_stats":{"total_commits":321,"total_committers":3,"mean_commits":107.0,"dds":"0.012461059190031154","last_synced_commit":"aecb3a2ac588763421c4b0c392b93dbc7ee08ce3"},"previous_names":[],"tags_count":61,"template":false,"template_full_name":null,"purl":"pkg:github/kokkorojs/kokkoro","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kokkorojs%2Fkokkoro","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kokkorojs%2Fkokkoro/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kokkorojs%2Fkokkoro/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kokkorojs%2Fkokkoro/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kokkorojs","download_url":"https://codeload.github.com/kokkorojs/kokkoro/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kokkorojs%2Fkokkoro/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279002358,"owners_count":26083356,"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","status":"online","status_checked_at":"2025-10-09T02:00:07.460Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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","priconne","qq","qqbot"],"created_at":"2024-12-15T12:13:41.086Z","updated_at":"2025-10-10T00:31:56.596Z","avatar_url":"https://github.com/kokkorojs.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n    \u003ca href=\"https://kokkoro.js.org\"\u003e\n      \u003cimg src=\"https://kokkoro.js.org/logo.png\" width=\"200\" alt=\"pixiv: 104321865\" /\u003e\n    \u003c/a\u003e\n    \u003ch3\u003eKokkoro\u003c/h3\u003e\n    \u003csmall\u003e \u0026gt; とある咕咕の QQ 机器人框架 \u0026lt; \u003c/small\u003e\n\u003c/div\u003e\n\n---\n\n[![priconne](https://img.shields.io/badge/%E3%83%97%E3%83%AA%E3%83%B3%E3%82%BB%E3%82%B9%E3%82%B3%E3%83%8D%E3%82%AF%E3%83%88-Re%3ADive-F55291?style=flat-square\u0026labelColor=FAFAFA\u0026logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAABGdBTUEAALGPC%2FxhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABSlBMVEX%2F%2F%2F%2F1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH1UpH%2F%2F%2F%2BQAc1iAAAAbHRSTlMAAAtOkbLJzLeYWxYQjev3oyLq%2BnqLtImwT4QF%2BKlKQ44rirqMyAF0KSFGeJKAoUEg8LOivbE1gxMEb1OP1cE9FREGGOPCNxQS5JwcB2x52JedhlItmYLAdSytDDMuZaXLxZaq%2Fj4fcKvZzX%2BVYCqxAAAAAWJLR0QAiAUdSAAAAAd0SU1FB%2BUHAgwRA1G%2Bv8QAAAFESURBVDjLY2CgC2CEAiZmFlY2dg5OLm6YCIoCHl6%2BHCjgFxDEVMAllIMEhEXQFYjmoAExVAXiORhAAlmBZA4WIIVQIC0DE5SVk1eAq1CEK1CCCSmDLFaB8VRhCtSEYULqIAUacCM0oQq04CKsIAXaCFdAFehAuBy6ejL6jIwGhka6xhARE6gCU7i3zMwtLK2sgQwbsJAtVIEdmGcPDjsHRycQ5QwWcoEqcAXz3MAKHN3BlAdYyBOqQAzM8wKKe2s7%2BPiCVPqBhfyhCgIgTgq0DuILZmQMEQq1DoOIhEMVMMP95QoyHh5sObxQBT5wkQiQgkg4NwQW1IEwkSiUgPKHx0U0XE9gTKwunOOGiO44bNHthZxg4jHlE1CTXCC6fKITWqKNQJVPwkz2GskpiPBIxZIvGBnT0jNUMzOzJLIV0TIOjQEAe%2FGzgoDvmDIAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjEtMDctMDJUMTI6MTc6MDMrMDM6MDArdontAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIxLTA3LTAyVDEyOjE3OjAzKzAzOjAwWisxUQAAAABJRU5ErkJggg%3D%3D)](https://priconne-redive.jp/)\n[![group](https://img.shields.io/badge/group-1030982964-12B7F5?style=flat-square\u0026labelColor=FAFAFA\u0026logo=data:image/png;base64,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\u0026logoColor=000000)](https://jq.qq.com/?_wv=1027\u0026k=3hcWCnhq)\n[![package](https://img.shields.io/npm/v/kokkoro?color=57B497\u0026label=kokkoro\u0026style=flat-square\u0026labelColor=FAFAFA\u0026logo=npm)](https://www.npmjs.com/package/kokkoro)\n[![engine](https://img.shields.io/node/v/kokkoro?color=339933\u0026style=flat-square\u0026labelColor=FAFAFA\u0026logo=Node.js)](https://nodejs.org)\n![downloads](https://img.shields.io/npm/dt/kokkoro?style=flat-square\u0026logo=tinder\u0026logoColor=FF8C00\u0026labelColor=FAFAFA)\n\n## 介绍\n\n本项目是一个基于 [Amesu](https://github.com/xueelf/amesu) SDK，使用 [TypeScript](https://www.typescriptlang.org/) 语言开发的 [QQ](https://im.qq.com/) 机器人框架。\n\n## 使用\n\n你可以使用 CLI 来快速构建项目：\n\n```shell\nnpm i -g @kokkoro/cli\nkokkoro init\n```\n\n```shell\n✔ Please enter the project name: … \u003cyour-project-name\u003e\n✔ Your robot appid: … \u003cappid\u003e\n✔ Your robot token … \u003ctoken\u003e\n✔ Your robot secret … \u003csecret\u003e\n✔ Is it a public domain robot? … No / Yes\n\nSUCCESS Project initialization completed.\n```\n\n### 目录结构\n\n```tex\n.\n├─ data               项目资源\n├─ logs               日志列表\n├─ plugins            插件目录\n├─ index.js           程序入口\n└─ kokkoro.json       配置文件\n```\n\n安装好依赖文件后，使用 `kokkoro start` 启动项目。\n\n### 配置项\n\n```json\n{\n  // web 服务\n  \"server\": {\n    // 端口号\n    \"port\": 2333,\n    // 域名\n    \"domain\": \"http://localhost\"\n  },\n  // 日志等级\n  \"log_level\": \"INFO\",\n  // 订阅事件\n  \"events\": [],\n  // bot 信息，可添加多个\n  \"bots\": [\n    {\n      \"appid\": \"1145141919\",\n      \"token\": \"38bc73e16208135fb111c0c573a44eaa\",\n      \"secret\": \"6208135fb111c0c5\"\n    }\n  ]\n}\n```\n\n若要开发插件，可以在**项目根目录**使用下列命令：\n\n```shell\nkokkoro plugin \u003cname\u003e\n```\n\n```shell\n✔ Which plugin style would you like to use:\n\u003e   Javascript\n    Typescript (Hook)\n    Typescript (Decorator)\n\nINFO Plugin creation has been aborted.\n```\n\n### 插件\n\n#### Javascript (Hook)\n\n```javascript\nimport { useCommand, useEvent } from '@kokkoro/core';\n\n/**\n * @type {import('@kokkoro/core').Metadata}\n */\nexport const metadata = {\n  name: 'example',\n  description: '插件示例',\n};\n\nexport default function Example() {\n  useEvent(\n    ctx =\u003e {\n      ctx.logger.mark('link start');\n    },\n    ['session.ready'],\n  );\n\n  useCommand('/测试', () =\u003e 'hello world');\n  useCommand('/复读 \u003cmessage\u003e', ctx =\u003e ctx.query.message);\n}\n```\n\n#### Typescript (Hook)\n\n```typescript\nimport { Metadata, useCommand, useEvent } from '@kokkoro/core';\n\nexport const metadata: Metadata = {\n  name: 'example',\n  description: '示例插件',\n};\n\nexport default function Example() {\n  useEvent(\n    ctx =\u003e {\n      ctx.logger.mark('link start');\n    },\n    ['session.ready'],\n  );\n\n  useCommand('/测试', () =\u003e 'hello world');\n  useCommand\u003c{ message: string }\u003e('/复读 \u003cmessage\u003e', ctx =\u003e ctx.query.message);\n}\n```\n\n#### Typescript (Decorator)\n\n```typescript\nimport { Command, CommandContext, Context, Event, Plugin } from '@kokkoro/core';\n\n@Plugin({\n  name: 'example',\n  description: '示例插件',\n})\nexport default class Example {\n  @Event('session.ready')\n  onReady(ctx: Context\u003c'session.ready'\u003e) {\n    ctx.logger.mark('link start');\n  }\n\n  @Command('/测试')\n  testMessage() {\n    return 'hello world';\n  }\n\n  @Command('/复读 \u003cmessage\u003e')\n  replayMessage(ctx: CommandContext\u003c{ message: string }\u003e) {\n    return ctx.query.message;\n  }\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkokkorojs%2Fkokkoro","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkokkorojs%2Fkokkoro","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkokkorojs%2Fkokkoro/lists"}