on_privnotice.py 4.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import asyncio, time
  2. import commands.public, commands.admin, commands.games, commands.statistics
  3. from common import log, queries, font
  4. from events.common import Inform
  5. def process_event(self, connection, event):
  6. log.info(event) # Log to console.
  7. # Ignore server connect messages.
  8. if event.source == None:
  9. return
  10. # Get and update resources.
  11. user = queries.create_or_get_and_update_last_event(self, 'user', 'pn', user_name=event.source.nick, event_subject_name=event.target)
  12. channel = None
  13. commands.public.do_command(self, connection, event, user, channel)
  14. commands.admin.do_command(self, connection, event, user, channel)
  15. commands.statistics.do_command(self, connection, event, user, channel)
  16. commands.games.do_command(self, connection, event, user, channel)
  17. if event.source.nick == connection.get_nickname(): # Message came from myself.
  18. return
  19. elif event.source.nick == "NickServ": # Message from NickServ.
  20. if event.arguments[0].startswith("This nickname is registered"):
  21. connection.privmsg('NickServ', 'identify %s %s' % (self.network.nickname, self.network.password)) # Identify with NickServ. Also doing it on_welcome, but if there is a netsplit or so and there is no welcome, but a need to login, this is needed.
  22. return
  23. elif event.arguments[0].endswith(' is not a registered nickname.') or event.arguments[0].startswith('Nick ') and event.arguments[0].endswith(' isn\'t registered.') or event.arguments[0] == 'Your nick isn\'t registered.': # Username from database is not registered.
  24. log.info('Registerring with NickServ.')
  25. Inform.operators(self, connection, 'Regisring %s%s%s with %sNickServ%s.' % (font.red, self.network.nickname, font.reset, font.red, font.reset))
  26. connection.privmsg('NickServ', 'register %s spamtBK@xs4all.nl' % (self.network.password)) # Register with NickServ.
  27. return
  28. elif event.arguments[0].startswith('Nickname ') and connection.get_nickname() in event.arguments[0] and ' registered' in event.arguments[0]:
  29. Inform.home_channel(self, connection, 'Registerred nickname %s%s%s with NickServ, adjusting settigns.' % font.red, self.network.nickname, font.reset)
  30. connection.privmsg('NickServ', 'ACCESS LIST')
  31. connection.privmsg('NickServ', 'AJOIN ADD %s' % (self.network.home_channel, queries.get_channel_key(self, self.network.home_channel)))
  32. connection.privmsg('NickServ', 'SET AUTOOP ON')
  33. connection.privmsg('NickServ', 'SET HIDE EMAIL ON')
  34. connection.privmsg('NickServ', 'SET KILL QUICK')
  35. connection.privmsg('NickServ', 'SET SECURE ON')
  36. connection.privmsg('NickServ', 'SET URL %snetwork/%s' % (self.webgui['base_url'], self.network.slug))
  37. return
  38. elif event.arguments[0].startswith('You must have been using this nick for at least 30 seconds to register.'):
  39. log.info('Waiting 31 seconds to register with NickServ.')
  40. asyncio.run(register_later(self, connection, 31))
  41. return
  42. elif event.arguments[0].startswith("You are already identified."):
  43. return
  44. elif event.source.nick == "ChanServ":
  45. if event.arguments[0].startswith("Key for channel ") and len(event.arguments[0]) > 5: # Received channel key.
  46. log.info('Saving channel password received from NickServ for: %s' % event.arguments[0].split(' ')[3])
  47. queries.save_channel_key(self, event.arguments[0].split(' ')[3], event.arguments[0].split(' ')[5][:-1])
  48. connection.join(event.arguments[0].split(' ')[3], event.arguments[0].split(' ')[5][:-1])
  49. Inform.owners(self, connection, "Received " + red + event.arguments[0].split(" ")[3] + reset + " key: " + event.arguments.split(" ")[5][:-1])
  50. returnZZ
  51. elif event.arguments[0] == "Password authentication required for that command.": # Not authenticated with NisckServ.
  52. connection.privmsg('NickServ', 'identify %s %s' % (self.network.nickname, self.network.password))
  53. Inform.notice_owners(self, connection, "Not authenticated with NickServ.")
  54. return
  55. elif event.arguments[0].startswith("You have been unbanned from ") or event.arguments[0].endswith(" autokick list is empty.") or event.arguments[0].startswith("You are already in ") or event.arguments[0] == "Syntax: UNBAN channel [nick]" or event.arguments[0] == "/msg ChanServ HELP UNBAN for more information":
  56. return
  57. # if event.arguments[0].startswith("Channel ") and event.arguments[0].endswith(" has no key."):
  58. # return
  59. if event.source.nick != "Global":
  60. Inform.notice_owners(self, connection, 'Notice from %s%s%s: %s%s' % (font.red, event.source.nick, font.grey, font.reset, event.arguments[0]))
  61. async def register_later(self, connection, seconds):
  62. await asyncio.sleep(seconds)
  63. connection.privmsg('NickServ', 'identify %s %s' % (self.network.nickname, self.network.password))