Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from oyoyo.client import IRCApp, IRCClient
- from oyoyo.cmdhandler import DefaultCommandHandler as CommandHandler
- import oyoyo.helpers as irc_help
- import oyoyo.parse as irc_parse
- from functools import partial
- import logging;logging.basicConfig(level=logging.INFO)
- import random;random.seed()
- class URI_Parser:
- '''defined here:
- https://www.iana.org/assignments/uri-schemes/prov/irc
- '''
- URI_PREFIX = 'irc://'
- DEFAULT_PORT = 6667
- DEFAULT_CHANNEL = '#ircdb'
- def __init__(self,uri):
- self.uri = uri
- assert self.uri.startswith(self.URI_PREFIX)
- self.uri = uri[len(self.URI_PREFIX):]# discard prefix
- port_set = self.uri.find(':')
- channel_set = self.uri.find('/')
- password_set = self.uri.find('?')
- host = port_set if port_set >= 0 else (channel_set if channel_set >= 0 else None)
- host = self.uri[:host]
- port = self.DEFAULT_PORT if port_set<0 else int(self.uri[port_set+1:None if channel_set<0 else channel_set])
- channel = self.DEFAULT_CHANNEL if channel_set < 0 else self.uri[channel_set+1:None if password_set<0 else password_set]
- password = None if password_set < 0 else self.uri[password_set+1:]
- self.port,self.password,self.channel,self.host = port, password, channel, host
- def __str__(self):
- base_fmt = "{}{}:{}/{}{}"
- password_fmt = "?{}"
- password = password_fmt.format(self.password) if self.password else ""
- return base_fmt.format(self.URI_PREFIX,self.host,self.port,self.channel,password)
- class UserInfo:
- def __init__(self,prefix):
- self.name, self.mode, self.user, self.host = irc_parse.parse_nick(prefix)
- self.user = self.user#[1:]
- self.nick = self.name[:self.name.find("!")]
- class DatabaseApp(IRCApp):
- nick="Test"
- class Handler(CommandHandler):
- def __init__(self,app,uri,client):
- CommandHandler.__init__(self,client)
- self.app = app
- self.uri = uri
- self.nick = app.nick
- self.last_victim = None
- def welcome(self,*a):
- irc_help.join(self.client,self.uri.channel)
- self.app.addTimer(1,self.speak)
- def kick(self,*a):
- irc_help.join(self.client,self.uri.channel)
- def respond(self, chan, nick, command):
- print("<{}> @[{}]: {}".format(chan,userinfo.nick, msg))
- #if command.lower()=='Hi':
- if msg.startswith("Hi"):
- irc_help.msg(chan,nick,"I know right, {}?!".format(nick))
- def privmsg(self, prefix, chan, msg):
- userinfo = UserInfo(prefix)
- self.last_victim = userinfo.nick
- if chan==self.nick:#this was a private message.
- print("@[{}]: {}".format(userinfo.nick,msg))
- irc_help.msg(self.client,userinfo.nick,"Hey {}.".format(userinfo.nick))
- else:#this was a channel message.
- print("<{}> @[{}]: {}".format(chan,userinfo.nick, msg))
- if msg.startswith("."+self.client.nick):
- self.respond(chan,userinfo.nick,msg[len(self.client.nick)+1:].strip())
- def __init__(self,*connection_list):
- IRCApp.__init__(self)
- for URI in connection_list:
- URI = URI_Parser(URI)
- client = IRCClient(partial(self.Handler,self,URI),host=URI.host,port=URI.port,nick=self.nick,blocking=True)
- self.addClient(client)
- if __name__=="__main__":
- dbapp = DatabaseApp("irc://irc.linkandzelda.com/#GoGo")
- dbapp.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement