[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-3263":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":16,"stars30d":17,"stars90d":16,"forks30d":16,"starsTrendScore":16,"compositeScore":18,"rankGlobal":10,"rankLanguage":10,"license":19,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":20,"hasPages":22,"topics":23,"createdAt":10,"pushedAt":10,"updatedAt":26,"readmeContent":27,"aiSummary":28,"trendingCount":16,"starSnapshotCount":16,"syncStatus":29,"lastSyncTime":30,"discoverSource":31},3263,"hubot","hubotio\u002Fhubot","hubotio","A customizable life embetterment robot.","https:\u002F\u002Fhubotio.github.io\u002Fhubot\u002F",null,"JavaScript",16785,3719,574,4,0,9,45,"MIT License",false,"main",true,[24,25,5],"bot","chat","2026-06-12 02:00:48","![Pipeline Status](https:\u002F\u002Fgithub.com\u002Fhubotio\u002Fhubot\u002Factions\u002Fworkflows\u002Fpipeline.yml\u002Fbadge.svg)\n\n![Build Status: MacOS](https:\u002F\u002Fgithub.com\u002Fhubotio\u002Fhubot\u002Factions\u002Fworkflows\u002Fnodejs-macos.yml\u002Fbadge.svg)\n![Build Status: Ubuntu](https:\u002F\u002Fgithub.com\u002Fhubotio\u002Fhubot\u002Factions\u002Fworkflows\u002Fnodejs-ubuntu.yml\u002Fbadge.svg)\n![Build Status: Window](https:\u002F\u002Fgithub.com\u002Fhubotio\u002Fhubot\u002Factions\u002Fworkflows\u002Fnodejs-windows.yml\u002Fbadge.svg)\n\n# Hubot\n\n**Note: v10.0.4 accidentally contains the removal of CoffeeScript; v10.0.5 puts it back in**\n**Note: v11 removes CoffeeScript and converts this codebase to ESM**\n\nHubot is a framework to build chat bots, modeled after GitHub's Campfire bot of the same name, hubot.\nHe's pretty cool. He's [extendable with scripts](https:\u002F\u002Fhubotio.github.io\u002Fhubot\u002Fdocs#scripts) and can work\non [many different chat services](https:\u002F\u002Fhubotio.github.io\u002Fhubot\u002Fadapters.html).\n\nThis repository provides a library that's distributed by `npm` that you\nuse for building your own bots.  See the [documentation](https:\u002F\u002Fhubotio.github.io\u002Fhubot\u002Fdocs.html)\nfor details on getting up and running with your very own robot friend.\n\nIn most cases, you'll probably never have to hack on this repo directly if you\nare building your own bot. But if you do, check out [CONTRIBUTING.md](CONTRIBUTING.md)\n\n# Create your own Hubot instance\n\nThis will create a directory called `myhubot` in the current working directory.\n\n```sh\nnpx hubot --create myhubot --adapter @hubot-friends\u002Fhubot-slack\nnpx hubot --create myhubot --adapter @hubot-friends\u002Fhubot-discord\nnpx hubot --create myhubot --adapter @hubot-friends\u002Fhubot-ms-teams\nnpx hubot --create myhubot --adapter @hubot-friends\u002Fhubot-irc\n```\n\nReview `scripts\u002Fexample.mjs`. Create more scripts in the `scripts` folder.\n\n## Command bus (robot.commands)\n\nHubot includes a deterministic command subsystem for slash-style commands. It is safe by default and does not interfere with legacy `hear` and `respond` listeners.\n\n### Basic Command Registration\n\n```mjs\nexport default (robot) => {\n\trobot.commands.register({\n\t\tid: 'tickets.create',\n\t\tdescription: 'Create a ticket',\n\t\taliases: ['ticket new', 'new ticket'],\n\t\targs: {\n\t\t\ttitle: { type: 'string', required: true },\n\t\t\tpriority: { type: 'enum', values: ['low', 'medium', 'high'], default: 'medium' }\n\t\t},\n\t\tsideEffects: ['creates external ticket'],\n\t\thandler: async (ctx) => {\n\t\t\treturn `Created ticket: ${ctx.args.title}`\n\t\t}\n\t})\n}\n```\n\nInvoke with addressing the bot:\n\n- `@hubot tickets.create --title \"VPN down\" --priority high`\n- `@hubot tickets.create title:\"VPN down\" priority:high`\n\nCommands that declare side effects will require confirmation before execution.\n\nThe user is asked to confirm. They do so like so:\n```sh\n@hubot yes\n@hubot no\n@hubot cancel\n```\n\nAliases are for discovery and search only. They do not execute commands or create proposals. They are intent utterances.\n\n### Built-in Help Command\n\nHubot automatically registers a `help` command that provides command discovery and documentation:\n\n```\n@hubot help                          # List all commands\n@hubot help tickets                  # Filter commands by prefix\n@hubot help search \"create ticket\"   # Search by keyword, alias, description, or example\n```\n\n### Search for Commands\n\n```mjs\nconst results = robot.commands.search('ticket new')\n\u002F\u002F [{ id: 'tickets.create', score: 100, matchedOn: 'alias' }, ...]\n```\n\n### Custom Type Resolvers\n\nExtend validation with custom argument types:\n\n```mjs\nexport default (robot) => {\n\t\u002F\u002F Register custom type resolver\n\trobot.commands.registerTypeResolver('project_id', async (value, schema, context) => {\n\t\tif (!value.startsWith('PRJ-')) {\n\t\t\tthrow new Error('must start with PRJ-')\n\t\t}\n\t\treturn value.toUpperCase()\n\t})\n\n\t\u002F\u002F Use it in a command\n\trobot.commands.register({\n\t\tid: 'projects.deploy',\n\t\tdescription: 'Deploy a project',\n\t\targs: {\n\t\t\tprojectId: { type: 'project_id', required: true }\n\t\t},\n\t\thandler: async (ctx) => {\n\t\t\treturn `Deploying ${ctx.args.projectId}`\n\t\t}\n\t})\n}\n```\n\n### Configuration Options\n\nWhen creating a CommandBus instance, you can configure:\n\n- `prefix` - Command prefix (default: '')\n- `proposalTTL` - Timeout for pending confirmations in milliseconds (default: 300000 = 5 minutes)\n- `logPath` - Path to NDJSON event log file (default: `.data\u002Fcommands-events.ndjson`)\n- `disableLogging` - Disable event logging to disk (default: true - logging is disabled by default)\n- `permissionProvider` - Custom permission checking handler (optional)\n\n### Permissions\n\nControl who can execute commands using room-based and role-based permissions.\n\n#### Room-Based Permissions\n\nRestrict command execution to specific chat rooms:\n\n```mjs\nrobot.commands.register({\n\tid: 'sensitive.action',\n\tdescription: 'Admin-only action',\n\tpermissions: {\n\t\trooms: ['#admin', '#ops']  \u002F\u002F Only allowed in these rooms\n\t},\n\thandler: async (ctx) => {\n\t\treturn 'Action executed!'\n\t}\n})\n```\n\nUsers in other rooms get: `Permission denied: command not allowed in this room`\n\n#### Role-Based Permissions\n\nRestrict command execution to users with specific roles:\n\n```mjs\nrobot.commands.register({\n\tid: 'deploy.production',\n\tdescription: 'Deploy to production',\n\tpermissions: {\n\t\troles: ['admin', 'devops']  \u002F\u002F Only users with these roles\n\t},\n\thandler: async (ctx) => {\n\t\treturn 'Deploying...'\n\t}\n})\n```\n\nTo enable role checking, provide a `permissionProvider` when creating CommandBus:\n\n```mjs\nconst commandBus = new CommandBus(robot, {\n\tpermissionProvider: {\n\t\thasRole: async (user, requiredRoles, context) => {\n\t\t\t\u002F\u002F Custom logic to check if user has any of the required roles\n\t\t\tconst userRoles = await fetchUserRoles(user.id)\n\t\t\treturn requiredRoles.some(role => userRoles.includes(role))\n\t\t}\n\t}\n})\n```\n\nWithout a permission provider, role-based permissions are ignored (allow by default). Room-based permissions are always enforced.\n\n## License\n\nSee the [LICENSE](LICENSE.md) file for license rights and limitations (MIT).\n\n# Hubot History\n\n[Say hello to Hubot](https:\u002F\u002Fgithub.blog\u002F2011-10-25-say-hello-to-hubot\u002F)\n\n[Cartoon with Hubot](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=vq2jYFZVMDA&t=129s)\n\n[The Most Important Startup's Hardest Worker Isn't a Person](https:\u002F\u002Fwww.wired.com\u002F2015\u002F10\u002Fthe-most-important-startups-hardest-worker-isnt-a-person\u002F)\n\n[The Story of Hubot](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=Je4TjjtFDNU)\n\n[Hubot by Hubotics](https:\u002F\u002Fwww.theoldrobots.com\u002Fhubot.html)\n\n[Automating Inefficiencies](https:\u002F\u002Fzachholman.com\u002F2011\u002F01\u002Fautomating-inefficiencies\u002F)\n\n[Getting Started with Hubot](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=A7fh6RIzGrw)","Hubot 是一个用于构建聊天机器人的框架，最初模仿了GitHub的Campfire机器人。它支持通过脚本扩展功能，并能在多种聊天服务上运行。该项目采用JavaScript编写，提供了丰富的命令系统来处理各种交互需求，如创建工单等，同时内置的帮助命令可增强用户体验。适用于需要自动化响应、任务管理和信息查询等多种企业级或个人场景下的聊天应用开发。",2,"2026-06-11 02:53:12","top_language"]