Mercurial > traipse
annotate orpg/chat/commands.py @ 28:ff154cf3350c ornery-orc
Traipse 'OpenRPG' {100203-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 (Stable)
New Features:
New Bookmarks Feature
New 'boot' command to remote admin
New confirmation window for sent nodes
Miniatures Layer pop up box allows users to turn off Mini labels, from
FlexiRPG
New Zoom Mouse plugin added
New Images added to Plugin UI
Switching to Element Tree
New Map efficiency, from FlexiRPG
New Status Bar to Update Manager
New TrueDebug Class in orpg_log (See documentation for usage)
New Portable Mercurial
New Tip of the Day, from Core and community
New Reference Syntax added for custom PC sheets
New Child Reference for gametree
New Parent Reference for gametree
New Gametree Recursion method, mapping, context sensitivity, and
effeciency..
New Features node with bonus nodes and Node Referencing help added
New Dieroller structure from Core
New DieRoller portability for odd Dice
New 7th Sea die roller; ie [7k3] = [7d10.takeHighest(3).open(10)]
New 'Mythos' System die roller added
New vs. die roller method for WoD; ie [3v3] = [3d10.vs(3)]. Included for
Mythos roller also
New Warhammer FRPG Die Roller (Special thanks to Puu-san for the
support)
New EZ_Tree Reference system. Push a button, Traipse the tree, get a
reference (Beta!)
New Grids act more like Spreadsheets in Use mode, with Auto Calc
Fixes:
Fix to allow for portability to an OpenSUSE linux OS
Fix to mplay_client for Fedora and OpenSUSE
Fix to Text based Server
Fix to Remote Admin Commands
Fix to Pretty Print, from Core
Fix to Splitter Nodes not being created
Fix to massive amounts of images loading, from Core
Fix to Map from gametree not showing to all clients
Fix to gametree about menus
Fix to Password Manager check on startup
Fix to PC Sheets from tool nodes. They now use the tabber_panel
Fix to Whiteboard ID to prevent random line or text deleting.
Fixes to Server, Remote Server, and Server GUI
Fix to Update Manager; cleaner clode for saved repositories
Fixes made to Settings Panel and now reactive settings when Ok is
pressed
Fixes to Alternity roller's attack roll. Uses a simple Tuple instead of
a Splice
Fix to Use panel of Forms and Tabbers. Now longer enters design mode
Fix made Image Fetching. New fetching image and new failed image
Fix to whiteboard ID's to prevent non updated clients from ruining the
fix.
default_manifest.xml renamed to default_upmana.xml
author | sirebral |
---|---|
date | Wed, 03 Feb 2010 22:16:49 -0600 |
parents | 51428d30c59e |
children | fc48380f0c9f |
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') | |
217 try: | |
218 rm.setRoller(args[0]) | |
219 self.chat.SystemPost("You have changed your die roller to the <b>\"" + args[0] + "\"</b> roller.") | |
220 self.settings.set_setting('dieroller',args[0]) | |
221 except Exception, e: | |
222 print e | |
223 self.chat.InfoPost("Available die rollers: " + str(rm.listRollers())) | |
224 self.chat.InfoPost("You are using the <b>\"" + rm.getRoller() + "\"</b> die roller.") | |
225 | |
226 def on_ping(self, cmdargs): | |
227 ct = time.clock() | |
228 msg = "<ping player='"+self.session.id+"' time='"+str(ct)+"' />" | |
229 self.session.outbox.put(msg) | |
18 | 230 |
28 | 231 def on_log(self,cmdargs): |
232 args = string.split(cmdargs,None,-1) | |
233 logfile = self.settings.get_setting( 'GameLogPrefix' ) | |
234 if len( args ) == 0: | |
235 self.postLoggingState() | |
236 elif args[0] == "on" and logfile != '': | |
237 try: | |
238 while logfile[ 0 ] == ANTI_LOG_CHAR: | |
239 #print logfile | |
240 logfile = logfile[ 1: ] | |
241 except IndexError,e: | |
242 self.chat.SystemPost("log filename is blank, system will *not* be logging until a valid filename is specified" ) | |
243 self.settings.set_setting( 'GameLogPrefix', logfile ) | |
244 return | |
245 self.settings.set_setting( 'GameLogPrefix', logfile ) | |
246 self.postLoggingState() | |
247 elif args[0] == "off": | |
248 logfile = ANTI_LOG_CHAR+logfile | |
249 self.settings.set_setting( 'GameLogPrefix', logfile ) | |
250 self.postLoggingState() | |
251 elif args[0] == "to": | |
252 if len( args ) > 1: | |
253 logfile = args[1] | |
254 self.settings.set_setting( 'GameLogPrefix', logfile ) | |
255 else: | |
256 self.chat.SystemPost('You must also specify a filename with the <em>/log to</em> command.' ) | |
257 self.postLoggingState() | |
258 else: | |
259 self.chat.InfoPost("Unknown logging command, use 'on' or 'off'" ) | |
18 | 260 |
28 | 261 def postLoggingState( self ): |
262 logfile = self.settings.get_setting( 'GameLogPrefix' ) | |
263 try: | |
264 if logfile[0] != ANTI_LOG_CHAR: comment = 'is' | |
265 else: comment = 'is not' | |
266 except: comment = 'is not' | |
267 suffix = time.strftime( '-%d-%m-%y.html', time.localtime( time.time() ) ) | |
268 self.chat.InfoPost('Log filename is "%s%s", system is %s logging.' % (logfile, suffix, comment) ) | |
18 | 269 |
28 | 270 def on_name(self, cmdargs): |
271 if cmdargs == "": | |
272 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
|
273 else: |
28 | 274 self.settings.set_setting('player', cmdargs) |
275 self.session.set_name(str(cmdargs)) | |
276 | |
277 def on_status(self, cmdargs): | |
278 if cmdargs == "": | |
279 self.chat.InfoPost("Incorrect synatx for status.") | |
280 else: | |
0
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
281 txt = cmdargs[:20] |
4385a7d0efd1
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
sirebral
parents:
diff
changeset
|
282 self.session.set_text_status(str(txt)) |
18 | 283 |
28 | 284 def on_set(self, cmdargs): |
285 args = string.split(cmdargs,None,-1) | |
286 keys = self.settings.get_setting_keys() | |
287 if len(args) == 0: | |
288 line = "<table border='2'>" | |
289 for m in keys: | |
290 line += "<tr><td>" + str(m) + "</td><td> " + str(self.settings.get_setting(m)) + "</td></tr>" | |
291 line += "</table>" | |
292 self.chat.InfoPost(line) | |
293 else: | |
294 split_name_from_data = cmdargs.find("=") | |
295 if split_name_from_data == -1: | |
296 for m in keys: | |
297 if m == args[0]: | |
298 return_string = "<table border='2'><tr><td>" + args[0] + "</td><td>"\ | |
299 + self.settings.get_setting(args[0]) + "</td></tr></table>" | |
300 self.chat.InfoPost(return_string) | |
301 else: | |
302 name = cmdargs[:split_name_from_data].strip() | |
303 for m in keys: | |
304 if m == name: | |
305 setting = cmdargs[split_name_from_data+1:].strip() | |
306 self.settings.set_setting(name,setting) | |
307 return_string = name + " changed to " + setting | |
308 self.chat.InfoPost(return_string) | |
309 self.session.set_name(self.settings.get_setting("player")) | |
310 self.chat.set_colors() | |
311 self.chat.set_buffersize() | |
18 | 312 |
28 | 313 def on_help(self, cmdargs=""): |
314 cmds = self.cmdlist.keys() | |
315 cmds.sort() | |
316 shortcmds = self.shortcmdlist.keys() | |
317 shortcmds.sort() | |
318 msg = '<br /><b>Command Alias List:</b>' | |
319 for shortcmd in shortcmds: | |
320 msg += '<br /><b><font color="#0000CC">%s</font></b> is short for <font color="#000000">%s</font>' % (shortcmd, self.shortcmdlist[shortcmd]) | |
321 msg += '<br /><br /><b>Command List:</b>' | |
322 for cmd in cmds: | |
323 msg += '<br /><b><font color="#000000">%s</font></b>' % (cmd) | |
324 for shortcmd in shortcmds: | |
325 if self.shortcmdlist[shortcmd] == cmd: | |
326 msg += ', <b><font color="#0000CC">%s</font></b>' % (shortcmd) | |
327 msg += ' %s' % (self.cmdlist[cmd]['help']) | |
328 self.chat.InfoPost(msg) | |
18 | 329 |
28 | 330 def on_ignore(self, cmdargs): |
331 args = string.split(cmdargs,None,-1) | |
332 (ignore_list, ignore_name) = self.session.get_ignore_list() | |
333 ignore_output = self.colorize(self.chat.syscolor,"<br /><u>Player IDs Currently being Ignored:</u><br />") | |
334 if cmdargs == "": | |
335 if len(ignore_list) == 0: | |
336 ignore_output += self.colorize(self.chat.infocolor,"No players are currently being ignored.<br />") | |
337 else: | |
338 for m in ignore_list: | |
339 ignore_txt = m + " " + ignore_name[ignore_list.index(m)] + "<br />" | |
340 ignore_output += self.colorize(self.chat.infocolor,ignore_txt) | |
341 self.chat.Post(ignore_output) | |
342 else: | |
343 players = cmdargs.split(",") | |
344 for m in players: | |
345 try: | |
346 id = `int(m)` | |
347 (result, id, name) = self.session.toggle_ignore(id) | |
348 if result == 0: | |
349 self.chat.InfoPost("Player " + name + " with ID:" + id + " no longer ignored") | |
350 if result == 1: | |
351 self.chat.InfoPost("Player " + name + " with ID:" + id + " now being ignored") | |
352 except: | |
353 self.chat.InfoPost(m + " was ignored because it is an invalid player ID") | |
354 traceback.print_exc() | |
18 | 355 |
28 | 356 def on_role(self, cmdargs): |
357 if cmdargs == "": | |
358 self.session.display_roles() | |
359 return | |
360 delim = cmdargs.find("=") | |
361 if delim < 0: | |
362 self.chat.InfoPost("**Incorrect synatax for Role." + str(delim)) | |
363 return | |
364 player_ids = string.split(cmdargs[:delim],",") | |
365 role = cmdargs[delim+1:].strip() | |
366 role = role.lower() | |
367 if (role.lower() == "player") or (role.lower() == "gm") or (role.lower() == "lurker"): | |
368 if role.lower() == "player": role = "Player" | |
369 elif role.lower() == "gm": role = "GM" | |
370 else: role = "Lurker" | |
371 try: | |
372 role_pwd = self.session.orpgFrame_callback.password_manager.GetPassword("admin",int(self.session.group_id)) | |
373 if role_pwd != None: | |
374 for m in player_ids: | |
375 self.session.set_role(m.strip(),role,role_pwd) | |
376 except: traceback.print_exc() | |
377 | |
378 def on_whisper(self, cmdargs): | |
379 delim = cmdargs.find("=") | |
380 | |
381 if delim < 0: | |
382 if self.previous_whisper: player_ids = self.previous_whisper | |
383 else: | |
384 self.chat.InfoPost("**Incorrect syntax for whisper." + str(delim)) | |
385 return | |
386 else: player_ids = string.split(cmdargs[:delim], ",") | |
387 self.previous_whisper = player_ids | |
388 mesg = string.strip(cmdargs[delim+1:]) | |
389 self.chat.whisper_to_players(mesg,player_ids) | |
390 | |
391 def on_groupwhisper(self, cmdargs): | |
392 args = string.split(cmdargs,None,-1) | |
393 delim = cmdargs.find("=") | |
18 | 394 |
28 | 395 if delim > 0: group_ids = string.split(cmdargs[:delim], ",") |
396 elif args[0] == "add": | |
397 if not orpg.player_list.WG_LIST.has_key(args[2]): | |
398 orpg.player_list.WG_LIST[args[2]] = {} | |
399 orpg.player_list.WG_LIST[args[2]][int(args[1])] = int(args[1]) | |
400 return | |
401 elif args[0] == "remove" or args[0] == "delete": | |
402 del orpg.player_list.WG_LIST[args[2]][int(args[1])] | |
403 if len(orpg.player_list.WG_LIST[args[2]]) == 0: | |
404 del orpg.player_list.WG_LIST[args[2]] | |
405 return | |
406 elif args[0] == "create" or args[0] == "new_group": | |
407 if not orpg.player_list.WG_LIST.has_key(args[1]): | |
408 orpg.player_list.WG_LIST[args[1]] = {} | |
409 return | |
410 elif args[0] == "list": | |
411 if orpg.player_list.WG_LIST.has_key(args[1]): | |
412 for n in orpg.player_list.WG_LIST[args[1]]: | |
413 player = self.session.get_player_info(str(n)) | |
414 self.chat.InfoPost(str(player[0])) | |
415 else: | |
416 self.chat.InfoPost("Invalid Whisper Group Name") | |
417 return | |
418 elif args[0] == "clear": | |
419 if orpg.player_list.WG_LIST.has_key(args[1]): | |
420 orpg.player_list.WG_LIST[args[1]].clear() | |
421 else: | |
422 self.chat.InfoPost("Invalid Whisper Group Name") | |
423 return | |
424 elif args[0] == "clearall": | |
425 orpg.player_list.WG_LIST.clear() | |
426 return | |
427 else: | |
428 self.chat.InfoPost("<b>/gw add</b> (player_id) (group_name) - Adds [player_id] to [group_name]") | |
429 self.chat.InfoPost("<b>/gw remove</b> (player_id) (group_name) - Removes [player_id] from [group_name]") | |
430 self.chat.InfoPost("<b>/gw</b> (group_name)<b>=</b>(message) - Sends [message] to [group_name]") | |
431 self.chat.InfoPost("<b>/gw create</b> (group_name) - Creates a whisper group called [group_name]") | |
432 self.chat.InfoPost("<b>/gw list</b> (group_name) - Lists all players in [group_name]") | |
433 self.chat.InfoPost("<b>/gw clear</b> (group_name) - Removes all players from [group_name]") | |
434 self.chat.InfoPost("<b>/gw clearall</b> - Removes all existing whisper groups") | |
435 return | |
436 msg = string.strip(cmdargs[delim+1:]) | |
437 for gid in group_ids: | |
438 idList = "" | |
439 for n in orpg.player_list.WG_LIST[gid]: | |
440 if idList == "": idList = str(n) | |
441 else: idList = str(n) + ", " + idList | |
442 self.on_whisper(idList + "=" + self.settings.get_setting("gwtext") + msg) | |
18 | 443 |
28 | 444 def on_gmwhisper(self, cmdargs): |
445 if cmdargs == "": | |
446 self.chat.InfoPost("**Incorrect syntax for GM Whisper.") | |
447 else: | |
448 the_gms = self.chat.get_gms() | |
449 if len(the_gms): | |
450 gmstring = "" | |
451 for each_gm in the_gms: | |
452 if gmstring != "": gmstring += "," | |
453 gmstring += each_gm | |
454 self.on_whisper(gmstring + "=" + cmdargs) | |
455 else: self.chat.InfoPost("**No GMs to Whisper to.") | |
18 | 456 |
28 | 457 def on_moderate(self, cmdargs): |
458 if cmdargs != "": | |
459 pos = cmdargs.find("=") | |
460 if (pos < 0): | |
461 plist = "" | |
462 if cmdargs.lower() == "on": action = "enable" | |
463 elif cmdargs.lower() == "off": action="disable" | |
464 else: | |
465 self.chat.InfoPost("Wrong syntax for moderate command!") | |
466 return | |
467 else: | |
468 plist = string.strip(cmdargs[:pos]) | |
469 tag = string.strip(cmdargs[pos+1:]) | |
470 if tag.lower() == "on": action = "addvoice" | |
471 elif tag.lower() == "off": action = "delvoice" | |
472 else: | |
473 self.chat.InfoPost("Wrong syntax for moderate command!") | |
474 return | |
475 pwd = self.session.orpgFrame_callback.password_manager.GetPassword("admin",int(self.session.group_id)) | |
476 if pwd != None: | |
477 msg = "<moderate" | |
478 msg += " action = '" + action + "'" | |
479 msg +=" from = '" + self.session.id + "' pwd='" + pwd + "'" | |
480 if (plist != ""): msg += " users='"+plist+"'" | |
481 msg += " />" | |
482 self.session.outbox.put(msg) | |
483 pass | |
484 else: | |
485 msg = "<moderate action='list' from='"+self.session.id+"' />" | |
486 self.session.outbox.put(msg) | |
487 self.session.update() | |
18 | 488 |
28 | 489 def on_update(self, cmdargs): |
490 self.chat.InfoPost("This command is no longer valid") | |
18 | 491 |
28 | 492 def on_description(self, cmdargs): |
493 if len(cmdargs) <= 0: | |
494 self.chat.InfoPost("**No description text to display." + str(delim)) | |
495 return | |
496 mesg = "<table bgcolor='#c0c0c0' border='3' cellpadding='5' cellspacing='0' width='100%'><tr><td><font color='#000000'>" | |
497 mesg += string.strip(cmdargs) | |
498 mesg += "</font></td></tr></table>" | |
499 self.chat.Post(mesg) | |
500 self.chat.send_chat_message(mesg) | |
501 | |
502 def invoke_tab(self, cmdargs): | |
503 try: | |
504 int(cmdargs) | |
505 playerid = cmdargs.strip() | |
506 for panel in self.chat.parent.whisper_tabs: | |
507 if (panel.sendtarget == playerid): | |
508 self.chat.Post("Cannot invoke tab: Tab already exists.") | |
509 return | |
510 try: displaypanel = self.chat.parent.create_whisper_tab(playerid) | |
511 except: | |
512 self.chat.Post("That ID# is not valid.") | |
513 return | |
514 nidx = self.chat.parent.get_tab_index(displaypanel) | |
515 self.chat.parent.newMsg(nidx) | |
516 return | |
517 except: | |
518 displaypanel = self.chat.parent.create_null_tab(cmdargs) | |
519 nidx = self.chat.parent.get_tab_index(displaypanel) | |
520 self.chat.parent.newMsg(nidx) | |
521 return | |
522 | |
523 def on_remote_admin(self, cmdargs): | |
524 args = string.split(cmdargs,None,-1) | |
525 try: | |
526 pass_state = 0 | |
527 pwd = self.session.orpgFrame_callback.password_manager.GetSilentPassword("server") | |
528 if pwd != None: | |
529 pass_state = 1 | |
530 else: pwd = "<i>[NONE]</i>" | |
531 if len( args ) == 0: | |
532 msg = "<br /><b>Remote Administrator Config:</b>" | |
533 if pass_state != 1 : msg += " Password not set. Remote admin functions disabled<br />" | |
534 else: msg += " Enabled. Using password '"+pwd+"'<br />" | |
535 self.chat.SystemPost(msg) | |
536 return | |
537 if pass_state != 1 and args[0] != "set": | |
538 self.chat.SystemPost("Command ignored. No remote administrator password set!!") | |
539 return | |
540 msgbase = "<admin id='"+self.session.id+"' group_id='"+self.session.group_id+"' pwd='"+pwd+"'" | |
541 if args[0] == "set": | |
542 if len( args ) > 1: | |
543 self.session.orpgFrame_callback.password_manager.server = str( args[1] ) | |
544 self.chat.SystemPost( "Remote administration commands using password: "+str(self.session.orpgFrame_callback.password_manager.GetSilentPassword("server"))+"" ) | |
545 else: | |
546 pwd = self.session.orpgFrame_callback.password_manager.GetPassword("server") | |
547 if pwd != None: | |
548 self.chat.SystemPost( "Remote administration commands using password: "+pwd+"" ) | |
549 elif len(args) == 1: | |
550 admin_command = {'banlist': ' cmd="banlist" />', | |
551 'help': " cmd='help' />", | |
552 'roompasswords': " cmd='roompasswords' />", | |
553 'uptime': " cmd='uptime' />", | |
554 'list': " cmd='list' />", | |
555 'killserver': " cmd='killserver' />", | |
556 'savemaps': ' cmd="savemaps" />' | |
557 } | |
558 if admin_command.has_key(args[0]): | |
559 msg = msgbase + admin_command[args[0]] | |
560 self.session.outbox.put(msg) | |
561 | |
562 elif len(args) == 2: | |
563 admin_command = {'ban': ' cmd="ban" bid="' + str(args[1]) + '" />', | |
564 'unban': ' cmd="unban" ip="' + str(args[1]) + '" />', | |
565 'broadcast': " cmd='broadcast' msg='"+ string.join(args[1:])+"' />", | |
566 'killgroup': " cmd='killgroup' gid='"+ str(args[1])+"' />" | |
567 } | |
568 if admin_command.has_key(args[0]): | |
569 msg = msgbase + admin_command[args[0]] | |
570 self.session.outbox.put(msg) | |
571 | |
572 elif len(args) == 3: | |
573 admin_command = {'message':" cmd='message' to_id='"+ str(args[1])+"' msg='"+ string.join(args[2:])+"' />", | |
574 'nameroom': " cmd='nameroom' rmid='"+ str(args[1])+"' name='"+ string.join(args[2:])+"' />", | |
575 'passwd': " cmd='passwd' gid='"+str(args[1])+"' pass='"+ str(args[2])+"' />" | |
576 } | |
577 if admin_command.has_key(args[0]): | |
578 msg = msgbase + admin_command[args[0]] | |
579 self.session.outbox.put(msg) | |
580 | |
581 elif args[0] == "banip": | |
582 try: bname = str(args[2]) | |
583 except: bname = 'Unknown' | |
584 msg = msgbase + ' cmd="banip" bip="' + str(args[1]) + '" bname="' + bname + '"/>' | |
585 self.session.outbox.put(msg) | |
586 | |
587 elif args[0] == "createroom": | |
588 if len(args) < 2: | |
589 self.chat.SystemPost( "You must supply a name and boot password at least. <br />/admin createroom <name> <boot password> [password]" ) | |
590 return | |
591 if len(args) < 3: | |
592 self.chat.SystemPost( "You must supply a boot password also.<br />/admin createroom <name> <boot password> [password]" ) | |
593 return | |
594 if len(args) < 4: args.append("") | |
595 msg = msgbase + " cmd='createroom' name='"+str(args[1])+"' boot='"+ str(args[2])+"' pass='"+ str(args[3])+"' />" | |
596 self.session.outbox.put(msg) | |
597 | |
598 else: self.chat.InfoPost("Unknown administrator command" ) | |
599 except: | |
600 self.chat.InfoPost("An error has occured while processing a Remote Administrator command!") | |
601 traceback.print_exc() |