on_join.py 4.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. from common import log
  2. from events.common import Lastact
  3. bold = "\x02"
  4. italic = "\x1D"
  5. underline = "\x1F"
  6. reverse = "\x16" # swap background and foreground colors ("reverse video")
  7. reset = "\x0F"
  8. blue = "\x0302"
  9. green = "\x0303"
  10. red = "\x0304"
  11. grey = "\x0314"
  12. def process_event(self, connection, event):
  13. log.info(event)
  14. # Update last act.
  15. Lastact.update(self, event.source.nick, "join", channel=event.target)
  16. # Add join event to database for statistics.
  17. if not self.db.one("SELECT id FROM channels WHERE name='" + event.target + "' AND network='" + self.network + "'"): # Channel does not exist in database.
  18. self.db.run("INSERT INTO channels (name, network) VALUES ('" + event.target + "', '" + self.network + "')")
  19. if not self.db.one("SELECT id FROM users WHERE name='" + event.source.nick + "' AND network='" + self.network + "'"): # User does not exist in database.
  20. self.db.run("INSERT INTO users (name, network) VALUES ('" + event.source.nick + "', '" + self.network + "')")
  21. if not self.db.one("SELECT id FROM joins WHERE channel='" + event.target + "' AND channel_network='" + self.network + "' AND \"user\"='" + event.source.nick + "' AND user_network='" + self.network + "'"): # No record yet
  22. self.db.run("INSERT INTO joins (channel, channel_network, \"user\", user_network, joins) VALUES ('" + event.target + "', '" + self.network + "', '" + event.source.nick + "', '" + self.network + "', 0)")
  23. self.db.run("UPDATE joins SET joins = joins + 1 WHERE channel='" + event.target + "' AND channel_network='" + self.network + "' AND \"user\"='" + event.source.nick + "' AND user_network='" + self.network + "'")
  24. if event.source.nick == connection.get_nickname(): # The bot joined a channel.
  25. connection.who(self.homechannel) # Get whoreplies for users of homechannel.
  26. if self.channels[event.target].has_key():
  27. if event.target in self.channelkeys: # New key used to join channel.
  28. self.db.run("UPDATE channels SET key='" + self.channelkeys[event.target] + "' WHERE name='" + event.target + "' AND network='" + self.network + "'") # Save new key to DB.
  29. del self.channelkeys[event.target] # Delete entry.
  30. if event.target == self.homechannel: # Home channel.
  31. connection.who(connection.get_nickname()) # get whoreply to add bot to protectees.
  32. return # Do not greet myself.
  33. # Stop if greeting is not wanted.
  34. joingreeting = self.db.one("SELECT join_greeting FROM channels WHERE name='" + event.target + "' AND network='" + self.network + "'")
  35. stopgreet = self.db.one("SELECT stopgreet FROM joins WHERE channel='" + event.target + "' AND channel_network='" + self.network + "' AND \"user\"='" + event.source.nick + "' AND user_network='" + self.network + "'")
  36. if not joingreeting or stopgreet:
  37. return
  38. # Show greeting.
  39. joins = self.db.one("SELECT joins FROM joins WHERE channel='" + event.target + "' AND channel_network='" + self.network + "' AND \"user\"='" + event.source.nick + "' AND user_network='" + self.network + "'")
  40. if not self.db.one("SELECT join_greeting FROM channels WHERE name='" + event.target + "' AND network ='" + self.network + "'"): # Do not greet users joining the channel.
  41. return
  42. if joins == 1:
  43. message = "Welcome to " + red + event.target + reset + ", " + red + event.source.nick + reset + ". For a list of command type " + blue + self.cmdchar + "cmd" + reset + "."
  44. if joins == 3:
  45. message = "Welcome back in " + red + event.target + reset + ", " + red + event.source.nick + reset + ". To turn of greetings, type " + blue + "!stopgreet" + reset + "."
  46. if joins == 5:
  47. if self.channels[event.target].has_key(): # Channel has a password.
  48. message = "Welcome back again " + red + event.source.nick + reset + ". To automaticly join this channel type " + blue + "/ns ajoin " + reset + "ADD " + red + event.source.nick + " " + event.target + reset + italic + " password"
  49. else: # Channel does not have a password.
  50. message = "Welcome back again " + red + event.source.nick + reset + ". To automaticly join this channel type " + blue + "/ns ajoin " + reset + "ADD " + red + event.source.nick + " " + event.target
  51. if joins < 100 and str(joins)[-1:] == "0":
  52. message = red + event.source.nick + reset + " you have joined " + red + event.target + reset + " " + str(joins) + " times!"
  53. if joins < 1000 and str(joins)[-2:] == "00" or joins < 1000 and str(joins)[-2:] == "50":
  54. message = "Epic! " + red + event.source.nick + reset + " you have joined " + red + event.target + reset + " " + str(joins) + " times!"
  55. if joins < 10000 and str(joins)[-2:] == "00":
  56. message = "AMAZING! " + red + event.source.nick + reset + " you have joined " + red + event.target + reset + " " + str(joins) + " times!"
  57. try:
  58. connection.privmsg(event.target, message)
  59. except:
  60. pass