From 68e806200767e43d48343bfadb1c76d4c347bba5 Mon Sep 17 00:00:00 2001 From: Griatch Date: Mon, 23 Feb 2015 16:15:29 +0100 Subject: [PATCH] Refactored the way default channels are added. --- evennia/commands/default/unloggedin.py | 10 +++----- evennia/players/players.py | 7 +++--- evennia/server/initial_setup.py | 30 +++------------------- evennia/settings_default.py | 35 ++++++++++++++++---------- 4 files changed, 33 insertions(+), 49 deletions(-) diff --git a/evennia/commands/default/unloggedin.py b/evennia/commands/default/unloggedin.py index 93d6f129f4..e6af6679c9 100644 --- a/evennia/commands/default/unloggedin.py +++ b/evennia/commands/default/unloggedin.py @@ -415,12 +415,10 @@ def _create_player(session, playername, password, utils.init_new_player(new_player) # join the new player to the public channel - pchanneldef = settings.CHANNEL_PUBLIC - if pchanneldef: - pchannel = ChannelDB.objects.get_channel(pchanneldef[0]) - if not pchannel.connect(new_player): - string = "New player '%s' could not connect to public channel!" % new_player.key - logger.log_errmsg(string) + pchannel = ChannelDB.objects.get_channel(settings.DEFAULT_CHANNELS[0]["key"]) + if not pchannel.connect(new_player): + string = "New player '%s' could not connect to public channel!" % new_player.key + logger.log_errmsg(string) return new_player diff --git a/evennia/players/players.py b/evennia/players/players.py index 5c3ac6ab4a..bd2e1e1a22 100644 --- a/evennia/players/players.py +++ b/evennia/players/players.py @@ -241,9 +241,9 @@ class DefaultPlayer(PlayerDB): if not session: return False session = make_iter(session)[0] - print "unpuppet, session:", session, session.puppet + #print "unpuppet, session:", session, session.puppet obj = hasattr(session, "puppet") and session.puppet or None - print "unpuppet, obj:", obj + #print "unpuppet, obj:", obj if not obj: return False # do the disconnect, but only if we are the last session to puppet @@ -613,7 +613,8 @@ class DefaultPlayer(PlayerDB): global _CONNECT_CHANNEL if not _CONNECT_CHANNEL: try: - _CONNECT_CHANNEL = ChannelDB.objects.filter(db_key=settings.CHANNEL_CONNECTINFO[0])[0] + print "all channels:", ChannelDB.objects.all() + _CONNECT_CHANNEL = ChannelDB.objects.filter(db_key=settings.DEFAULT_CHANNELS[1]["key"])[0] except Exception: logger.log_trace() now = datetime.datetime.now() diff --git a/evennia/server/initial_setup.py b/evennia/server/initial_setup.py index 168c27a7d8..fd5480db74 100644 --- a/evennia/server/initial_setup.py +++ b/evennia/server/initial_setup.py @@ -125,34 +125,10 @@ def create_channels(): """ print " Creating default channels ..." - # public channel - key1, aliases, desc, locks = settings.CHANNEL_PUBLIC - pchan = create.create_channel(key1, aliases, desc, locks=locks) - # mudinfo channel - key2, aliases, desc, locks = settings.CHANNEL_MUDINFO - ichan = create.create_channel(key2, aliases, desc, locks=locks) - # connectinfo channel - key3, aliases, desc, locks = settings.CHANNEL_CONNECTINFO - cchan = create.create_channel(key3, aliases, desc, locks=locks) - - # TODO: postgresql-psycopg2 has a strange error when trying to - # connect the user to the default channels. It works fine from inside - # the game, but not from the initial startup. We are temporarily bypassing - # the problem with the following fix. See Evennia Issue 151. - if ((".".join(str(i) for i in django.VERSION) < "1.2" - and settings.DATABASE_ENGINE == "postgresql_psycopg2") - or (hasattr(settings, 'DATABASES') - and settings.DATABASES.get("default", {}).get('ENGINE', None) - == 'django.db.backends.postgresql_psycopg2')): - print WARNING_POSTGRESQL_FIX.format(chan1=key1, chan2=key2, chan3=key3) - return - - # connect the god user to all these channels by default. goduser = get_god_player() - pchan.connect(goduser) - ichan.connect(goduser) - cchan.connect(goduser) - + for channeldict in settings.DEFAULT_CHANNELS: + channel = create.create_channel(**channeldict) + channel.connect(goduser) def create_system_scripts(): """ diff --git a/evennia/settings_default.py b/evennia/settings_default.py index 7de89ec4cf..04642a218a 100644 --- a/evennia/settings_default.py +++ b/evennia/settings_default.py @@ -424,19 +424,28 @@ GUEST_LIST = ["Guest" + str(s+1) for s in range(9)] # In-game Channels created from server start ###################################################################### -# Each default channel is defined by a tuple containing -# (name, aliases, description, locks) -# where aliases may be a tuple too, and locks is -# a valid lockstring definition. -# Default user channel for communication -CHANNEL_PUBLIC = ("Public", ('ooc',), 'Public discussion', - "control:perm(Wizards);listen:all();send:all()") -# General info about the server -CHANNEL_MUDINFO = ("MUDinfo", '', 'Informative messages', - "control:perm(Immortals);listen:perm(Immortals);send:false()") -# Channel showing when new people connecting -CHANNEL_CONNECTINFO = ("MUDconnections", '', 'Connection log', - "control:perm(Immortals);listen:perm(Wizards);send:false()") +# This is a list of global channels created by the +# initialization script the first time Evennia starts. +# The superuser (user #1) will be automatically subscribed +# to all channels in this list. Each channel is described by +# a dictionary keyed with the same keys valid as arguments +# to the evennia.create.create_channel() function. +# Note: Evennia will treat the first channel in this list as +# the general "public" channel and the second as the +# general "mud info" channel. Other channels beyond that +# are up to the admin to design and call appropriately. +DEFAULT_CHANNELS = [ + # public channel + {"key": "Public", + "aliases": ('ooc', 'pub'), + "desc": "Public discussion", + "locks": "control:perm(Wizards);listen:all();send:all()"}, + # connection/mud info + {"key": "MudInfo", + "aliases": "", + "desc": "Connection log", + "locks": "control:perm(Immortals);listen:perm(Wizards);send:false()"} + ] ###################################################################### # External Channel connections