From 117207e3ca6a66235219523d2377f69b00a812e8 Mon Sep 17 00:00:00 2001 From: Griatch Date: Sun, 30 Aug 2009 10:07:15 +0000 Subject: [PATCH] Implemented allcom as per MUX specifications (Issue 47). Added some more functionality to it, such as giving allcom without an argument makes it work as comlist. Also cleaned up some of the channel listing commands to make their output more consistent. --- src/commands/comsys.py | 87 +++++++++++++++++++++++++++++++++--------- src/comsys.py | 2 +- src/session.py | 2 +- 3 files changed, 71 insertions(+), 20 deletions(-) diff --git a/src/commands/comsys.py b/src/commands/comsys.py index 213474c0aa..bbd47d1d41 100644 --- a/src/commands/comsys.py +++ b/src/commands/comsys.py @@ -101,32 +101,79 @@ def cmd_comlist(command): source_object = command.source_object session = command.session - s = "Your subscibed channels (to see all, use @clist)\n" - s += "Alias Channel Status\n" - for membership in source_object.channel_membership_set.all(): + s = "Your subscibed channels (use @clist for full chan list)\n" + s += "** Alias Channel Status\n" + channels = source_object.channel_membership_set.all() + if not channels: + s += " (No subscriptions) " + for membership in channels: chan = membership.channel if membership.is_listening: chan_on = "On" else: chan_on = "Off" - - s += "%-9.9s %-19.19s %s\n" % (membership.user_alias, - chan.get_name(), - chan_on) - s += "-- End of comlist --" + s += " %s%s %-15.14s%-22.15s%s\n" % ('-','-',membership.user_alias, + chan.get_name(), chan_on) + s = s[:-1] source_object.emit_to(s) -GLOBAL_CMD_TABLE.add_command("comlist", cmd_comlist), +GLOBAL_CMD_TABLE.add_command("comlist", cmd_comlist) def cmd_allcom(command): """ - allcom + allcom [on|off|who] Allows the user to universally turn off or on all channels they are on, - as well as perform a "who" for all channels they are on. - """ - # TODO: Implement cmd_allcom - pass + as well as perform a 'who' for all channels they are on. + Without argument, works like comlist. + """ + + source_object = command.source_object + arg = command.command_argument + if not arg: + cmd_comlist(command) + source_object.emit_to("(allcom arguments: 'on', 'off' and 'who')") + return + + arg = arg.strip() + #get names and alias of all subscribed channels + chandict = comsys.plr_get_cdict(command.session) + aliaslist = chandict.keys() + aliaslist.sort() + if arg == "on": + for alias in aliaslist: + comsys.plr_chan_on(command.session, alias) + elif arg == "off": + for alias in aliaslist: + comsys.plr_chan_off(command.session, alias) + elif arg == "who": + s = "" + if not aliaslist: + s += " (No channels) " + for alias in aliaslist: + s += "-- %s (alias: %s)\n" % (chandict[alias][0],alias) + sess_list = comsys.get_cwho_list(chandict[alias][0]) + objlist = [sess.get_pobject() for sess in sess_list] + plist = [p.get_name(show_dbref=source_object.sees_dbrefs()) + for p in filter(lambda o: o.is_player(), objlist)] + olist = [o.get_name(show_dbref=source_object.sees_dbrefs()) + for o in filter(lambda o: not o.is_player(), objlist)] + plist.sort() + olist.sort() + if plist: + s += " Players:\n " + for pname in plist: + s += "%s, " % pname + s = s[:-2] + "\n" + if olist: + s += " Objects:\n " + for oname in olist: + s += "%s, " % oname + s = s[:-2] + "\n" + s = s[:-1] + source_object.emit_to(s) +GLOBAL_CMD_TABLE.add_command("allcom", cmd_allcom) + def cmd_clearcom(command): """ clearcom @@ -146,17 +193,21 @@ def cmd_clist(command): session = command.session source_object = command.source_object - s = "All channels (use comlist to see your subscriptions)\n" + s = "All channels (use comlist or allcom to see your subscriptions)\n" s += "** Channel Owner Description\n" - for chan in comsys.get_all_channels(): - s += "%s%s %-15.14s%-22.15s%s\n" % \ + channels = comsys.get_all_channels() + if not channels: + s += "(No channels) " + for chan in channels: + s += " %s%s %-15.14s%-22.15s%s\n" % \ ('-', '-', chan.get_name(), chan.get_owner().get_name(show_dbref=False), chan.description) - s += "** End of Channel List **" + s = s[:-1] + #s += "** End of Channel List **" source_object.emit_to(s) GLOBAL_CMD_TABLE.add_command("@clist", cmd_clist), diff --git a/src/comsys.py b/src/comsys.py index 30f4225dac..c85c0bbc4a 100644 --- a/src/comsys.py +++ b/src/comsys.py @@ -51,7 +51,7 @@ def plr_chan_off(session, calias): calias: (str) The channel alias. """ if not plr_listening_channel(session, calias, alias_search=True): - session.msg("You're already not listening to that channel.") + session.msg("You're already not listening to that channel." % ) return else: cname = plr_cname_from_alias(session, calias) diff --git a/src/session.py b/src/session.py index 63d44e5582..b9857ef978 100755 --- a/src/session.py +++ b/src/session.py @@ -192,7 +192,7 @@ class SessionProtocol(StatefulTelnetProtocol): Sends a message to the session. """ if isinstance(message, unicode): - message = message.encode("utf-8") + message = message.encode("utf-8") self.sendLine("%s" % (message,)) def add_default_channels(self):