1+ import pprint
2+ import socket
13from twisted .internet import reactor
24from base_plugin import SimpleCommandPlugin , BasePlugin
35from plugins .core .player_manager import permissions , UserLevels
@@ -51,13 +53,21 @@ def whois(self, data):
5153 @permissions (UserLevels .MODERATOR )
5254 def promote (self , data ):
5355 """Promotes/demoates a user to a specific rank. Syntax: /promote [username] [rank] (where rank is either: registered, moderator, admin, or guest))"""
56+ self .logger .trace ("Promote command received with the following data: %s" % ":" .join (data ))
5457 if len (data ) > 0 :
5558 name = " " .join (data [:- 1 ])
59+ self .logger .trace ("Extracted the name %s in promote command." % name )
5660 rank = data [- 1 ].lower ()
61+ self .logger .trace ("Extracted the rank %s in the promote command." % rank )
5762 player = self .player_manager .get_by_name (name )
63+ self .logger .trace ("Player object in promote command, found by name, is %s." % str (player ))
5864 if player is not None :
65+ self .logger .trace ("Player object was not None. Dump of player object follows." )
66+ for line in pprint .pformat (player ):
67+ self .logger .trace ("\t " + line )
5968 old_rank = player .access_level
6069 if old_rank >= self .protocol .player .access_level :
70+ self .logger .trace ("The old rank was greater or equal to the current rank. Sending a message and returning." )
6171 self .protocol .send_chat_message (
6272 "You cannot change that user's access level as they are at least at an equal level as you." )
6373 return
@@ -70,23 +80,32 @@ def promote(self, data):
7080 elif rank == "guest" :
7181 self .make_guest (player )
7282 else :
83+ self .logger .trace ("Non-existent rank. Returning with a help message." )
7384 self .protocol .send_chat_message ("No such rank!\n " + self .promote .__doc__ )
7485 return
7586
87+ self .logger .trace ("Sending promotion message to promoter." )
7688 self .protocol .send_chat_message ("%s: %s -> %s" % (
7789 player .colored_name (self .config .colors ), str (UserLevels (old_rank )).split ("." )[1 ],
7890 rank .upper ()))
79- self .factory .protocols [player .protocol ].send_chat_message (
80- "%s has promoted you to %s" % (
81- self .protocol .player .colored_name (self .config .colors ), rank .upper ()))
91+ self .logger .trace ("Sending promotion message to promoted player." )
92+ try :
93+ self .factory .protocols [player .protocol ].send_chat_message (
94+ "%s has promoted you to %s" % (
95+ self .protocol .player .colored_name (self .config .colors ), rank .upper ()))
96+ except KeyError :
97+ self .logger .trace ("Promoted player is not logged in." )
8298 else :
99+ self .logger .trace ("Player wasn't found. Sending chat message to player." )
83100 self .protocol .send_chat_message ("Player not found!\n " + self .promote .__doc__ )
84101 return
85102 else :
103+ self .logger .trace ("Received blank promotion command. Sending help message." )
86104 self .protocol .send_chat_message (self .promote .__doc__ )
87105
88106 @permissions (UserLevels .OWNER )
89107 def make_guest (self , player ):
108+ self .logger .trace ("Setting %s to GUEST" , player .name )
90109 player .access_level = UserLevels .GUEST
91110 try :
92111 self .player_manager .session .commit ()
@@ -96,6 +115,7 @@ def make_guest(self, player):
96115
97116 @permissions (UserLevels .MODERATOR )
98117 def make_registered (self , player ):
118+ self .logger .trace ("Setting %s to REGISTERED" , player .name )
99119 player .access_level = UserLevels .REGISTERED
100120 try :
101121 self .player_manager .session .commit ()
@@ -106,6 +126,7 @@ def make_registered(self, player):
106126 @permissions (UserLevels .ADMIN )
107127 def make_mod (self , player ):
108128 player .access_level = UserLevels .MODERATOR
129+ self .logger .trace ("Setting %s to MODERATOR" , player .name )
109130 try :
110131 self .player_manager .session .commit ()
111132 except :
@@ -114,6 +135,7 @@ def make_mod(self, player):
114135
115136 @permissions (UserLevels .OWNER )
116137 def make_admin (self , player ):
138+ self .logger .trace ("Setting %s to ADMIN" , player .name )
117139 player .access_level = UserLevels .ADMIN
118140 try :
119141 self .player_manager .session .commit ()
@@ -144,12 +166,22 @@ def kick(self, data):
144166 @permissions (UserLevels .ADMIN )
145167 def ban (self , data ):
146168 """Bans an IP (retrieved by /whois). Syntax: /ban [ip address]"""
147- ip = data [0 ]
148- self .player_manager .ban (ip )
149- self .protocol .send_chat_message ("Banned IP: %s" % ip )
150- self .logger .warning ("%s banned IP: %s" , self .protocol .player .name , ip )
169+ try :
170+ ip = data [0 ]
171+ socket .inet_aton (ip )
172+ self .logger .debug ("Banning IP address %s" % ip )
173+ self .player_manager .ban (ip )
174+ self .protocol .send_chat_message ("Banned IP: %s" % ip )
175+ self .logger .warning ("%s banned IP: %s" , self .protocol .player .name , ip )
176+ return False
177+ except socket .error :
178+ self .ban_by_name (data )
151179 return False
152180
181+ def ban_by_name (self , data ):
182+ raise NotImplementedError
183+
184+
153185 @permissions (UserLevels .ADMIN )
154186 def bans (self , data ):
155187 """Lists the currently banned IPs. Syntax: /bans"""
0 commit comments