Debugger.handle()   F
last analyzed

Complexity

Conditions 9

Size

Total Lines 34

Duplication

Lines 0
Ratio 0 %

Importance

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