parent
8ca3e79327
commit
b1eaa4ecd7
@ -0,0 +1,43 @@
|
||||
import socket
|
||||
from threading import Thread
|
||||
from functools import wraps
|
||||
|
||||
class V5(object):
|
||||
def __init__(self, v5, irc):
|
||||
""" Initialize v5 handle
|
||||
:irc <IRC>: an initialized IRC object """
|
||||
self.irc = irc
|
||||
self._sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
|
||||
self._sock.bind(v5)
|
||||
self._handler = Thread(target=self._handle)
|
||||
self._callbacks = []
|
||||
|
||||
def start(self):
|
||||
# Start v5 handler
|
||||
self._handler.start()
|
||||
|
||||
def on(self, event):
|
||||
""" Adds a callback to the v5 handler
|
||||
Event is a function taking in parameter a list of channels and a
|
||||
string, and return True if the callback should be executed """
|
||||
|
||||
def callback(func):
|
||||
@wraps(func)
|
||||
def wrapper(channels, message):
|
||||
func(channels, message)
|
||||
self._callbacks.append((event, wrapper))
|
||||
return wrapper
|
||||
|
||||
return callback
|
||||
|
||||
|
||||
def _handle(self):
|
||||
while True:
|
||||
data, addr = self._sock.recvfrom(4096)
|
||||
data = data.decode()
|
||||
channels, message = data.split(":", 1)
|
||||
channels = channels.split(" ")
|
||||
|
||||
for event, callback in self._callbacks:
|
||||
if event(channels, message):
|
||||
callback(channels, message)
|
Loading…
Reference in new issue