Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python3
- """
- trying to implement monadic IRC Bot.
- """
- import socket
- server = "irc.efnet.org"
- port = 6667
- nick = "mond"
- user = "mond"
- real = "mond"
- channels = ["#wololo"]
- msg = "Yo blud"
- class IRCMonad(object):
- def __init__(self, v, e=None):
- self.v = v
- self.e = e
- def __repr__(self):
- if self.v is not None:
- return repr(self.v)
- else:
- return repr(self.e)
- def bind(self, f):
- if self.v is not None:
- try:
- ret = f(self.v)
- except Exception as e:
- return IRCMonad(None, e)
- if not isinstance(ret, IRCMonad):
- return IRCMonad(ret)
- else:
- return ret
- else:
- return IRCMonad(None, self.e)
- def __rshift__(self, bindee):
- return self.bind(bindee)
- def init():
- options = {}
- options["channels"] = []
- options["server"] = server
- options["port"] = port
- options["nick"] = nick
- options["user"] = user
- options["real"] = real
- options["channels"] += channels
- options["msg"] = msg
- return options
- def connect(options):
- options["sock"] = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- options["sock"].connect((options["server"], options["port"]))
- print(options)
- return options
- def ident(options):
- options["sock"].send(bytes( "USER {} 0 *: {}\r\n".format(options['user'], options['real']), 'utf-8'))
- options["sock"].send(bytes("NICK {}\r\n".format(options["nick"]), 'utf-8'))
- print(options)
- return options
- def join(options):
- for c in options["channels"]:
- options["sock"].send(bytes("JOIN :{}\r\n".format(c), 'utf-8'))
- print(options)
- return options
- def privmsg(options):
- for c in options["channels"]:
- options["sock"].send(bytes("PRIVMSG {} :{}\r\n".format(c, options["msg"]), 'utf-8'))
- print(options)
- return options
- def listen(options):
- while True:
- data = options["sock"].recv(1024).decode('utf-8', 'ignore')
- print(data)
- return options
- if __name__=='__main__':
- print( \
- IRCMonad(init()) >> connect >> ident >> join >> privmsg >> listen \
- )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement