debugger.py 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import sys
  2. from event import Event
  3. if sys.version_info > (3, 0, 0):
  4. try:
  5. from .basemodule import BaseModule
  6. except (ImportError, SystemError):
  7. from modules.basemodule import BaseModule
  8. else:
  9. try:
  10. from basemodule import BaseModule
  11. except (ImportError, SystemError):
  12. from modules.basemodule import BaseModule
  13. class Debugger(BaseModule):
  14. def post_init(self):
  15. debug_event = Event("__.debug__")
  16. debug_event.define(msg_definition="^\.debug")
  17. debug_event.subscribe(self)
  18. delete_event = Event("__.delete__")
  19. delete_event.define(msg_definition="^\.delete")
  20. delete_event.subscribe(self)
  21. # register ourself to our new debug_event event
  22. self.bot.register_event(debug_event, self)
  23. self.bot.register_event(delete_event, self)
  24. def recurse(self, obj):
  25. if type(obj) is not dict:
  26. print(obj)
  27. else:
  28. for k in obj:
  29. self.recurse(k)
  30. def mem_store_delete(self, mem_store_key):
  31. if not mem_store_key:
  32. return False
  33. if mem_store_key in self.bot.mem_store:
  34. del(self.bot.mem_store[mem_store_key])
  35. return True
  36. def pretty(self, d, event, indent=0):
  37. for key, value in d.items():
  38. if sys.version_info > (3, 0, 0):
  39. self.say(event.user, '\t' * indent + key)
  40. else:
  41. self.say(event.user, '\t' * indent + key.encode('utf-8','ignore'))
  42. if isinstance(value, dict):
  43. self.pretty(value, event, indent+1)
  44. else:
  45. try:
  46. self.say(event.user, '\t' * (indent+1) + str(value))
  47. except:
  48. self.say(event.user,'\t' * (indent+1) + value.encode('utf-8','ignore'))
  49. def handle(self, event):
  50. if not self.bot.brain._isAdmin(event.user):
  51. return
  52. if event.msg.startswith(".delete"):
  53. target = event.msg.split()[-1]
  54. if self.mem_store_delete(target):
  55. self.say(event.user, "deleted " + target + " from mem_store")
  56. return
  57. try:
  58. key = event.msg.split()[1]
  59. keyslist = []
  60. for thing in event.msg.split()[1:]:
  61. keyslist.append(thing)
  62. # print self.bot.mem_store[thing]
  63. if len(keyslist) > 1:
  64. neststring = ""
  65. for k in keyslist:
  66. neststring = neststring+'[\''+k+'\']'
  67. # print neststring
  68. try:
  69. self.pretty(self.bot.mem_store[key], event)
  70. except KeyError:
  71. self.say(event.user, "no key by name " + key)
  72. # HIGHLY insecure; TODO
  73. #self.pretty(self.bot.mem_store[eval(neststring)])
  74. #print self.bot.mem_store['qdb']['#fg']
  75. # outstr = ", ".join(self.bot.mem_store[key])
  76. # self.say(event.user, outstr)
  77. except IndexError:
  78. print("ERROR: ")
  79. print(event.msg)