{"id":24389211,"url":"https://github.com/adityapurwa/arubick","last_synced_at":"2025-09-09T12:37:38.024Z","repository":{"id":68607858,"uuid":"112202120","full_name":"adityapurwa/Arubick","owner":"adityapurwa","description":"Simple bot engine with expressive syntax.","archived":false,"fork":false,"pushed_at":"2017-12-04T13:01:51.000Z","size":35,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-12T22:14:18.962Z","etag":null,"topics":["bot","language"],"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/adityapurwa.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2017-11-27T13:51:36.000Z","updated_at":"2019-10-01T11:53:05.000Z","dependencies_parsed_at":"2023-09-13T16:30:32.984Z","dependency_job_id":null,"html_url":"https://github.com/adityapurwa/Arubick","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/adityapurwa/Arubick","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adityapurwa%2FArubick","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adityapurwa%2FArubick/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adityapurwa%2FArubick/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adityapurwa%2FArubick/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/adityapurwa","download_url":"https://codeload.github.com/adityapurwa/Arubick/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adityapurwa%2FArubick/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274296454,"owners_count":25258842,"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-09-09T02:00:10.223Z","response_time":80,"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","language"],"created_at":"2025-01-19T15:01:21.612Z","updated_at":"2025-09-09T12:37:37.995Z","avatar_url":"https://github.com/adityapurwa.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Arubick\n\n\u003e Simple bot engine with expressive syntax.\n\nArubick is a simple bot engine that runs on Javascript by feeding it a \\*.rbot\nfile that contains expressive syntax of your bot.\n\n```rbot\nRandomBot:0.0.1\n\ndef ext/random = extern(\"./js/random.js\")\n\ndef intent/query = [\n    \"random\"\n]\ndef intent/greet = [\n    \"hi\",\n    \"hello\"\n]\n\nmain {\n    def message = await reply()\n    if message is intent/greet {\n        say(\"Hi! I am random bot, ask me for a random number.\")\n        restart()\n    } else {\n        if message is intent/query {\n            def random = ext/random()\n            say(\"Generated random number ${random}\")\n            restart()\n        } else {\n            say(\"Sorry, I don't understand\")\n            restart()\n        }\n    }\n}\n```\n\n**ARUBICK IS EXPERIMENTAL PROJECT AND SUBJECT TO FREQUENT CHANGES THAT COULD\nBREAKS PREVIOUS VERSION.**\n\n**Arubick is a way for me to learn Antlr, there might be some things that does\nnot follow Antlr best practice, I am used to write parser manually before.**\n\n## Agnostic Design\n\nArubick is designed to be agnostic, it is not primarily designed to run limited\nto the engine. You should be able to extend (not yet implemented) Arubick to use\nexternal natural language processing engine.\n\n```rbot\ndef extract = ext/intentQuery(message)\nif extract {\n    say(\"...\")\n}\n```\n\n## Running Example\n\nTo run the example, run the command below\n\n```\nnpm run test\n```\n\nMake sure to install the dependencies first (including development\ndependencies).\n\nWhere `ext/intentQuery` above is defined as external natural language processor.\n\n## Contribution\n\nThis is more like a learning project and research, so feel free to share your\nknowledge with me and any form of contribution is accepted.\n\n## Extra\n\nArubick is named after Rubick, a DoTA 2 hero that can learn the opponent spells.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadityapurwa%2Farubick","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fadityapurwa%2Farubick","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadityapurwa%2Farubick/lists"}