155
|
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
|
|
13 import traceback
|
|
14
|
|
15 from orpg.orpgCore import component
|
|
16 from orpg.tools.orpg_log import logger
|
|
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"
|
195
|
28 except: pass
|
155
|
29 ##----------------------------------------------------------------
|
|
30
|
|
31 ANTI_LOG_CHAR = '!'
|
|
32
|
|
33 class chat_commands:
|
|
34
|
|
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 = []
|
|
46
|
|
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]
|
|
62
|
|
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')
|
|
91
|
|
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)
|
|
117
|
|
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")
|
|
133
|
|
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)
|
|
143
|
|
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!")
|
|
168
|
|
169 def on_version(self, cmdargs=""):
|
|
170 self.chat.InfoPost("Version is OpenRPG " + self.chat.version)
|
|
171
|
|
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")
|
|
181
|
|
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")
|
|
187
|
|
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")
|
|
195
|
|
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.")
|
|
206
|
|
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))
|
|
213
|
|
214 def on_dieroller(self, cmdargs):
|
|
215 args = string.split(cmdargs,None,-1)
|
|
216 rm = component.get('DiceManager')
|
195
|
217 cur_die = rm.getRoller()
|
215
|
218 if len(args) == 0: self.chat.InfoPost('You are using the <b>"' +cur_die+ '"</b> die roller.'); return
|
155
|
219 try:
|
|
220 rm.setRoller(args[0])
|
195
|
221 self.chat.SystemPost('You have changed your die roller to the <b>"' +rm.getRoller()+ '"</b> roller.')
|
|
222 self.settings.change('dieroller', rm.getRoller())
|
155
|
223 except Exception, e:
|
195
|
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.')
|
155
|
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)
|
|
234
|
|
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'" )
|
|
264
|
|
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) )
|
|
273
|
|
274 def on_name(self, cmdargs):
|
|
275 if cmdargs == "":
|
|
276 self.chat.InfoPost("**Incorrect syntax for name.")
|
|
277 else:
|
|
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:
|
|
285 txt = cmdargs[:20]
|
|
286 self.session.set_text_status(str(txt))
|
|
287
|
|
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()
|
|
316
|
|
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)
|
|
333
|
|
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()
|
|
359
|
|
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("=")
|
|
398
|
|
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)
|
|
447
|
|
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.")
|
|
460
|
|
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()
|
|
492
|
|
493 def on_update(self, cmdargs):
|
|
494 self.chat.InfoPost("This command is no longer valid")
|
|
495
|
|
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:
|
133
|
577 admin_command = {'message':" cmd='message' to_id='"+ str(args[1])+"' msg='"+ string.join(args[2:])+"' />",
|
155
|
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()
|