IRC event-driven library (mirrored from
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 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 Initial commit 2020-03-12 13:17:08 -05:00


Build Status


example code

import ircstates, irctokens, ircevents, socket

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

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

sock.connect((HOST, POST))

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

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()}")

def _display(line, state):
    print(f"> {line.format()}")

def _ping(line, state)
    _send(f"PONG {line.params[0]}")

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

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

# Run event loop