{"id":15509644,"url":"https://github.com/willin/wechaty-authing-poc","last_synced_at":"2025-06-11T05:35:23.236Z","repository":{"id":147137076,"uuid":"448764887","full_name":"willin/wechaty-authing-poc","owner":"willin","description":"微信作为 Authing 上、下游用户源的 POC 项目","archived":false,"fork":false,"pushed_at":"2022-01-21T05:40:58.000Z","size":226,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":7,"default_branch":"main","last_synced_at":"2024-10-29T22:37:32.577Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/willin.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}},"created_at":"2022-01-17T05:28:42.000Z","updated_at":"2023-11-24T18:53:32.000Z","dependencies_parsed_at":null,"dependency_job_id":"ea92f3b2-d3da-4c97-9c50-14e845ce13ef","html_url":"https://github.com/willin/wechaty-authing-poc","commit_stats":{"total_commits":8,"total_committers":1,"mean_commits":8.0,"dds":0.0,"last_synced_commit":"278be946970b3f3ffacbd46cd49e1e3c48f7ba67"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/willin%2Fwechaty-authing-poc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/willin%2Fwechaty-authing-poc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/willin%2Fwechaty-authing-poc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/willin%2Fwechaty-authing-poc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/willin","download_url":"https://codeload.github.com/willin/wechaty-authing-poc/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243013031,"owners_count":20221658,"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":[],"created_at":"2024-10-02T09:43:24.908Z","updated_at":"2025-03-11T14:27:19.955Z","avatar_url":"https://github.com/willin.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Wechaty Authing 集成 POC\n\n- [Wechaty Authing 集成 POC](#wechaty-authing-集成-poc)\n  - [CONTRIBUTING](#contributing)\n  - [插件扩展开发示例](#插件扩展开发示例)\n    - [Wechaty Plugin](#wechaty-plugin)\n    - [Extends with Authing API](#extends-with-authing-api)\n    - [使用](#使用)\n  - [以微信群作为上游数据源](#以微信群作为上游数据源)\n    - [管理员邀请用户加入群组（人为操作）](#管理员邀请用户加入群组人为操作)\n    - [管理员踢出群聊用户（人为操作）](#管理员踢出群聊用户人为操作)\n    - [用户 @Bot 提及消息](#用户-bot-提及消息)\n  - [以 Authing 作为上游数据源](#以-authing-作为上游数据源)\n\n## CONTRIBUTING\n\nFork this repo.\n\nSet env:\n\n```bash\nexport AUTHING_USER_POOL_ID=\"xxx\"\nexport AUTHING_USER_POOL_SECRET=\"xxx\"\nexport WECHATY_PADLOCAL_TOKEN=\"xxx\"\nexport WECHATY_ROOM_ID=\"19115444039@chatroom\"\n```\n\n## 插件扩展开发示例\n\n```bash\nnpm run start:plugin\n```\n\n本地开发：\n\n```bash\n# 导入类型\nyarn add --dev authing-js-sdk\n```\n\n### Wechaty Plugin\n\n```ts\nclass ExtendedWechatyAuthing extends WechatyAuthing {\n  plugin(): WechatyPlugin {\n    return (bot: Wechaty): void =\u003e {\n      bot.on('ready', async () =\u003e {\n        const { totalCount } = await this.client.users.list();\n        log.info('total users', totalCount);\n      });\n    };\n  }\n}\n```\n\n### Extends with Authing API\n\n```ts\nclass ExtendedWechatyAuthing extends WechatyAuthing {\n  async totalUsers(): Promise\u003cnumber\u003e {\n    const { totalCount } = await this.client.users.list();\n    return totalCount;\n  }\n}\n```\n\n### 使用\n\n```ts\nclass ExtendedWechatyAuthing extends WechatyAuthing {\n  async totalUsers(): Promise\u003cnumber\u003e {\n    const { totalCount } = await this.client.users.list();\n    return totalCount;\n  }\n\n  plugin(): WechatyPlugin {\n    return (bot: Wechaty): void =\u003e {\n      bot.on('ready', async () =\u003e {\n        const totalCount = await this.totalUsers();\n        log.info('total users', totalCount);\n      });\n    };\n  }\n}\n\nexport const authing = new ExtendedWechatyAuthing({\n  userPoolId: process.env.AUTHING_USER_POOL_ID,\n  secret: process.env.AUTHING_USER_POOL_SECRET\n});\n\nconst bot = createBot(process.env.WECHATY_PADLOCAL_TOKEN);\n\nbot.use(authing.plugin());\n```\n\n## 以微信群作为上游数据源\n\n```bash\nnpm run start:upstream\n```\n\n启动时：\n\n[![](https://mermaid.ink/img/eyJjb2RlIjoiZ3JhcGggTFJcbiAgICBTdGFydDEoU3RhcnQpIFxuICAgIC0tQm90IOWQr-WKqC0tPiBjaGVjazFb5qOA5p-l576k5YaF55qE6Z2eIEF1dGhpbmcg55So5oi3XVxuICAgIC0tPiBhZGRVc2VyW-a3u-WKoCBBdXRoaW5nIOeUqOaIt-W5tua2iOaBr-aPkOmGkue7keWumuaJi-acuuWPt11cbiAgICAtLT4gRW5kMShFbmQpIiwibWVybWFpZCI6eyJ0aGVtZSI6ImRlZmF1bHQifSwidXBkYXRlRWRpdG9yIjpmYWxzZSwiYXV0b1N5bmMiOnRydWUsInVwZGF0ZURpYWdyYW0iOmZhbHNlfQ)](https://mermaid.live/edit#eyJjb2RlIjoiZ3JhcGggTFJcbiAgICBTdGFydDEoU3RhcnQpIFxuICAgIC0tQm90IOWQr-WKqC0tPiBjaGVjazFb5qOA5p-l576k5YaF55qE6Z2eIEF1dGhpbmcg55So5oi3XVxuICAgIC0tPiBhZGRVc2VyW-a3u-WKoCBBdXRoaW5nIOeUqOaIt-W5tua2iOaBr-aPkOmGkue7keWumuaJi-acuuWPt11cbiAgICAtLT4gRW5kMShFbmQpIiwibWVybWFpZCI6IntcbiAgXCJ0aGVtZVwiOiBcImRlZmF1bHRcIlxufSIsInVwZGF0ZUVkaXRvciI6ZmFsc2UsImF1dG9TeW5jIjp0cnVlLCJ1cGRhdGVEaWFncmFtIjpmYWxzZX0)\n\n[![](https://mermaid.ink/img/eyJjb2RlIjoiZ3JhcGggVERcbiAgICBTdGFydDEoU3RhcnQpIFxuICAgIC0tPiBhZGQxW-euoeeQhuWRmOS6uuS4uua3u-WKoOe-pOaIkOWRmF1cbiAgICAtLeeuoeeQhiBCb3Qg5L6m5ZCs5YWl576k5LqL5Lu2LS0-IGFkZDJbQm90IOWQkSBBdXRoaW5nIOazqOWGjOeUqOaIt11cbiAgICAtLeeUqOaIt-aPkOWPiiBCb3Qg5Y-R6YCB5omL5py65Y-3IC0tPiBhZGQzW0JvdCDlkJEgQXV0aGluZyDmm7TmlrDnu5HlrprnlKjmiLfmiYvmnLrlj7ddIFxuICAgIC0tPiBFbmQxKEVuZClcblxuICAgIFN0YXJ0MihTdGFydCkgXG4gICAgLS0-IGRlbDFb566h55CG5ZGY5Lq65Li65Yig6Zmk576k5oiQ5ZGYXVxuICAgIC0t566h55CGIEJvdCDkvqblkKzpgIDnvqTkuovku7YtLT4gIGRlbDJbQm90IOWQkSBBdXRoaW5nIOWIoOmZpOeUqOaIt11cbiAgICAtLT4gRW5kMihFbmQpIiwibWVybWFpZCI6eyJ0aGVtZSI6ImRlZmF1bHQifSwidXBkYXRlRWRpdG9yIjpmYWxzZSwiYXV0b1N5bmMiOnRydWUsInVwZGF0ZURpYWdyYW0iOmZhbHNlfQ)](https://mermaid.live/edit#eyJjb2RlIjoiZ3JhcGggVERcbiAgICBTdGFydDEoU3RhcnQpIFxuICAgIC0tPiBhZGQxW-euoeeQhuWRmOS6uuS4uua3u-WKoOe-pOaIkOWRmF1cbiAgICAtLeeuoeeQhiBCb3Qg5L6m5ZCs5YWl576k5LqL5Lu2LS0-IGFkZDJbQm90IOWQkSBBdXRoaW5nIOazqOWGjOeUqOaIt11cbiAgICAtLeeUqOaIt-aPkOWPiiBCb3Qg5Y-R6YCB5omL5py65Y-3IC0tPiBhZGQzW0JvdCDlkJEgQXV0aGluZyDmm7TmlrDnu5HlrprnlKjmiLfmiYvmnLrlj7ddIFxuICAgIC0tPiBFbmQxKEVuZClcblxuICAgIFN0YXJ0MihTdGFydCkgXG4gICAgLS0-IGRlbDFb566h55CG5ZGY5Lq65Li65Yig6Zmk576k5oiQ5ZGYXVxuICAgIC0t566h55CGIEJvdCDkvqblkKzpgIDnvqTkuovku7YtLT4gIGRlbDJbQm90IOWQkSBBdXRoaW5nIOWIoOmZpOeUqOaIt11cbiAgICAtLT4gRW5kMihFbmQpIiwibWVybWFpZCI6IntcbiAgXCJ0aGVtZVwiOiBcImRlZmF1bHRcIlxufSIsInVwZGF0ZUVkaXRvciI6ZmFsc2UsImF1dG9TeW5jIjp0cnVlLCJ1cGRhdGVEaWFncmFtIjpmYWxzZX0)\n\nBot 对 Authing 用户的操作通过同步中心向下游数据源进行同步。\n\n### 管理员邀请用户加入群组（人为操作）\n\n侦听 `room-join` 事件触发，获得被邀请人员名单（_inviteeList_）。检查 Authing 用户池，筛选出未注册的用户列表，批量注册用户，并发送消息提示绑定用户手机号。\n\n### 管理员踢出群聊用户（人为操作）\n\n侦听 `room-leave` 事件触发，获得被移除人员名单（_leaverList_）。从 Authing 用户池中批量删除。提示删除成功的用户名（列表）。\n\n如果有删除失败的（不确定原因引起），提示删除失败的用户名（列表），请管理员手动删除。\n\n### 用户 @Bot 提及消息\n\n侦听 `message` 事件触发，如果非提及消息，或者消息中不包含手机号，则不处理。\n\n检查用户是否存在，如果存在，修改绑定的手机号为用户输入的（可能出现重复手机号绑定失败）；如果用户不存在注册一个新用户。\n\n如果绑定成功，发送消息提示。\n\n## 以 Authing 作为上游数据源\n\n```bash\nnpm run start:downstream\n```\n\n用户数据来源也可能是同步中心里来自飞书的用户数据。其中有一步，在 Authing 用户池中添加新用户后，要求用户主动添加 Bot 为好友，必须。\n\n启动时：\n\n[![](https://mermaid.ink/img/eyJjb2RlIjoiZ3JhcGggVERcbiAgICBTdGFydDEoU3RhcnQpIFxuICAgIC0tQm90IOWQr-WKqC0tPiBjaGVjazF75qOA5p-l5YWo5ZGY576k5piv5ZCm5a2Y5ZyofVxuICAgIC0tPnxUfCBzdGFydDJb5ZCv5YqoIDMwcyDova7or6IgQ3JvbkpvYl1cbiAgICAtLT4gRW5kMShFbmQpXG4gICAgY2hlY2sxLS0-fEZ8IGNoZWNrMnvnlKjmiLfkuK3lpb3lj4vmlbDmmK_lkKbotoXov4cgMiDkurp9XG4gICAgLS0-fFR8IHN0ZXAxW-WIm-W7uue-pOe7hF1cbiAgICAtLT4gc3RhcnQyXG4gICAgY2hlY2syLS0-fEYg6Ze06ZqUIDMwcyDlpI3mn6V8IGNoZWNrMlxuXG4gICAgU3RhcnQyKFN0YXJ0KVxuICAgIC0tPiBzdGVwMjFb5p-l6K-i5YWo5ZGY576k5oiQ5ZGYXVxuICAgIC0tPiBzdGVwMjJb562b6YCJ5Ye65LiN5pivIEF1dGhpbmcg55So5oi355qE5oiQ5ZGY5bm26Lii5Ye6XVxuICAgIC0tPiBzdGVwMjNb562b6YCJ5Ye6IEF1dGhpbmcg55So5oi35Lit5LiN5Zyo576k5YaF55qE5aW95Y-L5bm26YKA6K-3XVxuICAgIC0tPiBFbmQyKEVuZClcbiAgICAtLT58MzBzIOi9ruivonwgU3RhcnQyIiwibWVybWFpZCI6eyJ0aGVtZSI6ImRlZmF1bHQifSwidXBkYXRlRWRpdG9yIjpmYWxzZSwiYXV0b1N5bmMiOnRydWUsInVwZGF0ZURpYWdyYW0iOmZhbHNlfQ)](https://mermaid.live/edit#eyJjb2RlIjoiZ3JhcGggVERcbiAgICBTdGFydDEoU3RhcnQpIFxuICAgIC0tQm90IOWQr-WKqC0tPiBjaGVjazF75qOA5p-l5YWo5ZGY576k5piv5ZCm5a2Y5ZyofVxuICAgIC0tPnxUfCBzdGFydDJb5ZCv5YqoIDMwcyDova7or6IgQ3JvbkpvYl1cbiAgICAtLT4gRW5kMShFbmQpXG4gICAgY2hlY2sxLS0-fEZ8IGNoZWNrMnvnlKjmiLfkuK3lpb3lj4vmlbDmmK_lkKbotoXov4cgMiDkurp9XG4gICAgLS0-fFR8IHN0ZXAxW-WIm-W7uue-pOe7hF1cbiAgICAtLT4gc3RhcnQyXG4gICAgY2hlY2syLS0-fEYg6Ze06ZqUIDMwcyDlpI3mn6V8IGNoZWNrMlxuXG4gICAgU3RhcnQyKFN0YXJ0KVxuICAgIC0tPiBzdGVwMjFb5p-l6K-i5YWo5ZGY576k5oiQ5ZGYXVxuICAgIC0tPiBzdGVwMjJb562b6YCJ5Ye65LiN5pivIEF1dGhpbmcg55So5oi355qE5oiQ5ZGY5bm26Lii5Ye6XVxuICAgIC0tPiBzdGVwMjNb562b6YCJ5Ye6IEF1dGhpbmcg55So5oi35Lit5LiN5Zyo576k5YaF55qE5aW95Y-L5bm26YKA6K-3XVxuICAgIC0tPiBFbmQyKEVuZClcbiAgICAtLT58MzBzIOi9ruivonwgU3RhcnQyIiwibWVybWFpZCI6IntcbiAgXCJ0aGVtZVwiOiBcImRlZmF1bHRcIlxufSIsInVwZGF0ZUVkaXRvciI6ZmFsc2UsImF1dG9TeW5jIjp0cnVlLCJ1cGRhdGVEaWFncmFtIjpmYWxzZX0)\n\n[![](https://mermaid.ink/img/eyJjb2RlIjoiZ3JhcGggVERcbiAgICBTdGFydDEoU3RhcnQpXG4gICAgLS1Cb3Qg5ZCv5YqoLS0-IHN0ZXAxMVvkvqblkKzlpb3lj4vnlLPor7flkozmlofmnKzmtojmga9dXG4gICAgLS0-fOWlveWPi-ivt-axguS6i-S7tuaIluaWh-acrOa2iOaBr3wgc3RlcDEyW-agueaNruaJi-acuuWPt-aOpeWPl-ivt-axguW5tumCgOivt-WFpee-pF1cbiAgICAtLT4gRW5kMShFbmQpIiwibWVybWFpZCI6eyJ0aGVtZSI6ImRlZmF1bHQifSwidXBkYXRlRWRpdG9yIjpmYWxzZSwiYXV0b1N5bmMiOnRydWUsInVwZGF0ZURpYWdyYW0iOmZhbHNlfQ)](https://mermaid.live/edit#eyJjb2RlIjoiZ3JhcGggVERcbiAgICBTdGFydDEoU3RhcnQpXG4gICAgLS1Cb3Qg5ZCv5YqoLS0-IHN0ZXAxMVvkvqblkKzlpb3lj4vnlLPor7flkozmlofmnKzmtojmga9dXG4gICAgLS0-fOWlveWPi-ivt-axguS6i-S7tuaIluaWh-acrOa2iOaBr3wgc3RlcDEyW-agueaNruaJi-acuuWPt-aOpeWPl-ivt-axguW5tumCgOivt-WFpee-pF1cbiAgICAtLT4gRW5kMShFbmQpIiwibWVybWFpZCI6IntcbiAgXCJ0aGVtZVwiOiBcImRlZmF1bHRcIlxufSIsInVwZGF0ZUVkaXRvciI6ZmFsc2UsImF1dG9TeW5jIjp0cnVlLCJ1cGRhdGVEaWFncmFtIjpmYWxzZX0)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwillin%2Fwechaty-authing-poc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwillin%2Fwechaty-authing-poc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwillin%2Fwechaty-authing-poc/lists"}