Skip to main content

asyncio-based rfc2812-compliant IRC Client

Project description

https://readthedocs.org/projects/bottom-docs/badge?style=flat-square https://img.shields.io/travis/numberoverzero/bottom/master.svg?style=flat-square https://img.shields.io/codecov/c/github/numberoverzero/bottom/master.svg?style=flat-square https://img.shields.io/pypi/v/bottom.svg?style=flat-square https://img.shields.io/github/issues-raw/numberoverzero/bottom.svg?style=flat-square https://img.shields.io/pypi/l/bottom.svg?style=flat-square

asyncio-based rfc2812-compliant IRC Client (3.5+)

bottom isn’t a kitchen-sink library. Instead, it provides a consistent API with a small surface area, tuned for performance and ease of extension. Similar to the routing style of bottle.py, hooking into events is one line.

Installation

pip install bottom

Getting Started

Create an instance:

import asyncio
import bottom

host = 'chat.freenode.net'
port = 6697
ssl = True

NICK = "bottom-bot"
CHANNEL = "#bottom-dev"

bot = bottom.Client(host=host, port=port, ssl=ssl)

Send nick/user/join when connection is established:

@bot.on('CLIENT_CONNECT')
async def connect(**kwargs):
    bot.send('NICK', nick=NICK)
    bot.send('USER', user=NICK,
             realname='https://github.com/numberoverzero/bottom')

    # Don't try to join channels until the server has
    # sent the MOTD, or signaled that there's no MOTD.
    done, pending = await asyncio.wait(
        [bot.wait("RPL_ENDOFMOTD"),
         bot.wait("ERR_NOMOTD")],
        loop=bot.loop,
        return_when=asyncio.FIRST_COMPLETED
    )

    # Cancel whichever waiter's event didn't come in.
    for future in pending:
        future.cancel()

    bot.send('JOIN', channel=CHANNEL)

Respond to ping:

@bot.on('PING')
def keepalive(message, **kwargs):
    bot.send('PONG', message=message)

Echo messages (channel and direct):

@bot.on('PRIVMSG')
def message(nick, target, message, **kwargs):
    """ Echo all messages """
    # don't echo self
    if nick == NICK: return
    # respond directly
    if target == NICK: target = nick
    bot.send("PRIVMSG", target=target, message=message)

Connect and run the bot forever:

bot.loop.create_task(bot.connect())
bot.loop.run_forever()

API

The full API consists of 1 class, with 6 methods:

async Client.connect()

async Client.disconnect()

Client.send(command, **kwargs)

@Client.on(event)

async Client.wait(event)

Client.trigger(event, **kwargs)

Contributors

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bottom-2.0.0.tar.gz (13.0 kB view details)

Uploaded Source

Built Distribution

bottom-2.0.0-py2.py3-none-any.whl (14.4 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file bottom-2.0.0.tar.gz.

File metadata

  • Download URL: bottom-2.0.0.tar.gz
  • Upload date:
  • Size: 13.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for bottom-2.0.0.tar.gz
Algorithm Hash digest
SHA256 8a1bb08981aa1dfb088462cd10251a9148a81cc04c9ef0dce0c86378c0fa21f0
MD5 b647198d0f97040a43f586fd7e77a59f
BLAKE2b-256 87d77b3d2f90ea11cf9192d09acb02f022b6996c589d13e8d61466b61fef44d9

See more details on using hashes here.

File details

Details for the file bottom-2.0.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for bottom-2.0.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 593882a78275e957fdc6be80d9ddaa49372566e7f316430307802272c27eca1d
MD5 c484d4e11cd637237796f0ae047096c8
BLAKE2b-256 ea8dd39d4551f753e10c6c4bab7a12f495b738e9f57a8f8032ef4f0dfc43bb7d

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page