{"id":46315607,"url":"https://github.com/tvdstaaij/nocto","last_synced_at":"2026-03-04T14:05:38.322Z","repository":{"id":34404534,"uuid":"38333115","full_name":"tvdstaaij/nocto","owner":"tvdstaaij","description":"Modular Node.js Telegram bot using the official bot API","archived":false,"fork":false,"pushed_at":"2023-06-10T10:06:31.000Z","size":848,"stargazers_count":10,"open_issues_count":13,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2023-06-10T11:39:11.415Z","etag":null,"topics":["bot","bot-framework","hacktoberfest","nodejs","telegram","telegram-bot"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"kallaway/100-days-of-code","license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tvdstaaij.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}},"created_at":"2015-06-30T21:05:26.000Z","updated_at":"2023-06-10T10:06:37.000Z","dependencies_parsed_at":"2023-01-15T06:53:03.362Z","dependency_job_id":null,"html_url":"https://github.com/tvdstaaij/nocto","commit_stats":null,"previous_names":[],"tags_count":null,"template":null,"template_full_name":null,"purl":"pkg:github/tvdstaaij/nocto","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tvdstaaij%2Fnocto","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tvdstaaij%2Fnocto/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tvdstaaij%2Fnocto/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tvdstaaij%2Fnocto/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tvdstaaij","download_url":"https://codeload.github.com/tvdstaaij/nocto/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tvdstaaij%2Fnocto/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30083023,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-04T13:22:36.021Z","status":"ssl_error","status_checked_at":"2026-03-04T13:20:45.750Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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","bot-framework","hacktoberfest","nodejs","telegram","telegram-bot"],"created_at":"2026-03-04T14:05:37.602Z","updated_at":"2026-03-04T14:05:38.308Z","avatar_url":"https://github.com/tvdstaaij.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# nocto.js\n\nNocto is a Node.js Telegram bot framework with an asynchronous plugin-based\narchitecture, using the official bot API. It relies on long polling and\n persistent connections to rapidly interact with Telegram.\n\nWhat can nocto do for you?\n* As a user, you can just run nocto with one or more existing plugins.\n* As a developer, you can utilize nocto's extensive framework to develop\n  custom plugins without having to reinvent the wheel all the time. Nocto\n  provides much more functionality than a simple API wrapper does.\n\n## Development status\n\nMostly functional but not actively maintained. Lots of outdated dependencies.\nMay or may not be modernized in the future.\n\n## Quickstart\n\n1. Make sure your Node.js interpreter is version 0.12 or higher.\n2. Run `./fullinstall.sh` to install core and plugin dependencies with npm.\n3. Make sure the user running the bot has read/write permission for the\n   directories `logs`, `persist` and `config`.\n4. Launch with `node nocto.js` or `npm start`.\n5. Answer the questions asked by the first time setup wizard. If you don't have\n   an API token yet, request one from @BotFather on Telegram.\n6. Get on Telegram and claim ownership of the bot by sending the command\n   `/owner` in a private message or a group that the bot is a member of.\n7. List available plugins with `/plugins list`. You can enable any number of\n   plugins with `/plugins enable plugin1 plugin2`.\n\nAfter the first run, which is interactive, you can just use your preferred way\nto (automatically) launch and keep the application running in the background.\nSending an interrupt signal (Control-C) initiates a clean shutdown.\n\n## Available plugins (incomplete)\n\n* `echo`: Simple example plugin implementing an echo command.\n* `feedannounce`: RSS/Atom notifications configurable for either public or\n  private use (under heavy development).\n* `googleimages`: Shows Google search suggestions for a partial query.\n* `googlesuggest`: Grabs an image from Google Images. Optimized for reliability,\n  speed and anti-duplication.\n* `ircbridge`: Allows you to link IRC channels and Telegram groups, relaying\n  messages and events in one or both directions. Supports multiple IRC servers\n  and bridge routes.\n* `jukebox`: Grabs playable MP3 songs from Prostopleer.\n* `trace`: Logs properties of every incoming message to ease plugin development. \n\n## Administration\nBasic plugin control commands:\n```\n/plugins list\n/plugins enable someplugin\n/plugins enable all\n/plugins disable someplugin\n/plugins disable all\n/plugins reload someplugin\n/plugins reload\n```\n* You can enter a space-separated lists of plugins for most commands.\n* `reload` performs a full disable-unload-load-enable cycle, only\n  enabling plugins that were already enabled. Reloading will force reading the\n  plugin files from disk, thus applying any changes to the plugin.\n\nManipulating user authority:\n```\n/authority @target_user\n/authority @target_user administrator\n/ban @target_user\n```\n* Users must have sent at least one message that the bot has seen before they\n  can be assigned an authority.\n* Authority levels: `user` `trusted` `half-operator` `operator` `administrator`\n  `owner` (and `blacklisted`, which is set by `/ban`)\n* You can use either user IDs or @usernames.\n\n## Developing new plugins\n\nPlugins have their own directory in `plugins` and at least an executable file\n`plugins/myplugin/myplugin.js`. They can optionally have a `config.json`\nand/or an NPM `package.json` in the same directory. For now, reference the\nannotated `plugins/echo` as an example plugin (although this is not the only\npossible style for writing plugins). Your plugin can have its own dependencies, \nsubmodules and data files if necessary.\n\nNocto provides various services and utilities, such as persistent storage,\nuser tracking, fluid builder patterns and state machines for session-based\ninteraction. These features will be documented at a later time; if you want to\n know how to make use of this take a look at existing plugins or ask the author.\n\n## Logging\n\nLogging is realized with `log4js` and defaults to dumping all messages except\ndebug information to standard output and daily rotating files. Logging behavior\ncan be customized in your local configuration file. Refer to the [log4js \ndocumentation][1] for further details.\n\n## Dependencies\n\nExternal dependencies on node modules are listed in the `package.json` and can\nbe automatically resolved with `npm install`. Dependencies listed as optional\nare only necessary for certain services (see below), which are enabled by\ndefault but can be disabled in the bot configuration. Plugins have their own\ndependencies specified in a package.json and require an `npm install` in their\nplugin directory before loading them for the first time.\n\nHowever, the bot also has internal component dependencies. The bot provides a\nset of modules called 'services' which are more tightly coupled to the bot than\n plugins. They generally provide some functionality to plugins and/or other\n components, for example a persistent data store.\n\nServices can be disabled to strip the bot of some weight if you don't need them.\nThe following applies regarding dependencies:\n\n* Plugins can depend on certain services.\n* Services can depend on certain other services (e.g. plugin manager service\n  requiring persistent storage for keeping track of enabled plugins).\n* Plugins do not depend on other plugins.\n\n[1]: https://github.com/nomiddlename/log4js-node#configuration\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftvdstaaij%2Fnocto","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftvdstaaij%2Fnocto","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftvdstaaij%2Fnocto/lists"}