Advertisement
GoGoJJTech

Untitled

Jul 25th, 2014
326
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.93 KB | None | 0 0
  1. from oyoyo.client import IRCApp, IRCClient
  2. from oyoyo.cmdhandler import DefaultCommandHandler as CommandHandler
  3. import oyoyo.helpers as irc_help
  4. import oyoyo.parse as irc_parse
  5. from functools import partial
  6. import logging;logging.basicConfig(level=logging.INFO)
  7. import random;random.seed()
  8.  
  9. class URI_Parser:
  10. '''defined here:
  11. https://www.iana.org/assignments/uri-schemes/prov/irc
  12. '''
  13. URI_PREFIX = 'irc://'
  14. DEFAULT_PORT = 6667
  15. DEFAULT_CHANNEL = '#ircdb'
  16. def __init__(self,uri):
  17. self.uri = uri
  18. assert self.uri.startswith(self.URI_PREFIX)
  19. self.uri = uri[len(self.URI_PREFIX):]# discard prefix
  20. port_set = self.uri.find(':')
  21. channel_set = self.uri.find('/')
  22. password_set = self.uri.find('?')
  23. host = port_set if port_set >= 0 else (channel_set if channel_set >= 0 else None)
  24. host = self.uri[:host]
  25. port = self.DEFAULT_PORT if port_set<0 else int(self.uri[port_set+1:None if channel_set<0 else channel_set])
  26. channel = self.DEFAULT_CHANNEL if channel_set < 0 else self.uri[channel_set+1:None if password_set<0 else password_set]
  27. password = None if password_set < 0 else self.uri[password_set+1:]
  28. self.port,self.password,self.channel,self.host = port, password, channel, host
  29. def __str__(self):
  30. base_fmt = "{}{}:{}/{}{}"
  31. password_fmt = "?{}"
  32. password = password_fmt.format(self.password) if self.password else ""
  33. return base_fmt.format(self.URI_PREFIX,self.host,self.port,self.channel,password)
  34.  
  35. class UserInfo:
  36. def __init__(self,prefix):
  37. self.name, self.mode, self.user, self.host = irc_parse.parse_nick(prefix)
  38. self.user = self.user#[1:]
  39. self.nick = self.name[:self.name.find("!")]
  40.  
  41. class DatabaseApp(IRCApp):
  42. nick="Test"
  43. class Handler(CommandHandler):
  44. def __init__(self,app,uri,client):
  45. CommandHandler.__init__(self,client)
  46. self.app = app
  47. self.uri = uri
  48. self.nick = app.nick
  49. self.last_victim = None
  50. def welcome(self,*a):
  51. irc_help.join(self.client,self.uri.channel)
  52. self.app.addTimer(1,self.speak)
  53. def kick(self,*a):
  54. irc_help.join(self.client,self.uri.channel)
  55. def respond(self, chan, nick, command):
  56. if command=='Hi':
  57. irc_help.msg(chan,nick,"I know right, {}?!".format(nick))
  58. def privmsg(self, prefix, chan, msg):
  59. userinfo = UserInfo(prefix)
  60. self.last_victim = userinfo.nick
  61. if chan==self.nick:#this was a private message.
  62. print("@[{}]: {}".format(userinfo.nick,msg))
  63. irc_help.msg(self.client,userinfo.nick,"Hey {}.".format(userinfo.nick))
  64. else:#this was a channel message.
  65. print("<{}> @[{}]: {}".format(chan,userinfo.nick, msg))
  66. if msg.startswith("."+self.client.nick): self.respond(chan,userinfo.nick,msg[len(self.client.nick):].strip())
  67. def __init__(self,*connection_list):
  68. IRCApp.__init__(self)
  69. for URI in connection_list:
  70. URI = URI_Parser(URI)
  71. client = IRCClient(partial(self.Handler,self,URI),host=URI.host,port=URI.port,nick=self.nick,blocking=True)
  72. self.addClient(client)
  73.  
  74. if __name__=="__main__":
  75. dbapp = DatabaseApp("irc://irc.linkandzelda.com/#GoGo")
  76. dbapp.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement