如何忽略errbot中的特定消息或用户?

时间:2018-08-15 09:03:35

标签: errbot

我在IRC freenode服务器上使用当前配置:

Xamarin.Android

并且我将身份验证用于IRC服务。

但是,当机器人登录时会出现问题:当机器人使用NickServ进行标识时,机器人会从NickServ接收包含其昵称的消息,并将其视为命令(由于BOT_PREFIX = '@' BOT_PREFIX_OPTIONAL_ON_CHAT = True BOT_ALT_PREFIXES = ('Err', "bot", "mybot", "botka", "errbot") BOT_ALT_PREFIX_SEPARATORS = (':', ',', ';') BOT_ALT_PREFIX_CASEINSENSITIVE = True BOT_PREFIX_OPTIONAL_ON_CHAT) 。然后,errbot将有关“错误命令”的错误消息发送给NickServ,NickServ回复说它不了解bot私有的“错误命令”,然后再次启动...

因此,在这些漫游器通过此次对话吞噬所有互联网流量之前,我如何才能从此对话中排除NickServ或导致errbot不要以“错误的命令”或任何其他解决方案进行回复?

当前,我在插件中使用了肮脏的技巧来掩盖来自NickServ的“无效命令”:

BOT_ALT_PREFIXES

,这可以防止errbot回复NickServ。还需要使用

@botcmd()
def Invalid(self, msg, args):
    if args.startswith("Invalid command."):
        return

但是我正在寻找更好的解决方案。预先感谢!

机器人对话记录:

HIDE_RESTRICTED_COMMANDS = True
HIDE_RESTRICTED_ACCESS = True

2 个答案:

答案 0 :(得分:1)

我使用过滤器插件完成了此操作;在配置中,我有一个要忽略的用户列表:

from errbot import BotPlugin, cmdfilter

IGNORE_COMMAND = (None, None, None)

class IgnoreUsers(BotPlugin):
    """Command filter that causes blocks any response to zombot."""

    @cmdfilter
    def ignore_users(self, msg, cmd, args, dry_run):
        """
        Check command to see if it came from zombot, and if so block it

        :param msg: The original chat message.
        :param cmd: The command name itself.
        :param args: Arguments passed to the command.
        :param dry_run: True when this is a dry-run.
        """
        for user in self.bot_config.IGNORE_USERS:
            if msg.frm.person == user:
                self.log.info("Ignored %s from %s." % (cmd, user))
                return IGNORE_COMMAND # didn't hear a thing
        return msg, cmd, args # ok, don't ignore it

答案 1 :(得分:0)

我需要更仔细地阅读文档: SUPPRESS_CMD_NOT_FOUND = True可以解决问题,尽管仍然存在忽略特定用户/消息的问题。