IRC event-driven library (mirrored from https://github.com/aewens/ircevents)
Go to file
aewens 05d00dfc83 Fixed ordering for always run events 2020-03-16 16:56:10 -05:00
ircevents Fixed ordering for always run events 2020-03-16 16:56:10 -05:00
.gitignore Initial commit 2020-03-12 13:17:08 -05:00
.travis.yml Fixed travis-ci config 2020-03-12 13:28:46 -05:00
LICENSE Initial commit 2020-03-12 13:17:08 -05:00
README.md First stable release, fixed various bugs in engine and updated example code to reflect current state of project 2020-03-16 16:18:28 -05:00
VERSION Fixed ordering for always run events 2020-03-16 16:56:10 -05:00
requirements.txt Initial commit 2020-03-12 13:17:08 -05:00
setup.py Initial commit 2020-03-12 13:17:08 -05:00

README.md

ircevents

Build Status

usage

example code

import ircstates, irctokens, ircevents, socket

# Connection settings
NICK = "nickname"
HOST = "127.0.0.1"
POST = 6667

server = ircstates.Server("freenode")
sock   = socket.socket()
events = ircevents.Engine(sock)

sock.connect((HOST, POST))

def _send(text):
    line = irctokens.tokenise(text)
    server.send(line)

def _sent(source, state):
    if not state.get("init"):
        state.set("init", True)
        _send(f"USER {NICK} 0 * :{NICK}")
        _send(f"NICK {NICK}")

    while server.pending():
        send_lines = server.sent(source.send(server.pending()))
        for line in send_lines:
            print(f"< {line.format()}")

@events.when(always_run=True)
def _display(line, state):
    print(f"> {line.format()}")

@events.when(command="PING")
def _ping(line, state)
    _send(f"PONG {line.params[0]}")

@events.when(command="001")
def _join(line, state):
    channels = state.get("channels", list())
    for channel in channels:
        if channel not in server.channels:
            _send(f"JOIN {channel}")

    state.set("joined_channels", True)

# Load ircstates as a state mutation
events.use("ircstates", lambda raw: server.recv(raw))

# Events will be received using 1024 bytes from socket
events.recv_with(lambda source, state: source.recv(1024))

# Before processing new data, send queued data to server
events.pre_process(_sent)

# Define what channels to join
events.ns_set("ircstates", "channels", ["#bots", "#test"])

# Run event loop
events.run()