{"id":22185948,"url":"https://github.com/johnmaguire/cardinal","last_synced_at":"2026-04-01T19:45:54.888Z","repository":{"id":6813043,"uuid":"8061014","full_name":"johnmaguire/Cardinal","owner":"johnmaguire","description":"A Python IRC bot, designed to make adding functionality quick and simple. (est. 2013)","archived":false,"fork":false,"pushed_at":"2026-02-24T02:43:04.000Z","size":804,"stargazers_count":103,"open_issues_count":20,"forks_count":40,"subscribers_count":14,"default_branch":"master","last_synced_at":"2026-03-27T23:42:18.126Z","etag":null,"topics":["hacktoberfest","irc","irc-bot","irc-bot-framework","python","python3","twisted","twisted-irc-bot"],"latest_commit_sha":null,"homepage":"","language":"Python","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/johnmaguire.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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":"2013-02-06T21:55:21.000Z","updated_at":"2026-02-24T02:43:07.000Z","dependencies_parsed_at":"2024-01-17T00:28:17.928Z","dependency_job_id":"1a1d7304-a151-4b91-ac3c-644598ca7c30","html_url":"https://github.com/johnmaguire/Cardinal","commit_stats":null,"previous_names":[],"tags_count":33,"template":false,"template_full_name":null,"purl":"pkg:github/johnmaguire/Cardinal","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnmaguire%2FCardinal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnmaguire%2FCardinal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnmaguire%2FCardinal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnmaguire%2FCardinal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/johnmaguire","download_url":"https://codeload.github.com/johnmaguire/Cardinal/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnmaguire%2FCardinal/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31291209,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T13:12:26.723Z","status":"ssl_error","status_checked_at":"2026-04-01T13:12:25.102Z","response_time":53,"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":["hacktoberfest","irc","irc-bot","irc-bot-framework","python","python3","twisted","twisted-irc-bot"],"created_at":"2024-12-02T10:18:51.178Z","updated_at":"2026-04-01T19:45:54.834Z","avatar_url":"https://github.com/johnmaguire.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Cardinal](./_assets/cardinal.svg)](https://github.com/JohnMaguire/Cardinal)\n\n# Meet Cardinal.\n\n[![Build Status](https://github.com/JohnMaguire/Cardinal/workflows/Cardinal/badge.svg)](https://github.com/JohnMaguire/Cardinal/actions?query=workflow%3ACardinal) [![Coverage Status](https://codecov.io/github/JohnMaguire/Cardinal/coverage.svg?branch=master)](https://codecov.io/github/JohnMaguire/Cardinal?branch=master)\n\nCardinal is a Python Twisted IRC bot with a focus on ease of development. It features reloadable asynchronous plugins, [Python decorators for commands](https://github.com/JohnMaguire/Cardinal/wiki/Writing-Plugins#adding-commands-to-a-plugin) and [IRC events](https://github.com/JohnMaguire/Cardinal/wiki/Cardinal-Events), [simple persistent JSON data storage](https://github.com/JohnMaguire/Cardinal/wiki/Database-Access), and [a well-documented API](https://github.com/JohnMaguire/Cardinal/wiki/Cardinal-Methods).\n\nYou can join [#cardinal](https://www.mibbit.com/#cardinal@irc.darkscience.net:+6697) on the [DarkScience](http://www.darkscience.net/) IRC network for questions or support. (irc.darkscience.net/+6697 \u0026mdash; SSL required)\n\n## What can Cardinal do?\n\nAnything, if you're creative! Cardinal does come with some plugins to get you started...\n\n* Fetching URL titles\n* Wolfram Alpha calculations\n* Wikipedia definitions\n* Urban Dictionary definitions\n* Movie and TV show lookups\n* Weather reports\n* Reminders\n* Google searches\n* Now playing w/ Last.fm\n* Stock ticker\n* sed-like substitutions\n* ... and more!\n\nBut the best part of Cardinal is how easy it is to add more!\n\n## Basic Usage\n\n### Configuration\n\n1. Copy the `config/config.example.json` file to `config/config.json` (you can use another filename as well, such as `config.freenode.json` if you plan to run Cardinal on multiple networks).\n\n2. Copy `plugins/admin/config.example.json` to `plugins/admin/config.json` and add your `nick` and `vhost` in order to take advantage of admin-only commands (such as reloading plugins, telling Cardinal to join a channel, or blacklisting plugins within a channel).\n\n### Running\n\nCardinal is run via Docker. To get started, install [Docker](https://docs.docker.com/install/) and [docker-compose](https://docs.docker.com/compose/install/).\n\nIf your config file is named something other than `config/config.json`, you will need to create a `docker-compose.override.yml` file like so:\n\n```yaml\nversion: \"2.1\"\nservices:\n    cardinal:\n        command: config/config_file_name.json\n```\n\nTo start Cardinal, run `docker-compose up -d`. To restart Cardinal, run `docker-compose restart`. To stop Cardinal, run `docker-compose down`.\n\n## Writing Plugins\n\nCardinal was designed with ease of development in mind.\n\n```python\nfrom cardinal.decorators import command, help\n\nclass HelloWorldPlugin:\n    @command(['hello', 'hi'])\n    @help(\"Responds to the user with a greeting.\")\n    @help(\"Syntax: .hello\")\n    def hello(self, cardinal, user, channel, msg):\n        nick, ident, vhost = user\n        cardinal.sendMsg(channel, \"Hello {}!\".format(nick))\n\nentrypoint = HelloWorldPlugin\n```\n\nCardinal also offers a [lightweight database API](https://github.com/JohnMaguire/Cardinal/wiki/Database-Access). [Visit the wiki](https://github.com/JohnMaguire/Cardinal/wiki/Writing-Plugins) for detailed information.\n\n## Contributing\n\nCardinal is a public, open-source project, licensed under the [MIT License](LICENSE). [Anyone may contribute.](CONTRIBUTING.md)\n\nWhen submitting a pull request, you may add your name to the [CONTRIBUTORS](CONTRIBUTORS) file.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjohnmaguire%2Fcardinal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjohnmaguire%2Fcardinal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjohnmaguire%2Fcardinal/lists"}