Implemented clearcom as per MUX specifications (Issue 48).

Added a 'clear' argument to addcom as a shortcut to clearcom.
Changed addcom to now change the alias to a new one if giving the command on an already subscribed channel.
Added the exception in command handler so that giving the channel alias without argument gives an error instead
of sending None to the channel.
/Griatch
This commit is contained in:
Griatch 2009-08-30 12:28:38 +00:00
parent 117207e3ca
commit cdd4770330
3 changed files with 61 additions and 27 deletions

View file

@ -235,7 +235,9 @@ def match_channel(command):
elif command.command_argument == "last": elif command.command_argument == "last":
comsys.msg_chan_hist(command.source_object, cname) comsys.msg_chan_hist(command.source_object, cname)
raise ExitCommandHandler raise ExitCommandHandler
if not command.command_argument:
command.source_object.emit_to("What do you want to say?")
raise ExitCommandHandler
second_arg = "%s=%s" % (cname, command.command_argument) second_arg = "%s=%s" % (cname, command.command_argument)
command.command_string = "@cemit" command.command_string = "@cemit"
command.command_switches = ["sendername", "quiet"] command.command_switches = ["sendername", "quiet"]

View file

@ -39,27 +39,42 @@ def cmd_addcom(command):
chan_name = command_argument.strip() chan_name = command_argument.strip()
chan_alias = chan_name chan_alias = chan_name
if source_object.channel_membership_set.filter(channel__name__iexact=chan_name): membership = source_object.channel_membership_set.filter(channel__name__iexact=chan_name)
source_object.emit_to("You are already on that channel.")
return
try: try:
chan = CommChannel.objects.get(name__iexact=chan_name) chan = CommChannel.objects.get(name__iexact=chan_name)
# This adds a CommChannelMembership object and a matching dict entry s = ""
# on the session's cdict. if membership:
comsys.plr_add_channel(source_object, chan_alias, chan) #we are already members of this channel. Set a different alias.
# Note: To this without requiring a the user to logout then login again,
# we need to delete, then rejoin the channel. Is this due to the lazy
# loading? /Griatch
prev_alias = membership[0].user_alias
if chan_alias == prev_alias:
s += "Alias unchanged."
else:
comsys.plr_del_channel(source_object, prev_alias)
comsys.plr_add_channel(source_object, chan_alias, chan)
s += "Channel '%s' alias changed from '%s' to '%s'." % (chan_name,prev_alias,
chan_alias)
else:
# This adds a CommChannelMembership object and a matching dict entry
# on the session's cdict.
comsys.plr_add_channel(source_object, chan_alias, chan)
# Let the player know everything went well. # Let the player know everything went well.
source_object.emit_to("You join %s, with an alias of %s." % \ s += "You join %s, with an alias of %s." % \
(chan.get_name(), chan_alias)) (chan.get_name(), chan_alias)
# Announce the user's joining. # Announce the user's joining.
join_msg = "%s has joined the channel." % \ join_msg = "%s has joined the channel." % \
(source_object.get_name(show_dbref=False),) (source_object.get_name(show_dbref=False),)
comsys.send_cmessage(chan, join_msg) comsys.send_cmessage(chan, join_msg)
source_object.emit_to(s)
except CommChannel.DoesNotExist: except CommChannel.DoesNotExist:
# Failed to match iexact on channel's 'name' attribute. # Failed to match iexact on channel's 'name' attribute.
source_object.emit_to("Could not find channel %s." % chan_name) source_object.emit_to("Could not find channel %s." % chan_name)
GLOBAL_CMD_TABLE.add_command("addcom", cmd_addcom), GLOBAL_CMD_TABLE.add_command("addcom", cmd_addcom),
def cmd_delcom(command): def cmd_delcom(command):
@ -120,10 +135,11 @@ GLOBAL_CMD_TABLE.add_command("comlist", cmd_comlist)
def cmd_allcom(command): def cmd_allcom(command):
""" """
allcom [on|off|who] allcom [on|off|who|clear]
Allows the user to universally turn off or on all channels they are on, 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. as well as perform a 'who' for all channels they are on. Clear deletes
all channels.
Without argument, works like comlist. Without argument, works like comlist.
""" """
@ -132,10 +148,13 @@ def cmd_allcom(command):
arg = command.command_argument arg = command.command_argument
if not arg: if not arg:
cmd_comlist(command) cmd_comlist(command)
source_object.emit_to("(allcom arguments: 'on', 'off' and 'who')") source_object.emit_to("(allcom arguments: 'on', 'off', 'who' and 'clear'.)")
return
arg = arg.strip()
if arg == 'clear':
cmd_clearcom(command)
return return
arg = arg.strip()
#get names and alias of all subscribed channels #get names and alias of all subscribed channels
chandict = comsys.plr_get_cdict(command.session) chandict = comsys.plr_get_cdict(command.session)
aliaslist = chandict.keys() aliaslist = chandict.keys()
@ -181,8 +200,22 @@ def cmd_clearcom(command):
Effectively runs delcom on all channels the user is on. It will remove their aliases, Effectively runs delcom on all channels the user is on. It will remove their aliases,
remove them from the channel, and clear any titles they have set. remove them from the channel, and clear any titles they have set.
""" """
# TODO: Implement cmd_clearcom source_object = command.source_object
pass #get aall subscribed channel memberships
memberships = source_object.channel_membership_set.all()
if not memberships:
s = "No channels to delete. "
else:
s = "Deleting all channels in your subscriptions ...\n"
for membership in memberships:
chan_name = membership.channel.get_name()
s += "You have left %s.\n" % chan_name
comsys.plr_del_channel(source_object, membership.user_alias)
comsys.send_cmessage(chan_name, "%s has left the channel." % source_object.get_name(show_dbref=False))
s = s[:-1]
source_object.emit_to(s)
GLOBAL_CMD_TABLE.add_command("clearcom", cmd_clearcom)
def cmd_clist(command): def cmd_clist(command):
""" """
@ -312,8 +345,7 @@ def cmd_cboot(command):
#all is set, boot the object by removing all its aliases from the channel. #all is set, boot the object by removing all its aliases from the channel.
for mship in membership: for mship in membership:
alias = mship.user_alias comsys.plr_del_channel(bootobj, mship.user_alias)
comsys.plr_del_channel(bootobj, alias)
GLOBAL_CMD_TABLE.add_command("@cboot", cmd_cboot) GLOBAL_CMD_TABLE.add_command("@cboot", cmd_cboot)

View file

@ -51,7 +51,7 @@ def plr_chan_off(session, calias):
calias: (str) The channel alias. calias: (str) The channel alias.
""" """
if not plr_listening_channel(session, calias, alias_search=True): 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 return
else: else:
cname = plr_cname_from_alias(session, calias) cname = plr_cname_from_alias(session, calias)