IRC Consumers

Django Channels IRC provides the AsyncIrcConsumer, which provides basic functionality for interacting with the IRC Server.

Built-in Methods

welcome(self, nickname) (async)

Called when the welcome command is received from IRC. This function is an optional hook for your consumer to take specific actions immediately after connecting to IRC

on_disconnect(self, server, port (async)

Called when the quit command is received from IRC. This function is an optional hook for your consumer to take specific actions immediately after disconnecting from IRC.

send_message(self, channel, text) (async)

Sends a privmsg command to IRC, with the channel paramter as the target channel and the text parameter as the body.

send_command(self, command, channel=None, body=None) (async)

Sends a command to IRC. Whether channel and body are required depends on the particular command. For example, to join the channel my-super-fun-channel, call:

await self.send_command('join', channel='my-super-fun-channel')

Adding Handlers

The outcoming messages can be handled by the built-in methods. However, handlers must be created for responding to incoming IRC messages/commands. You can do that be adding a function to the consumer with the name on_{COMMAND_NAME}. For example, to create a function that runs after a channel is joined, you could write:

from channels_irc.consumers import AsyncIrcConsumer

MyConsumer(AsyncIrcConsumer):
    async def on_join(self, channel, user, body):
        print("You just joined the channel {}".format(channel)

Handlers generally use the command name straight from the IRC spec (e.g. join, part, names). One except is privmsg and pubmsg commands, which have been funneled to a single message command. To process incoming messages, use the on_message handler:

MyConsumer(AsyncIrcConsumer):
    async def on_message(self, channel, user, body):
        print("User {} just posted {} to channel {}".format(
            user, body, channel
        )

NOTE: Ping/Pong messages and responses are handled automatically by the client. You should only need to write a specific ping handler if you need some extra functionality besides send the pong response back