From 9f3c3c5cb90d3c35970ed84ce7ba3a1b1ffd9b73 Mon Sep 17 00:00:00 2001 From: Rachel Blackman Date: Thu, 29 Mar 2018 18:02:45 -0700 Subject: [PATCH 1/5] Add 'INFO' command to unlogged-in command set, so that we can be polled by Mudconnector and Mudstats. --- evennia/commands/default/cmdset_unloggedin.py | 1 + evennia/commands/default/unloggedin.py | 21 ++++++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/evennia/commands/default/cmdset_unloggedin.py b/evennia/commands/default/cmdset_unloggedin.py index 5e43d5e8c8..1c45d908aa 100644 --- a/evennia/commands/default/cmdset_unloggedin.py +++ b/evennia/commands/default/cmdset_unloggedin.py @@ -23,3 +23,4 @@ class UnloggedinCmdSet(CmdSet): self.add(unloggedin.CmdUnconnectedHelp()) self.add(unloggedin.CmdUnconnectedEncoding()) self.add(unloggedin.CmdUnconnectedScreenreader()) + self.add(unloggedin.CmdUnconnectedInfo()) diff --git a/evennia/commands/default/unloggedin.py b/evennia/commands/default/unloggedin.py index 429948b0fb..28c126e6d8 100644 --- a/evennia/commands/default/unloggedin.py +++ b/evennia/commands/default/unloggedin.py @@ -3,6 +3,7 @@ Commands that are available from the connect screen. """ import re import time +import datetime from collections import defaultdict from random import getrandbits from django.conf import settings @@ -11,8 +12,9 @@ from evennia.accounts.models import AccountDB from evennia.objects.models import ObjectDB from evennia.server.models import ServerConfig from evennia.comms.models import ChannelDB +from evennia.server.sessionhandler import SESSIONS -from evennia.utils import create, logger, utils +from evennia.utils import create, logger, utils, gametime from evennia.commands.cmdhandler import CMD_LOGINSTART COMMAND_DEFAULT_CLASS = utils.class_from_module(settings.COMMAND_DEFAULT_CLASS) @@ -516,6 +518,23 @@ class CmdUnconnectedScreenreader(COMMAND_DEFAULT_CLASS): self.session.sessionhandler.session_portal_sync(self.session) +class CmdUnconnectedInfo(COMMAND_DEFAULT_CLASS): + """ + Provides MUDINFO output, so that Evennia games can be added to Mudconnector + and Mudstats. + """ + key = "info" + locks = "cmd:all()" + + def func(self): + self.caller.msg("## BEGIN INFO 1.1") + self.caller.msg("Name: %s" % settings.SERVERNAME) + self.caller.msg("Uptime: %s" % datetime.datetime.fromtimestamp(gametime.SERVER_START_TIME).ctime()) + self.caller.msg("Connected: %d" % SESSIONS.account_count()) + self.caller.msg("Version: Evennia %s" % utils.get_evennia_version()) + self.caller.msg("## END INFO") + + def _create_account(session, accountname, password, permissions, typeclass=None, email=None): """ Helper function, creates an account of the specified typeclass. From 567243a3fc87ee929f98c95ab3bd77b44b493c2e Mon Sep 17 00:00:00 2001 From: Rachel Blackman Date: Sat, 31 Mar 2018 23:15:28 -0700 Subject: [PATCH 2/5] Update INFO command to take a single msg() call, and add better docstring. --- evennia/commands/default/unloggedin.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/evennia/commands/default/unloggedin.py b/evennia/commands/default/unloggedin.py index 28c126e6d8..293e022a19 100644 --- a/evennia/commands/default/unloggedin.py +++ b/evennia/commands/default/unloggedin.py @@ -521,18 +521,19 @@ class CmdUnconnectedScreenreader(COMMAND_DEFAULT_CLASS): class CmdUnconnectedInfo(COMMAND_DEFAULT_CLASS): """ Provides MUDINFO output, so that Evennia games can be added to Mudconnector - and Mudstats. + and Mudstats. Sadly, the MUDINFO specification seems to have dropped off the + face of the net, but it is still used by some crawlers. This implementation + was created by looking at the MUDINFO implementation in MUX2, TinyMUSH, Rhost, + and PennMUSH. """ key = "info" locks = "cmd:all()" def func(self): - self.caller.msg("## BEGIN INFO 1.1") - self.caller.msg("Name: %s" % settings.SERVERNAME) - self.caller.msg("Uptime: %s" % datetime.datetime.fromtimestamp(gametime.SERVER_START_TIME).ctime()) - self.caller.msg("Connected: %d" % SESSIONS.account_count()) - self.caller.msg("Version: Evennia %s" % utils.get_evennia_version()) - self.caller.msg("## END INFO") + self.caller.msg("## BEGIN INFO 1.1\nName: %s\nUptime: %s\nConnected: %d\nVersion: Evennia %s\n## END INFO" % ( + settings.SERVERNAME, + datetime.datetime.fromtimestamp(gametime.SERVER_START_TIME).ctime(), + SESSIONS.account_count(), utils.get_evennia_version())) def _create_account(session, accountname, password, permissions, typeclass=None, email=None): From 2ab99ee1bf97f2f4bc715340f0bd6478e7677175 Mon Sep 17 00:00:00 2001 From: Rachel Blackman Date: Sun, 1 Apr 2018 00:39:16 -0700 Subject: [PATCH 3/5] Add test for unconnected commands, add INFO command to test set. --- evennia/commands/default/tests.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/evennia/commands/default/tests.py b/evennia/commands/default/tests.py index 41654077a4..a645014482 100644 --- a/evennia/commands/default/tests.py +++ b/evennia/commands/default/tests.py @@ -14,15 +14,16 @@ main test suite started with import re import types +import datetime from django.conf import settings from mock import Mock, mock from evennia.commands.default.cmdset_character import CharacterCmdSet from evennia.utils.test_resources import EvenniaTest -from evennia.commands.default import help, general, system, admin, account, building, batchprocess, comms +from evennia.commands.default import help, general, system, admin, account, building, batchprocess, comms, unloggedin from evennia.commands.command import Command, InterruptCommand -from evennia.utils import ansi, utils +from evennia.utils import ansi, utils, gametime from evennia.server.sessionhandler import SESSIONS from evennia import search_object from evennia import DefaultObject, DefaultCharacter @@ -433,3 +434,12 @@ class TestInterruptCommand(CommandTest): def test_interrupt_command(self): ret = self.call(CmdInterrupt(), "") self.assertEqual(ret, "") + + +class TestUnconnectedCommand(CommandTest): + def test_info_command(self): + expected = "## BEGIN INFO 1.1\nName: %s\nUptime: %s\nConnected: %d\nVersion: Evennia %s\n## END INFO" % ( + settings.SERVERNAME, + datetime.datetime.fromtimestamp(gametime.SERVER_START_TIME).ctime(), + SESSIONS.account_count(), utils.get_evennia_version()) + self.call(unloggedin.CmdUnconnectedInfo(), "", expected) \ No newline at end of file From 235d41a10494be37f6c23e893ff2ea5a17a70282 Mon Sep 17 00:00:00 2001 From: CloudKeeper1 Date: Sat, 14 Apr 2018 00:23:52 +1000 Subject: [PATCH 4/5] Wrong symbol on line 499 Wrong symbol on line 499 --- evennia/commands/default/general.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/evennia/commands/default/general.py b/evennia/commands/default/general.py index 2f4c51a227..f9634ed675 100644 --- a/evennia/commands/default/general.py +++ b/evennia/commands/default/general.py @@ -496,7 +496,7 @@ class CmdWhisper(COMMAND_DEFAULT_CLASS): Usage: whisper = - whisper , = , = Talk privately to one or more characters in your current location, without others in the room being informed. From 7ae3a434241c17b25b6b11b6514ceff509633524 Mon Sep 17 00:00:00 2001 From: Aditya Arora Date: Mon, 16 Apr 2018 18:41:02 +0530 Subject: [PATCH 5/5] Update rpsystem.py --- evennia/contrib/rpsystem.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/evennia/contrib/rpsystem.py b/evennia/contrib/rpsystem.py index a56d2de731..efba0fe7fd 100644 --- a/evennia/contrib/rpsystem.py +++ b/evennia/contrib/rpsystem.py @@ -1088,7 +1088,7 @@ class CmdMask(RPCommand): if self.cmdstring == "mask": # wear a mask if not self.args: - caller.msg("Usage: (un)wearmask sdesc") + caller.msg("Usage: (un)mask sdesc") return if caller.db.unmasked_sdesc: caller.msg("You are already wearing a mask.") @@ -1111,7 +1111,7 @@ class CmdMask(RPCommand): del caller.db.unmasked_sdesc caller.locks.remove("enable_recog") caller.sdesc.add(old_sdesc) - caller.msg("You remove your mask and is again '%s'." % old_sdesc) + caller.msg("You remove your mask and are again '%s'." % old_sdesc) class RPSystemCmdSet(CmdSet):