Finished up addcom/delcom. Added comlist. Fixed @list commands (still needs to sort by command name eventually).

This commit is contained in:
Greg Taylor 2007-05-15 17:28:23 +00:00
parent e1f4c2e0da
commit c7452e5a88
7 changed files with 115 additions and 54 deletions

View file

@ -12,6 +12,9 @@ uncon_ctable = {
# Command Table # Command Table
ctable = { ctable = {
"addcom": commands_comsys.cmd_addcom,
"comlist": commands_comsys.cmd_comlist,
"delcom": commands_comsys.cmd_delcom,
"drop": commands_general.cmd_drop, "drop": commands_general.cmd_drop,
"examine": commands_general.cmd_examine, "examine": commands_general.cmd_examine,
"get": commands_general.cmd_get, "get": commands_general.cmd_get,

View file

@ -20,7 +20,82 @@ def cmd_addcom(cdat):
Adds an alias for a channel. Adds an alias for a channel.
addcom foo=Bar addcom foo=Bar
""" """
pass session = cdat['session']
server = cdat['server']
args = cdat['uinput']['splitted'][1:]
if len(args) == 0:
session.msg("You need to specify a channel alias and name.")
return
eq_args = args[0].split('=')
if len(eq_args) < 2:
session.msg("You need to specify a channel name.")
return
chan_alias = eq_args[0]
chan_name = eq_args[1]
if len(chan_name) == 0:
session.msg("You need to specify a channel name.")
return
if chan_alias in session.channels_subscribed:
session.msg("You are already on that channel.")
return
name_matches = functions_comsys.cname_search(chan_name, exact=True)
if name_matches:
session.set_user_channel(chan_alias, chan_name, True)
session.msg("You join %s, with an alias of %s." % (name_matches[0], chan_alias))
else:
session.msg("Could not find channel %s." % (chan_name,))
def cmd_delcom(cdat):
"""
delcom
Removes the specified alias to a channel. If this is the last alias,
the user is effectively removed from the channel.
"""
"""
@cdestroy
Destroys a channel.
"""
session = cdat['session']
uinput= cdat['uinput']['splitted']
chan_alias = ' '.join(uinput[1:])
if len(chan_alias) == 0:
session.msg("You must specify a channel alias.")
return
if chan_alias not in session.channels_subscribed:
session.msg("You are not on that channel.")
return
session.msg("You have left %s." % (session.channels_subscribed[chan_alias][0],))
session.del_user_channel(chan_alias)
def cmd_comlist(cdat):
"""
Lists the channels a user is subscribed to.
"""
session = cdat['session']
session.msg("Alias Channel Status")
for chan in session.channels_subscribed:
if session.channels_subscribed[chan][1]:
chan_on = "On"
else:
chan_on = "Off"
session.msg("%-9.9s %-19.19s %s" %
(chan, session.channels_subscribed[chan][0], chan_on))
session.msg("-- End of comlist --")
def cmd_allcom(cdat): def cmd_allcom(cdat):
""" """
@ -31,14 +106,6 @@ def cmd_allcom(cdat):
""" """
pass pass
def cmd_comtitle(cdat):
"""
comtitle
Sets a prefix to the user's name on the specified channel.
"""
pass
def cmd_clearcom(cdat): def cmd_clearcom(cdat):
""" """
clearcom clearcom
@ -68,7 +135,6 @@ def cmd_cdestroy(cdat):
Destroys a channel. Destroys a channel.
""" """
session = cdat['session'] session = cdat['session']
pobject = session.get_pobject()
uinput= cdat['uinput']['splitted'] uinput= cdat['uinput']['splitted']
cname = ' '.join(uinput[1:]) cname = ' '.join(uinput[1:])
@ -93,21 +159,6 @@ def cmd_cset(cdat):
""" """
pass pass
def cmd_cpflags(cdat):
"""
@cpflags
Sets various flags on a channel relating to players.
"""
pass
def cmd_coflags(cdat):
"""
@coflags
Sets various flags on a channel relating to objects.
"""
pass
def cmd_ccharge(cdat): def cmd_ccharge(cdat):
""" """
@ -151,7 +202,6 @@ def cmd_ccreate(cdat):
Creates a new channel with the invoker being the default owner. Creates a new channel with the invoker being the default owner.
""" """
session = cdat['session'] session = cdat['session']
pobject = session.get_pobject()
uinput= cdat['uinput']['splitted'] uinput= cdat['uinput']['splitted']
cname = ' '.join(uinput[1:]) cname = ' '.join(uinput[1:])
@ -176,12 +226,3 @@ def cmd_cchown(cdat):
Changes the owner of a channel. Changes the owner of a channel.
""" """
pass pass
def cmd_delcom(cdat):
"""
delcom
Removes the specified alias to a channel. If this is the last alias,
the user is effectively removed from the channel.
"""
pass

View file

@ -6,6 +6,7 @@ import functions_general
import commands_general import commands_general
import commands_unloggedin import commands_unloggedin
import cmdhandler import cmdhandler
import session_mgr import session_mgr
import ansi import ansi
import defines_global import defines_global
@ -88,7 +89,7 @@ def cmd_list(cdat):
if len(argstr) == 0: if len(argstr) == 0:
session.msg(msg_invalid) session.msg(msg_invalid)
elif argstr == "commands": elif argstr == "commands":
session.msg('Commands: '+' '.join(functions_general.command_list())) session.msg('Commands: '+ ' '.join(session.server.command_list()))
elif argstr == "process": elif argstr == "process":
loadvg = os.getloadavg() loadvg = os.getloadavg()
psize = resource.getpagesize() psize = resource.getpagesize()

View file

@ -30,7 +30,7 @@ NOSAVE_FLAGS = ["CONNECTED"]
NOSET_FLAGS = ["CONNECTED"] NOSET_FLAGS = ["CONNECTED"]
# These attribute names can't be modified by players. # These attribute names can't be modified by players.
NOSET_ATTRIBS = ["MONEY", "ALIAS", "LASTPAGED"] NOSET_ATTRIBS = ["MONEY", "ALIAS", "LASTPAGED", "CHANLIST"]
# Server version number. # Server version number.
EVENNIA_VERSION = 'Pre-Alpha' EVENNIA_VERSION = 'Pre-Alpha'

View file

@ -2,6 +2,7 @@ import session_mgr
import commands_privileged import commands_privileged
import commands_general import commands_general
import commands_unloggedin import commands_unloggedin
""" """
General commonly used functions. General commonly used functions.
""" """
@ -32,21 +33,6 @@ def log_infomsg(infomsg):
""" """
print '%s' % (infomsg,) print '%s' % (infomsg,)
def command_list():
"""
Return a list of all commands.
"""
commands = dir(commands_unloggedin) + dir(commands_general)
stf_commands = dir(commands_privileged)
filtered = [prospect for prospect in commands if "cmd_" in prospect]
stf_filtered = [prospect for prospect in stf_commands if "cmd_" in prospect]
processed = []
for cmd in filtered:
processed.append(cmd[4:])
for cmd in stf_filtered:
processed.append('@%s' %(cmd[4:],))
return processed
def time_format(seconds, style=0): def time_format(seconds, style=0):
""" """
Function to return a 'prettified' version of a value in seconds. Function to return a 'prettified' version of a value in seconds.

View file

@ -12,6 +12,7 @@ import functions_general
import session_mgr import session_mgr
import gameconf import gameconf
import settings import settings
import cmdtable
import initial_setup import initial_setup
class Server(dispatcher): class Server(dispatcher):
@ -92,6 +93,12 @@ class Server(dispatcher):
self.game_running = False self.game_running = False
def command_list(self):
"""
Return a string representing the server's command list.
"""
return cmdtable.ctable.keys()
def reload(self, session): def reload(self, session):
""" """
Reload modules that don't have any variables that can be reset. Reload modules that don't have any variables that can be reset.

View file

@ -1,6 +1,7 @@
from asyncore import dispatcher from asyncore import dispatcher
from asynchat import async_chat from asynchat import async_chat
import socket, asyncore, time, sys import socket, asyncore, time, sys
import pickle
import cmdhandler import cmdhandler
from apps.objects.models import Object from apps.objects.models import Object
from django.contrib.auth.models import User from django.contrib.auth.models import User
@ -31,6 +32,27 @@ class PlayerSession(async_chat):
self.cmd_total = 0 self.cmd_total = 0
# The time when the user connected. # The time when the user connected.
self.conn_time = time.time() self.conn_time = time.time()
self.channels_subscribed = {}
def set_user_channel(self, alias, cname, listening):
"""
Add a channel to a session's channel list.
"""
self.channels_subscribed[alias] = [cname, listening]
self.get_pobject().set_attribute("CHANLIST", pickle.dumps(self.channels_subscribed))
def del_user_channel(self, alias):
"""
Remove a channel from a session's channel list.
"""
del self.channels_subscribed[alias]
def load_user_channels(self):
"""
Un-pickle a user's channel list from their CHANLIST attribute.
"""
chan_list = self.get_pobject().get_attribute_value("CHANLIST")
self.channels_subscribed = pickle.loads(chan_list)
def collect_incoming_data(self, data): def collect_incoming_data(self, data):
""" """
@ -103,6 +125,7 @@ class PlayerSession(async_chat):
cdat = {"session": self, "uinput":'look', "server": self.server} cdat = {"session": self, "uinput":'look', "server": self.server}
cmdhandler.handle(cdat) cmdhandler.handle(cdat)
print "Login: %s" % (self,) print "Login: %s" % (self,)
self.load_user_channels()
def msg(self, message): def msg(self, message):
""" """