Skip to content
Python IRC bot built atop asyncio
Find file
Failed to load latest commit information.
dywypi More toying with uno. Fleshing out plugin tests. Aug 15, 2014
.gitignore Update gitignore. Mar 22, 2014


dywypi is an IRC bot you can extend with plugins.

It also contains a simple IRC protocol implementation for asyncio, which can be used independently of the bot.


dywypi requires at least Python 3.3 — it's based on the asyncio library, which uses the yield from syntax.

dywypi has not yet had a stable release, so you must install it from git. (You may wish to do this from a virtualenv.)

pip install [--user] 'git+'

Starting the bot

To start the bot run python -m dywypi ircs://<nick>:<password>@<host>/<channel>, for example: python -m dywypi ircs://

Note that depending on your system, your Python 3 binary may be called python3.

By default, the bot doesn't load any plugins. Pass one or more -p <name> to load plugins by name, or use -p ALL to load all detected plugins.

Creating a plugin

You 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 <name> or -p ALL.)

Don't create a dywypi_plugins/ dywypi_plugins is a namespace package (see PEP 420) and should never contain an

Example Plugin: Reverse

from dywypi.plugin import Plugin

plugin = Plugin('reverse')

def reverse(event):
    yield from event.reply(event.message[::-1])

A conversation with a bot running the reverse plugin would look something like this:

<campaul> atlas: reverse foobar
<atlas> campaul: raboof


You can install in "editable" mode by passing -e to pip install.

The (currently rather small) test suite uses pytest. 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.

Tickets and pull requests are welcome!

Something went wrong with that request. Please try again.