Mercurial > traipse
annotate orpg/chat/commands.py @ 39:ed322725b928 ornery-orc tip
Traipse 'OpenRPG' {110114-00}
Traipse is a distribution of OpenRPG that is designed to be easy to setup and go. Traipse also makes it easy for developers to work on code without fear of sacrifice. 'Ornery-Orc' continues the trend of 'Grumpy' and adds fixes to the code. 'Ornery-Orc's main goal is to offer more advanced features and enhance the productivity of the user.
Update Summary (Closed)
New Features:
New to Map, can re-order Grid, Miniatures, and Whiteboard layer draw order
New to Server GUI, can now clear log
New Earthdawn Dieroller
New IronClaw roller, sheet, and image
New ShapeShifter PC Sheet
Updates:
Update to Warhammer PC Sheet. Rollers set as macros. Should work with little maintanence.
Update to Browser Server window. Display rooms with ' " & cleaner
Update to Server. Handles ' " & cleaner
Update to Dieroller. Cleaner, more effecient expression system
Update to Hidden Die plugin, allows for non standard dice rolls
Update to location.py, allows for more portable references when starting Traipse
Update to the Features node
Fixes:
Fix to InterParse that was causing an Infernal Loop with Namespace Internal
Fix to XML data, removed old Minidom and switched to Element Tree
Fix to Server that was causing eternal attempt to find a Server ID, in Register Rooms thread
Fix to Server, removing wxPython dependencies where not needed
Fix to metaservers.xml file not being created
Fix to Single and Double quotes in Whiteboard text
Fix to Background images not showing when using the Image Server
Fix to Duplicate chat names appearing
Fix to Server GUI's logging output
Fix to FNB.COLORFUL_TABS bug
Fix to Gametree for XSLT Sheets
Fix to Gametree for locating gametree files
Fix to Send to Chat from Gametree
Fix to Gametree, renaming and remapping operates correctly
Fix to aliaslib, prevents error caused when SafeHTML is sent None
author | sirebral |
---|---|
date | Fri, 14 Jan 2011 05:24:52 -0600 |
parents | fc48380f0c9f |
children |
rev | line source |
---|---|
28 | 1 # This class implements the basic chat commands available in the chat interface. |
2 # | |
3 # Defines: | |
4 # __init__(self,chat) | |
5 # docmd(self,text) | |
6 # on_help(self) | |
7 # on_whisper(self,text) | |
8 # | |
9 | |
10 import string, time | |
11 import orpg.orpg_version | |
12 import orpg.orpg_windows | |
18 | 13 import traceback |
14 | |
27 | 15 from orpg.orpgCore import component |
18 | 16 from orpg.tools.orpg_log import logger |
28 | 17 |
18 ##-------------------------------------------------------------- | |
19 ## dynamically loading module for extended developer commands | |
20 ## allows developers to work on new chat commands without | |
21 ## integrating them directly into the ORPG code allowing | |
22 ## updating of their code without merging changes | |
23 ## cmd_ext.py should NOT be included in the CVS or Actual Releases | |
24 | |
25 try: | |
26 import cmd_ext | |
27 print "Importing Developer Extended Command Set" | |
28 except: pass | |
29 ##---------------------------------------------------------------- | |
30 | |
31 ANTI_LOG_CHAR = '!' | |
32 | |
33 class chat_commands: | |
18 | 34 |
28 | 35 def __init__(self,chat): |
36 self.post = chat.Post | |
37 self.colorize = chat.colorize | |
38 self.session = chat.session | |
39 self.settings = chat.settings | |
40 self.chat = chat | |
41 self.cmdlist = {} | |
42 self.shortcmdlist = {} | |
43 self.defaultcmds() | |
44 self.defaultcmdalias() | |
45 self.previous_whisper = [] | |
18 | 46 |
28 | 47 def addcommand(self, cmd, function, helpmsg): |
48 if not self.cmdlist.has_key(cmd) and not self.shortcmdlist.has_key(cmd): | |
49 self.cmdlist[cmd] = {} | |
50 self.cmdlist[cmd]['function'] = function | |
51 self.cmdlist[cmd]['help'] = helpmsg | |
52 | |
53 def addshortcmd(self, shortcmd, longcmd): | |
54 if not self.shortcmdlist.has_key(shortcmd) and not self.cmdlist.has_key(shortcmd): | |
55 self.shortcmdlist[shortcmd] = longcmd | |
56 | |
57 def removecmd(self, cmd): | |
58 if self.cmdlist.has_key(cmd): | |
59 del self.cmdlist[cmd] | |
60 elif self.shortcmdlist.has_key(cmd): | |
61 del self.shortcmdlist[cmd] | |
18 | 62 |
28 | 63 def defaultcmds(self): |
64 self.addcommand('/help', self.on_help, '- Displays this help message') | |
65 self.addcommand('/version', self.on_version, ' - Displays current version of OpenRPG.') | |
66 self.addcommand('/me', self.chat.emote_message, ' - Alias for **yourname does something.**') | |
67 self.addcommand('/ignore', self.on_ignore, '[player_id,player_id,... | ignored_ip,ignored_ip,... | list] - Toggle ignore for user associated with that player ID. Using the IP will remove only not toggle.') | |
68 self.addcommand('/load', self.on_load, 'filename - Loads settings from another ini file from the myfiles directory.') | |
69 self.addcommand('/role', self.on_role, '[player_id = GM | Player | Lurker] - Get player roles from ther server, self.or change the role of a player.') | |
70 self.addcommand('/font', self.on_font, 'fontname - Sets the font.') | |
71 self.addcommand('/fontsize', self.on_fontsize, 'size - Sets the size of your fonts. Recomended 8 or better for the size.') | |
72 self.addcommand('/close', self.on_close, 'Close the chat tab') | |
73 self.addcommand('/set', self.on_set, '[setting[=value]] - Displays one or all settings, self.or sets a setting.') | |
74 self.addcommand('/whisper', self.on_whisper, 'player_id_number, ... = message - Whisper to player(s). Can contain multiple IDs.') | |
75 self.addcommand('/gw', self.on_groupwhisper, 'group_name=message - Type /gw help for more information') | |
76 self.addcommand('/gm', self.on_gmwhisper, 'message - Whispers to all GMs in the room') | |
77 self.addcommand('/name', self.on_name, 'name - Change your name.') | |
78 self.addcommand('/time', self.on_time, '- Display the local and GMT time and date.') | |
79 self.addcommand('/status', self.on_status, 'your_status - Set your online status (afk,away,etc..).') | |
80 self.addcommand('/dieroller', self.on_dieroller, '- Set your dieroller or list the available rollers.') | |
81 self.addcommand('/log', self.on_log, '[ on | off | to <em>filename</em> ] - Check log state, additionally turn logging on, self.off, self.or set the log filename prefix.') | |
82 self.addcommand('/update', self.on_update, '[get] - Get the latest version of OpenRPG.') | |
83 self.addcommand('/moderate', self.on_moderate, '[ on | off ][player_id=on|off] - Show who can speak in a moderated room, self.or turn room moderation on or off.') | |
84 self.addcommand('/tab', self.invoke_tab, 'player_id - Creates a tab so you can whisper rolls to youror what ever') | |
85 self.addcommand('/ping', self.on_ping, '- Ask for a response from the server.') | |
86 self.addcommand('/admin', self.on_remote_admin, '- Remote admin commands') | |
87 self.addcommand('/description', self.on_description, 'message - Creates a block of text, used for room descriptions and such') | |
88 self.addcommand('/sound', self.on_sound, 'Sound_URL - Plays a sound for all clients in the room.') | |
89 self.addcommand('/purge', self.on_purge, 'This will clear the entire chat window') | |
90 self.addcommand('/advfilter', self.on_filter, 'This will toggle the Advanced Filter') | |
18 | 91 |
28 | 92 def defaultcmdalias(self): |
93 self.addshortcmd('/?', '/help') | |
94 self.addshortcmd('/he', '/me') | |
95 self.addshortcmd('/she', '/me') | |
96 self.addshortcmd('/i', '/ignore') | |
97 self.addshortcmd('/w', '/whisper') | |
98 self.addshortcmd('/nick', '/name') | |
99 self.addshortcmd('/date', '/time') | |
100 self.addshortcmd('/desc', '/description') | |
101 self.addshortcmd('/d', '/description') | |
102 self.addshortcmd('/sleep', '/me falls asleep') | |
103 | |
104 def docmd(self,text): | |
105 cmdsearch = string.split(text,None,1) | |
106 cmd = string.lower(cmdsearch[0]) | |
107 start = len(cmd) | |
108 end = len(text) | |
109 cmdargs = text[start+1:end] | |
110 if self.cmdlist.has_key(cmd): | |
111 self.cmdlist[cmd]['function'](cmdargs) | |
112 elif self.shortcmdlist.has_key(cmd): | |
113 self.docmd(self.shortcmdlist[cmd] + " " + cmdargs) | |
114 else: | |
115 msg = "Sorry I don't know what %s is!" % (cmd) | |
116 self.chat.InfoPost(msg) | |
18 | 117 |
28 | 118 def on_filter(self, cmdargs): |
119 test = not self.chat.advancedFilter | |
120 for tab in self.chat.parent.whisper_tabs: | |
121 tab.advancedFilter = not self.chat.advancedFilter | |
122 for tab in self.chat.parent.null_tabs: | |
123 tab.advancedFilter = not self.chat.advancedFilter | |
124 for tab in self.chat.parent.group_tabs: | |
125 tab.advancedFilter = not self.chat.advancedFilter | |
126 if self.chat.parent.GMChatPanel != None: | |
127 self.chat.parent.GMChatPanel.advancedFilter = not self.chat.advancedFilter | |
128 self.chat.advancedFilter = not self.chat.advancedFilter | |
129 if self.chat.advancedFilter: | |
130 self.chat.InfoPost("Advanced Filtering has been turned On") | |
131 else: | |
132 self.chat.InfoPost("Advanced Filtering has been turned Off") | |
18 | 133 |
28 | 134 def on_purge(self, cmdargs): |
135 self.chat.PurgeChat() | |
136 self.chat.InfoPost('Chat Buffer has been Purged!') | |
137 | |
138 def on_sound(self, cmdargs): | |
139 if len(cmdargs) < 8: | |
140 self.chat.InfoPost("You must provide a URL for the file name, it does not work for just local sound files") | |
141 return | |
142 args = string.split(cmdargs, None, -1) | |
18 | 143 |
28 | 144 if args[0] == 'loop': |
145 snd = args[1].replace('&', '&') | |
146 loop = '1' | |
147 else: | |
148 snd = cmdargs.replace('&', '&') | |
149 loop = '' | |
150 type = 'remote' | |
151 (name, ip, id, text_status, version, protocol_version, client_string, role) = self.session.get_my_info() | |
152 group_id = self.session.group_id | |
153 if (role != 'Lurker' and group_id != '0') or self.session.get_status() != 1: | |
154 try: | |
155 self.chat.sound_player.play(snd, type, loop) | |
156 if type == 'remote': | |
157 snd_xml = '<sound url="' + snd + '" group_id="' + group_id + '" from="' + id + '" loop="' + str(loop) + '" />' | |
158 self.session.send_sound(snd_xml) | |
159 except Exception, e: | |
160 print e | |
161 self.chat.InfoPost("Invalid sound file!") | |
162 elif role == 'Lurker': | |
163 self.chat.InfoPost("You must be a player or a GM to send a sound file!") | |
164 elif group_id == '0': | |
165 self.chat.InfoPost("You cannot send sound files to the lobby!") | |
166 else: | |
167 self.chat.InfoPost("Something dun fuckered up Frank!") | |
18 | 168 |
28 | 169 def on_version(self, cmdargs=""): |
170 self.chat.InfoPost("Version is OpenRPG " + self.chat.version) | |
18 | 171 |
28 | 172 def on_load(self, cmdargs): |
173 args = string.split(cmdargs,None,-1) | |
174 try: | |
175 self.settings.setup_ini(args[0]) | |
176 self.settings.reload_settings(self.chat) | |
177 self.chat.InfoPost("Settings Loaded from file " + args[0] ) | |
178 except Exception,e: | |
179 print e | |
180 self.chat.InfoPost("ERROR Loading settings") | |
18 | 181 |
28 | 182 def on_font(self, cmdargs): |
183 try: | |
184 fontsettings = self.chat.set_default_font(fontname=cmdargs, fontsize=None) | |
185 except: | |
186 self.chat.InfoPost("ERROR setting default font") | |
18 | 187 |
28 | 188 def on_fontsize(self, cmdargs): |
189 args = string.split(cmdargs,None,-1) | |
190 try: | |
191 fontsettings = self.chat.set_default_font(fontname=None, fontsize=int(args[0])) | |
192 except Exception, e: | |
193 print e | |
194 self.chat.InfoPost("ERROR setting default font size") | |
18 | 195 |
28 | 196 def on_close(self, cmdargs): |
197 try: | |
198 chatpanel = self.chat | |
199 if (chatpanel.sendtarget == "all"): | |
200 chatpanel.InfoPost("Error: cannot close public chat tab.") | |
201 else: | |
202 chatpanel.chat_timer.Stop() | |
203 chatpanel.parent.onCloseTab(0) | |
204 except: | |
205 self.chat.InfoPost("Error: cannot close private chat tab.") | |
18 | 206 |
28 | 207 def on_time(self, cmdargs): |
208 local_time = time.localtime() | |
209 gmt_time = time.gmtime() | |
210 format_string = "%A %b %d, %Y %I:%M:%S%p" | |
211 self.chat.InfoPost("<br />Local: " + time.strftime(format_string)+\ | |
212 "<br />GMT: "+time.strftime(format_string,gmt_time)) | |
18 | 213 |
28 | 214 def on_dieroller(self, cmdargs): |
215 args = string.split(cmdargs,None,-1) | |
216 rm = component.get('DiceManager') | |
31 | 217 cur_die = rm.getRoller() |
218 if len(args) == 0: self.chat.InfoPost('You are using the <b>"' +cur_die+ '"</b> die roller.'); return | |
28 | 219 try: |
220 rm.setRoller(args[0]) | |
31 | 221 self.chat.SystemPost('You have changed your die roller to the <b>"' +rm.getRoller()+ '"</b> roller.') |
222 self.settings.change('dieroller', rm.getRoller()) | |
28 | 223 except Exception, e: |
31 | 224 rm.setRoller(cur_die) |
225 self.settings.change('dieroller', str(cur_die)) | |
226 if args[0] != '': self.chat.SystemPost(args[0]+ ' is an invalid roller.') | |
227 self.chat.InfoPost('Available die rollers: ' +str(rm.listRollers()) ) | |
228 self.chat.InfoPost('You are using the <b>"' +cur_die+ '"</b> die roller.') | |
28 | 229 |
230 def on_ping(self, cmdargs): | |
231 ct = time.clock() | |
232 msg = "<ping player='"+self.session.id+"' time='"+str(ct)+"' />" | |
233 self.session.outbox.put(msg) | |
18 | 234 |
28 | 235 def on_log(self,cmdargs): |
236 args = string.split(cmdargs,None,-1) | |
237 logfile = self.settings.get_setting( 'GameLogPrefix' ) | |
238 if len( args ) == 0: | |
239 self.postLoggingState() | |
240 elif args[0] == "on" and logfile != '': | |
241 try: | |
242 while logfile[ 0 ] == ANTI_LOG_CHAR: | |
243 #print logfile | |
244 logfile = logfile[ 1: ] | |
245 except IndexError,e: | |
246 self.chat.SystemPost("log filename is blank, system will *not* be logging until a valid filename is specified" ) | |
247 self.settings.set_setting( 'GameLogPrefix', logfile ) | |
248 return | |
249 self.settings.set_setting( 'GameLogPrefix', logfile ) | |
250 self.postLoggingState() | |
251 elif args[0] == "off": | |
252 logfile = ANTI_LOG_CHAR+logfile | |
253 self.settings.set_setting( 'GameLogPrefix', logfile ) | |
254 self.postLoggingState() | |
255 elif args[0] == "to": | |
256 if len( args ) > 1: | |
257 logfile = args[1] | |
258 self.settings.set_setting( 'GameLogPrefix', logfile ) | |
259 else: | |
260 self.chat.SystemPost('You must also specify a filename with the <em>/log to</em> command.' ) | |
261 self.postLoggingState() | |
262 else: | |
263 self.chat.InfoPost("Unknown logging command, use 'on' or 'off'" ) | |
18 | 264 |
28 | 265 def postLoggingState( self ): |
266 logfile = self.settings.get_setting( 'GameLogPrefix' ) | |
267 try: | |
268 if logfile[0] != ANTI_LOG_CHAR: comment = 'is' | |
269 else: comment = 'is not' | |
270 except: comment = 'is not' | |
271 suffix = time.strftime( '-%d-%m-%y.html', time.localtime( time.time() ) ) | |
272 self.chat.InfoPost('Log filename is "%s%s", system is %s logging.' % (logfile, suffix, comment) ) | |
18 | 273 |
28 | 274 def on_name(self, cmdargs): |
275 if cmdargs == "": | |
276 self.chat.InfoPost("**Incorrect syntax for name.") | |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
277 else: |
28 | 278 self.settings.set_setting('player', cmdargs) |
279 self.session.set_name(str(cmdargs)) | |
280 | |
281 def on_status(self, cmdargs): | |
282 if cmdargs == "": | |
283 self.chat.InfoPost("Incorrect synatx for status.") | |
284 else: | |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
285 txt = cmdargs[:20] |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
286 self.session.set_text_status(str(txt)) |
18 | 287 |
28 | 288 def on_set(self, cmdargs): |
289 args = string.split(cmdargs,None,-1) | |
290 keys = self.settings.get_setting_keys() | |
291 if len(args) == 0: | |
292 line = "<table border='2'>" | |
293 for m in keys: | |
294 line += "<tr><td>" + str(m) + "</td><td> " + str(self.settings.get_setting(m)) + "</td></tr>" | |
295 line += "</table>" | |
296 self.chat.InfoPost(line) | |
297 else: | |
298 split_name_from_data = cmdargs.find("=") | |
299 if split_name_from_data == -1: | |
300 for m in keys: | |
301 if m == args[0]: | |
302 return_string = "<table border='2'><tr><td>" + args[0] + "</td><td>"\ | |
303 + self.settings.get_setting(args[0]) + "</td></tr></table>" | |
304 self.chat.InfoPost(return_string) | |
305 else: | |
306 name = cmdargs[:split_name_from_data].strip() | |
307 for m in keys: | |
308 if m == name: | |
309 setting = cmdargs[split_name_from_data+1:].strip() | |
310 self.settings.set_setting(name,setting) | |
311 return_string = name + " changed to " + setting | |
312 self.chat.InfoPost(return_string) | |
313 self.session.set_name(self.settings.get_setting("player")) | |
314 self.chat.set_colors() | |
315 self.chat.set_buffersize() | |
18 | 316 |
28 | 317 def on_help(self, cmdargs=""): |
318 cmds = self.cmdlist.keys() | |
319 cmds.sort() | |
320 shortcmds = self.shortcmdlist.keys() | |
321 shortcmds.sort() | |
322 msg = '<br /><b>Command Alias List:</b>' | |
323 for shortcmd in shortcmds: | |
324 msg += '<br /><b><font color="#0000CC">%s</font></b> is short for <font color="#000000">%s</font>' % (shortcmd, self.shortcmdlist[shortcmd]) | |
325 msg += '<br /><br /><b>Command List:</b>' | |
326 for cmd in cmds: | |
327 msg += '<br /><b><font color="#000000">%s</font></b>' % (cmd) | |
328 for shortcmd in shortcmds: | |
329 if self.shortcmdlist[shortcmd] == cmd: | |
330 msg += ', <b><font color="#0000CC">%s</font></b>' % (shortcmd) | |
331 msg += ' %s' % (self.cmdlist[cmd]['help']) | |
332 self.chat.InfoPost(msg) | |
18 | 333 |
28 | 334 def on_ignore(self, cmdargs): |
335 args = string.split(cmdargs,None,-1) | |
336 (ignore_list, ignore_name) = self.session.get_ignore_list() | |
337 ignore_output = self.colorize(self.chat.syscolor,"<br /><u>Player IDs Currently being Ignored:</u><br />") | |
338 if cmdargs == "": | |
339 if len(ignore_list) == 0: | |
340 ignore_output += self.colorize(self.chat.infocolor,"No players are currently being ignored.<br />") | |
341 else: | |
342 for m in ignore_list: | |
343 ignore_txt = m + " " + ignore_name[ignore_list.index(m)] + "<br />" | |
344 ignore_output += self.colorize(self.chat.infocolor,ignore_txt) | |
345 self.chat.Post(ignore_output) | |
346 else: | |
347 players = cmdargs.split(",") | |
348 for m in players: | |
349 try: | |
350 id = `int(m)` | |
351 (result, id, name) = self.session.toggle_ignore(id) | |
352 if result == 0: | |
353 self.chat.InfoPost("Player " + name + " with ID:" + id + " no longer ignored") | |
354 if result == 1: | |
355 self.chat.InfoPost("Player " + name + " with ID:" + id + " now being ignored") | |
356 except: | |
357 self.chat.InfoPost(m + " was ignored because it is an invalid player ID") | |
358 traceback.print_exc() | |
18 | 359 |
28 | 360 def on_role(self, cmdargs): |
361 if cmdargs == "": | |
362 self.session.display_roles() | |
363 return | |
364 delim = cmdargs.find("=") | |
365 if delim < 0: | |
366 self.chat.InfoPost("**Incorrect synatax for Role." + str(delim)) | |
367 return | |
368 player_ids = string.split(cmdargs[:delim],",") | |
369 role = cmdargs[delim+1:].strip() | |
370 role = role.lower() | |
371 if (role.lower() == "player") or (role.lower() == "gm") or (role.lower() == "lurker"): | |
372 if role.lower() == "player": role = "Player" | |
373 elif role.lower() == "gm": role = "GM" | |
374 else: role = "Lurker" | |
375 try: | |
376 role_pwd = self.session.orpgFrame_callback.password_manager.GetPassword("admin",int(self.session.group_id)) | |
377 if role_pwd != None: | |
378 for m in player_ids: | |
379 self.session.set_role(m.strip(),role,role_pwd) | |
380 except: traceback.print_exc() | |
381 | |
382 def on_whisper(self, cmdargs): | |
383 delim = cmdargs.find("=") | |
384 | |
385 if delim < 0: | |
386 if self.previous_whisper: player_ids = self.previous_whisper | |
387 else: | |
388 self.chat.InfoPost("**Incorrect syntax for whisper." + str(delim)) | |
389 return | |
390 else: player_ids = string.split(cmdargs[:delim], ",") | |
391 self.previous_whisper = player_ids | |
392 mesg = string.strip(cmdargs[delim+1:]) | |
393 self.chat.whisper_to_players(mesg,player_ids) | |
394 | |
395 def on_groupwhisper(self, cmdargs): | |
396 args = string.split(cmdargs,None,-1) | |
397 delim = cmdargs.find("=") | |
18 | 398 |
28 | 399 if delim > 0: group_ids = string.split(cmdargs[:delim], ",") |
400 elif args[0] == "add": | |
401 if not orpg.player_list.WG_LIST.has_key(args[2]): | |
402 orpg.player_list.WG_LIST[args[2]] = {} | |
403 orpg.player_list.WG_LIST[args[2]][int(args[1])] = int(args[1]) | |
404 return | |
405 elif args[0] == "remove" or args[0] == "delete": | |
406 del orpg.player_list.WG_LIST[args[2]][int(args[1])] | |
407 if len(orpg.player_list.WG_LIST[args[2]]) == 0: | |
408 del orpg.player_list.WG_LIST[args[2]] | |
409 return | |
410 elif args[0] == "create" or args[0] == "new_group": | |
411 if not orpg.player_list.WG_LIST.has_key(args[1]): | |
412 orpg.player_list.WG_LIST[args[1]] = {} | |
413 return | |
414 elif args[0] == "list": | |
415 if orpg.player_list.WG_LIST.has_key(args[1]): | |
416 for n in orpg.player_list.WG_LIST[args[1]]: | |
417 player = self.session.get_player_info(str(n)) | |
418 self.chat.InfoPost(str(player[0])) | |
419 else: | |
420 self.chat.InfoPost("Invalid Whisper Group Name") | |
421 return | |
422 elif args[0] == "clear": | |
423 if orpg.player_list.WG_LIST.has_key(args[1]): | |
424 orpg.player_list.WG_LIST[args[1]].clear() | |
425 else: | |
426 self.chat.InfoPost("Invalid Whisper Group Name") | |
427 return | |
428 elif args[0] == "clearall": | |
429 orpg.player_list.WG_LIST.clear() | |
430 return | |
431 else: | |
432 self.chat.InfoPost("<b>/gw add</b> (player_id) (group_name) - Adds [player_id] to [group_name]") | |
433 self.chat.InfoPost("<b>/gw remove</b> (player_id) (group_name) - Removes [player_id] from [group_name]") | |
434 self.chat.InfoPost("<b>/gw</b> (group_name)<b>=</b>(message) - Sends [message] to [group_name]") | |
435 self.chat.InfoPost("<b>/gw create</b> (group_name) - Creates a whisper group called [group_name]") | |
436 self.chat.InfoPost("<b>/gw list</b> (group_name) - Lists all players in [group_name]") | |
437 self.chat.InfoPost("<b>/gw clear</b> (group_name) - Removes all players from [group_name]") | |
438 self.chat.InfoPost("<b>/gw clearall</b> - Removes all existing whisper groups") | |
439 return | |
440 msg = string.strip(cmdargs[delim+1:]) | |
441 for gid in group_ids: | |
442 idList = "" | |
443 for n in orpg.player_list.WG_LIST[gid]: | |
444 if idList == "": idList = str(n) | |
445 else: idList = str(n) + ", " + idList | |
446 self.on_whisper(idList + "=" + self.settings.get_setting("gwtext") + msg) | |
18 | 447 |
28 | 448 def on_gmwhisper(self, cmdargs): |
449 if cmdargs == "": | |
450 self.chat.InfoPost("**Incorrect syntax for GM Whisper.") | |
451 else: | |
452 the_gms = self.chat.get_gms() | |
453 if len(the_gms): | |
454 gmstring = "" | |
455 for each_gm in the_gms: | |
456 if gmstring != "": gmstring += "," | |
457 gmstring += each_gm | |
458 self.on_whisper(gmstring + "=" + cmdargs) | |
459 else: self.chat.InfoPost("**No GMs to Whisper to.") | |
18 | 460 |
28 | 461 def on_moderate(self, cmdargs): |
462 if cmdargs != "": | |
463 pos = cmdargs.find("=") | |
464 if (pos < 0): | |
465 plist = "" | |
466 if cmdargs.lower() == "on": action = "enable" | |
467 elif cmdargs.lower() == "off": action="disable" | |
468 else: | |
469 self.chat.InfoPost("Wrong syntax for moderate command!") | |
470 return | |
471 else: | |
472 plist = string.strip(cmdargs[:pos]) | |
473 tag = string.strip(cmdargs[pos+1:]) | |
474 if tag.lower() == "on": action = "addvoice" | |
475 elif tag.lower() == "off": action = "delvoice" | |
476 else: | |
477 self.chat.InfoPost("Wrong syntax for moderate command!") | |
478 return | |
479 pwd = self.session.orpgFrame_callback.password_manager.GetPassword("admin",int(self.session.group_id)) | |
480 if pwd != None: | |
481 msg = "<moderate" | |
482 msg += " action = '" + action + "'" | |
483 msg +=" from = '" + self.session.id + "' pwd='" + pwd + "'" | |
484 if (plist != ""): msg += " users='"+plist+"'" | |
485 msg += " />" | |
486 self.session.outbox.put(msg) | |
487 pass | |
488 else: | |
489 msg = "<moderate action='list' from='"+self.session.id+"' />" | |
490 self.session.outbox.put(msg) | |
491 self.session.update() | |
18 | 492 |
28 | 493 def on_update(self, cmdargs): |
494 self.chat.InfoPost("This command is no longer valid") | |
18 | 495 |
28 | 496 def on_description(self, cmdargs): |
497 if len(cmdargs) <= 0: | |
498 self.chat.InfoPost("**No description text to display." + str(delim)) | |
499 return | |
500 mesg = "<table bgcolor='#c0c0c0' border='3' cellpadding='5' cellspacing='0' width='100%'><tr><td><font color='#000000'>" | |
501 mesg += string.strip(cmdargs) | |
502 mesg += "</font></td></tr></table>" | |
503 self.chat.Post(mesg) | |
504 self.chat.send_chat_message(mesg) | |
505 | |
506 def invoke_tab(self, cmdargs): | |
507 try: | |
508 int(cmdargs) | |
509 playerid = cmdargs.strip() | |
510 for panel in self.chat.parent.whisper_tabs: | |
511 if (panel.sendtarget == playerid): | |
512 self.chat.Post("Cannot invoke tab: Tab already exists.") | |
513 return | |
514 try: displaypanel = self.chat.parent.create_whisper_tab(playerid) | |
515 except: | |
516 self.chat.Post("That ID# is not valid.") | |
517 return | |
518 nidx = self.chat.parent.get_tab_index(displaypanel) | |
519 self.chat.parent.newMsg(nidx) | |
520 return | |
521 except: | |
522 displaypanel = self.chat.parent.create_null_tab(cmdargs) | |
523 nidx = self.chat.parent.get_tab_index(displaypanel) | |
524 self.chat.parent.newMsg(nidx) | |
525 return | |
526 | |
527 def on_remote_admin(self, cmdargs): | |
528 args = string.split(cmdargs,None,-1) | |
529 try: | |
530 pass_state = 0 | |
531 pwd = self.session.orpgFrame_callback.password_manager.GetSilentPassword("server") | |
532 if pwd != None: | |
533 pass_state = 1 | |
534 else: pwd = "<i>[NONE]</i>" | |
535 if len( args ) == 0: | |
536 msg = "<br /><b>Remote Administrator Config:</b>" | |
537 if pass_state != 1 : msg += " Password not set. Remote admin functions disabled<br />" | |
538 else: msg += " Enabled. Using password '"+pwd+"'<br />" | |
539 self.chat.SystemPost(msg) | |
540 return | |
541 if pass_state != 1 and args[0] != "set": | |
542 self.chat.SystemPost("Command ignored. No remote administrator password set!!") | |
543 return | |
544 msgbase = "<admin id='"+self.session.id+"' group_id='"+self.session.group_id+"' pwd='"+pwd+"'" | |
545 if args[0] == "set": | |
546 if len( args ) > 1: | |
547 self.session.orpgFrame_callback.password_manager.server = str( args[1] ) | |
548 self.chat.SystemPost( "Remote administration commands using password: "+str(self.session.orpgFrame_callback.password_manager.GetSilentPassword("server"))+"" ) | |
549 else: | |
550 pwd = self.session.orpgFrame_callback.password_manager.GetPassword("server") | |
551 if pwd != None: | |
552 self.chat.SystemPost( "Remote administration commands using password: "+pwd+"" ) | |
553 elif len(args) == 1: | |
554 admin_command = {'banlist': ' cmd="banlist" />', | |
555 'help': " cmd='help' />", | |
556 'roompasswords': " cmd='roompasswords' />", | |
557 'uptime': " cmd='uptime' />", | |
558 'list': " cmd='list' />", | |
559 'killserver': " cmd='killserver' />", | |
560 'savemaps': ' cmd="savemaps" />' | |
561 } | |
562 if admin_command.has_key(args[0]): | |
563 msg = msgbase + admin_command[args[0]] | |
564 self.session.outbox.put(msg) | |
565 | |
566 elif len(args) == 2: | |
567 admin_command = {'ban': ' cmd="ban" bid="' + str(args[1]) + '" />', | |
568 'unban': ' cmd="unban" ip="' + str(args[1]) + '" />', | |
569 'broadcast': " cmd='broadcast' msg='"+ string.join(args[1:])+"' />", | |
570 'killgroup': " cmd='killgroup' gid='"+ str(args[1])+"' />" | |
571 } | |
572 if admin_command.has_key(args[0]): | |
573 msg = msgbase + admin_command[args[0]] | |
574 self.session.outbox.put(msg) | |
575 | |
576 elif len(args) == 3: | |
577 admin_command = {'message':" cmd='message' to_id='"+ str(args[1])+"' msg='"+ string.join(args[2:])+"' />", | |
578 'nameroom': " cmd='nameroom' rmid='"+ str(args[1])+"' name='"+ string.join(args[2:])+"' />", | |
579 'passwd': " cmd='passwd' gid='"+str(args[1])+"' pass='"+ str(args[2])+"' />" | |
580 } | |
581 if admin_command.has_key(args[0]): | |
582 msg = msgbase + admin_command[args[0]] | |
583 self.session.outbox.put(msg) | |
584 | |
585 elif args[0] == "banip": | |
586 try: bname = str(args[2]) | |
587 except: bname = 'Unknown' | |
588 msg = msgbase + ' cmd="banip" bip="' + str(args[1]) + '" bname="' + bname + '"/>' | |
589 self.session.outbox.put(msg) | |
590 | |
591 elif args[0] == "createroom": | |
592 if len(args) < 2: | |
593 self.chat.SystemPost( "You must supply a name and boot password at least. <br />/admin createroom <name> <boot password> [password]" ) | |
594 return | |
595 if len(args) < 3: | |
596 self.chat.SystemPost( "You must supply a boot password also.<br />/admin createroom <name> <boot password> [password]" ) | |
597 return | |
598 if len(args) < 4: args.append("") | |
599 msg = msgbase + " cmd='createroom' name='"+str(args[1])+"' boot='"+ str(args[2])+"' pass='"+ str(args[3])+"' />" | |
600 self.session.outbox.put(msg) | |
601 | |
602 else: self.chat.InfoPost("Unknown administrator command" ) | |
603 except: | |
604 self.chat.InfoPost("An error has occured while processing a Remote Administrator command!") | |
605 traceback.print_exc() |