{"id":15624206,"url":"https://github.com/eevee/dywypi","last_synced_at":"2025-07-03T19:06:56.443Z","repository":{"id":141966704,"uuid":"2596282","full_name":"eevee/dywypi","owner":"eevee","description":"Python IRC bot built atop asyncio","archived":false,"fork":false,"pushed_at":"2016-09-07T00:36:17.000Z","size":254,"stargazers_count":19,"open_issues_count":24,"forks_count":9,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-28T15:50:17.468Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eevee.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2011-10-18T02:10:14.000Z","updated_at":"2024-01-03T14:09:56.000Z","dependencies_parsed_at":null,"dependency_job_id":"aedd68c5-77ed-4924-bbec-c699a27f7901","html_url":"https://github.com/eevee/dywypi","commit_stats":{"total_commits":78,"total_committers":4,"mean_commits":19.5,"dds":"0.11538461538461542","last_synced_commit":"0459e2d52e7ecaab619ca5b18186fbecaabc6655"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/eevee/dywypi","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eevee%2Fdywypi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eevee%2Fdywypi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eevee%2Fdywypi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eevee%2Fdywypi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eevee","download_url":"https://codeload.github.com/eevee/dywypi/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eevee%2Fdywypi/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260469129,"owners_count":23014041,"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":[],"created_at":"2024-10-03T10:00:20.717Z","updated_at":"2025-07-03T19:06:56.383Z","avatar_url":"https://github.com/eevee.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# dywypi\n\n**dywypi** is an IRC bot you can extend with plugins.\n\nIt also contains a simple IRC protocol implementation for `asyncio`, which can be used independently of the bot.\n\n## Setup\n\ndywypi requires at least Python 3.3 — it's based on the `asyncio` library, which uses the `yield from` syntax.\n\ndywypi has not yet had a stable release, so you must install it from git.  (You may wish to do this from a virtualenv.)\n\n```\npip install [--user] 'git+https://github.com/eevee/dywypi.git#egg=dywypi'\n```\n\n## Starting the bot\n\nTo start the bot run `python -m dywypi ircs://\u003cnick\u003e:\u003cpassword\u003e@\u003chost\u003e/\u003cchannel\u003e`, for example: `python -m dywypi ircs://atlas:hunter2@irc.example.com/example`.\n\nNote that depending on your system, your Python 3 binary may be called `python3`.\n\nBy default, the bot doesn't load any plugins.  Pass one or more `-p \u003cname\u003e` to load plugins by name, or use `-p ALL` to load all detected plugins.\n\n## Creating a plugin\n\nYou _do not_ need to edit dywypi's codebase to create new plugins.  Instead, put your plugin modules in a `dywypi_plugins` directory.  Any module in the `dywypi_plugins.` namespace will be automatically discovered and scanned.  (Of course, you must still load your plugin with `-p \u003cname\u003e` or `-p ALL`.)\n\n**Don't** create a `dywypi_plugins/__init__.py`.  `dywypi_plugins` is a _namespace package_ (see [PEP 420](http://legacy.python.org/dev/peps/pep-0420/)) and should never contain an `__init__.py`.\n\n### Example Plugin: Reverse\n\n```python\nfrom dywypi.plugin import Plugin\n\nplugin = Plugin('reverse')\n\n@plugin.command('reverse')\ndef reverse(event):\n    yield from event.reply(event.message[::-1])\n```\n\nA conversation with a bot running the reverse plugin would look something like this:\n\n```\n\u003ccampaul\u003e atlas: reverse foobar\n\u003catlas\u003e campaul: raboof\n```\n\n## Development\n\nYou can install in \"editable\" mode by passing `-e` to `pip install`.\n\nThe (currently rather small) test suite uses [pytest](http://pytest.org/latest/).  Run it with `py.test dywypi`.  Tox is also supported; you should be able to run `tox` to run the test suite with coverage support and also do a flake8 pass.\n\nTickets and pull requests are welcome!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feevee%2Fdywypi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feevee%2Fdywypi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feevee%2Fdywypi/lists"}