{"id":27037132,"url":"https://github.com/isboyjc/wechaty-room-clock","last_synced_at":"2025-08-27T14:18:32.348Z","repository":{"id":126013634,"uuid":"277296615","full_name":"isboyjc/wechaty-room-clock","owner":"isboyjc","description":"integral, clock","archived":false,"fork":false,"pushed_at":"2020-07-05T13:52:28.000Z","size":14,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-07T20:03:10.641Z","etag":null,"topics":["room-clock","wechaty","wechaty-plugin"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/isboyjc.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,"zenodo":null}},"created_at":"2020-07-05T12:21:12.000Z","updated_at":"2023-02-07T14:45:41.000Z","dependencies_parsed_at":"2023-06-16T04:00:23.806Z","dependency_job_id":null,"html_url":"https://github.com/isboyjc/wechaty-room-clock","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/isboyjc/wechaty-room-clock","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isboyjc%2Fwechaty-room-clock","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isboyjc%2Fwechaty-room-clock/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isboyjc%2Fwechaty-room-clock/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isboyjc%2Fwechaty-room-clock/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/isboyjc","download_url":"https://codeload.github.com/isboyjc/wechaty-room-clock/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isboyjc%2Fwechaty-room-clock/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265489150,"owners_count":23775266,"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":["room-clock","wechaty","wechaty-plugin"],"created_at":"2025-04-05T01:16:30.857Z","updated_at":"2025-07-16T06:46:14.981Z","avatar_url":"https://github.com/isboyjc.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# wechaty-room-clock\n[![Wechaty Plugin Contrib](https://img.shields.io/badge/Wechaty%20Plugin-wechaty--room--clock-brightgreen.svg)](https://github.com/isboyjc/wechaty-room-clock) [![Powered by Wechaty](https://img.shields.io/badge/Powered%20By-Wechaty-brightgreen.svg)](https://github.com/Wechaty/wechaty)\n\nintegral, clock\n\n积分，打卡签到\n\n## 开始\n\n### 简介\n\n看名字，功能不难猜到，在群聊中打卡签到，每次打卡签到后累计打卡签到次数+1，积分+1，每日只可打卡一次，打卡总数/积分总数/打卡日志等等\n\n你可能觉得这些操作需要用到数据库，但是在我的理解中，微信机器人越简单越便捷越好，而微信群聊的数据量不是很大，一个插件的使用，需要额外配置很多东西是很麻烦的，所以，此插件采用了本地存储，用了一个三方轻量化的基于 `Node` 的 `JSON` 文件数据库 `LOWDB`，避免了数据库这一繁琐的配置\n\n插件会自动在项目根目录创建一个 `[机器人名字].clock-logs` 的文件夹，用以存放数据\n\n其中 `clock-logs-[年份].json` 文件存储的是打卡日志，为避免读写操作数据量过大产生的负荷，所以每年会生成对应的 `json` 文件，这样每个群聊上限是 500 人，以5个群聊为基础，一年的打卡数据量也不会太大\n\n其中 `clock-logs-main.json` 文件为主文件，存储的是对应群聊/对应用户的打卡签到数据等等\n\n当然，如果你有更好的想法，请务必告知哦\n\n### 安装\n\n```txt\nnpm install wechaty-room-clock\n\nor\n\nyarn add wechaty-room-clock\n```\n\n### 使用\n\n```js\nconst WechatyRoomClock = require(\"wechaty-room-clock\")\n\nbot.use(WechatyRoomClock(options))\n```\n\n如上所示\n\n使用插件只要按需传入配置对象 `options` 即可\n\n| Options 参数属性  | 类型             | 简介                                                         |\n| ----------------- | ---------------- | ------------------------------------------------------------ |\n| keyword           | String\\|Array    | 触发签到的关键字，只有一个可以使用字符串类型，多个关键字使用数组类型，默认为 [\"签到\", \"打卡\"] |\n| success           | String\\|Function           | 打卡成功提示该用户的一句话，可为字符串类型，也可以是函数类型，函数类型时，有一个参数data，即当前群成员在本地数据库中的数据对象，函数最终需返回一个字符串function(data){return ...}，此项默认值请看下文示例 |\n| repeat   | String\\|Function            | 重复打卡时提示该用户的一句话，可为字符串类型，也可以是函数类型，函数类型时，有一个参数data，即当前群成员在本地数据库中的数据对象，函数最终需返回一个字符串function(data){return ...}，此项默认值为 “今日已签到，请勿重复签到” |\n\n参数 `success` 和 `repeat` 为函数类型时形参 `data` 示例\n\n```js\n{\n  // 该用户微信id\n  \"CONTACTID\": \"wxid_nrsh4yc8yupm22\",\n  // 该用户昵称\n  \"CONTACTNAME\": \"isboyjc\",\n  // 该用户打卡总数\n  \"CLOCKNUM\": 170,\n  \"CLOCKINFO\": {\n    // 该用户2020年打卡总数\n    \"2020\": 69,\n    // 该用户2019年打卡总数\n    \"2019\": 101\n  },\n  // 该用户积分\n  \"INTEGRALNUM\": 170\n}\n```\n\n\n\n### 示例\n\n```js\nconst { Wechaty } = require(\"wechaty\")\nconst { PuppetPadplus } = require(\"wechaty-puppet-padplus\")\nconst Qrterminal = require(\"qrcode-terminal\")\nconst WechatyRoomClock = require(\"wechaty-room-clock\")\n\nconst bot = new Wechaty({\n  puppet: new PuppetPadplus({\n    // 机器人padplus协议token\n    token: PUPPET_PADPLUS_TOKEN,\n  }),\n  // 机器人名字\n  name: ROBOT_NAME,\n})\n\nlet options = {\n  // 此处为默认项配置，也可为一个字符串\n  keyword: [\"签到\", \"打卡\"],\n  // 此处为默认项配置，也可为一个字符串\n  success: (data) =\u003e {\n    let str = \"\\n签到成功\\n\"\n    Object.keys(data.CLOCKINFO).map(\n      (v) =\u003e (str += `${v}年累计签到${data.CLOCKINFO[v]}次\\n`)\n    )\n    return str + `共累计签到${data.CLOCKNUM}次\\n拥有${data.INTEGRALNUM}积分`\n  },\n  // 此处为默认项配置，也可为一个字符串\n  repeat: (data) =\u003e `今日已签到，请勿重复签到`,\n}\n\n// 使用插件\nbot.use(WechatyRoomClock(options))\n\nbot\n  .on(\"scan\", (qrcode, status) =\u003e {\n    Qrterminal.generate(qrcode, { small: true })\n  })\n  .start()\n\n```\n\n如上所示，如果你对默认配置认同的话，只需要调用 `bot.use(WechatyRoomClock())` 这一行代码就OK了，是不是方便快捷呢😄\n\n\n\n### 最后\n\n扫描二维码，加圈子微信，可进交流群哦，效果如下图，赶快来试试吧\n\n\u003cimg src=\"https://gitee.com/IsboyJC/PictureBed/raw/master/other/asdakshdajshdas1.jpeg\" width=\"200\" height=\"200\" alt=\"图片名称\" align=left /\u003e\n\n\n\n![image-20200705213657340](https://gitee.com/IsboyJC/PictureBed/raw/master/other/image-20200705213657340.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fisboyjc%2Fwechaty-room-clock","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fisboyjc%2Fwechaty-room-clock","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fisboyjc%2Fwechaty-room-clock/lists"}