From e62418fd11d97c50f4db742e435959920998f58a Mon Sep 17 00:00:00 2001 From: "Tablet-PC\\cloud" Date: Wed, 18 Jan 2017 12:26:42 +1100 Subject: [PATCH] Bots use inputfunc --- evennia/players/bots.py | 24 ------------------------ evennia/server/inputfuncs.py | 35 +++++++++++++++++++++++++++++++++++ evennia/server/portal/irc.py | 6 +++--- evennia/server/portal/rss.py | 4 ++-- 4 files changed, 40 insertions(+), 29 deletions(-) diff --git a/evennia/players/bots.py b/evennia/players/bots.py index 5d60e6de4d..99dbbea3cb 100644 --- a/evennia/players/bots.py +++ b/evennia/players/bots.py @@ -79,29 +79,6 @@ class BotStarter(DefaultScript): """ self.db.started = False - -class CmdBotListen(Command): - """ - This is a command that absorbs input aimed specifically at the - bot. The session must prepend its data with bot_data_in for this - to trigger. - - """ - key = "bot_data_in" - def func(self): - "Relay to typeclass" - self.obj.execute_cmd(self.args.strip(), session=self.session) - -class BotCmdSet(CmdSet): - """ - Holds the BotListen command - - """ - key = "botcmdset" - def at_cmdset_creation(self): - self.add(CmdBotListen()) - - # Bot base class class Bot(DefaultPlayer): @@ -123,7 +100,6 @@ class Bot(DefaultPlayer): lockstring = "examine:perm(Wizards);edit:perm(Wizards);delete:perm(Wizards);boot:perm(Wizards);msg:false()" self.locks.add(lockstring) # set the basics of being a bot - self.cmdset.add_default(BotCmdSet) script_key = "%s" % self.key self.scripts.add(BotStarter, key=script_key) self.is_bot = True diff --git a/evennia/server/inputfuncs.py b/evennia/server/inputfuncs.py index 721e501102..5930721cef 100644 --- a/evennia/server/inputfuncs.py +++ b/evennia/server/inputfuncs.py @@ -80,6 +80,41 @@ def text(session, *args, **kwargs): session.update_session_counters() +def bot_data_in(session, *args, **kwargs): + """ + Text input from the IRC and RSS bots. + This will trigger the execute_cmd method on the bots in-game counterpart. + + Args: + text (str): First arg is text input. Other arguments are ignored. + + """ + + text = args[0] if args else None + + # Explicitly check for None since text can be an empty string, which is + # also valid + if text is None: + return + # this is treated as a command input + # handle the 'idle' command + if text.strip() in _IDLE_COMMAND: + session.update_session_counters(idle=True) + return + if session.player: + # nick replacement + puppet = session.puppet + if puppet: + text = puppet.nicks.nickreplace(text, + categories=("inputline", "channel"), include_player=True) + else: + text = session.player.nicks.nickreplace(text, + categories=("inputline", "channel"), include_player=False) + kwargs.pop("options", None) + session.player.execute_cmd(text=text, session=session) + session.update_session_counters() + + def echo(session, *args, **kwargs): """ Echo test function diff --git a/evennia/server/portal/irc.py b/evennia/server/portal/irc.py index 4036e1cf7c..685e3d35ed 100644 --- a/evennia/server/portal/irc.py +++ b/evennia/server/portal/irc.py @@ -178,7 +178,7 @@ class IRCBot(irc.IRCClient, Session): if not msg.startswith('***'): user = user.split('!', 1)[0] user = ansi.raw(user) - self.data_in("bot_data_in %s@%s: %s" % (user, channel, msg)) + self.data_in("%s@%s: %s" % (user, channel, msg)) def action(self, user, channel, msg): """ @@ -192,7 +192,7 @@ class IRCBot(irc.IRCClient, Session): """ if not msg.startswith('**'): user = user.split('!', 1)[0] - self.data_in("bot_data_in %s@%s %s" % (user, channel, msg)) + self.data_in("%s@%s %s" % (user, channel, msg)) def data_in(self, text=None, **kwargs): """ @@ -204,7 +204,7 @@ class IRCBot(irc.IRCClient, Session): """ - self.sessionhandler.data_in(self, text=text, **kwargs) + self.sessionhandler.data_in(self, bot_data_in=text, **kwargs) def send_text(self, *args, **kwargs): """ diff --git a/evennia/server/portal/rss.py b/evennia/server/portal/rss.py index b932affca9..c906028f94 100644 --- a/evennia/server/portal/rss.py +++ b/evennia/server/portal/rss.py @@ -80,7 +80,7 @@ class RSSReader(Session): if not init: # for initialization we just ignore old entries for entry in reversed(new_entries): - self.data_in("bot_data_in " + entry) + self.data_in(entry) def data_in(self, text=None, **kwargs): """ @@ -91,7 +91,7 @@ class RSSReader(Session): kwargs (any): Options from protocol. """ - self.sessionhandler.data_in(self, text=text, **kwargs) + self.sessionhandler.data_in(self, bot_data_in=text, **kwargs) def _errback(self, fail): "Report error"