【问题标题】:modifying a string and sending a PM/query to a irc user修改字符串并向 irc 用户发送 PM/查询
【发布时间】:2012-04-28 06:48:46
【问题描述】:

我正在尝试规范化来自连接到 IRC 的 python 机器人的输入。
我的python脚本是这样的:http://pastebin.com/St4A1vLf

如果有人说“!help”,这将出现在命令提示符中(当我在命令提示符下运行脚本时)。

:bot!~botty@112.443.22.5 #fish :!help

我想要做的是获取变量“data”并对其进行规范化,以便它只显示用户的昵称,即“bot”,因此凝视冒号“:”和字符串的其余部分(从!~) 也被删除。

在此之后,我希望它向说“!help”的用户发送带有“no help settings”的私人消息/查询。 (我稍后会添加帮助命令。)

【问题讨论】:

    标签: python irc


    【解决方案1】:

    首先:由于缺少命令,您发布的行没有意义。你的意思可能是

    :bot!~botty@112.443.22.5 PRIVMSG #fish :!help
    

    但是为什么不使用现有的python irc 实现之一,例如twisted-words?它们允许您轻松处理某些命令(例如您的情况下的 PRIVMSG)。

    如果您不想这样做,您需要手动解析传入的消息并提取您需要的任何信息。

    这是一个简单的解析器。 line 是从服务器接收到的一行。

    def parse_irc(line):
        src = None
        parts = line.split(' ')
        if parts[0][0] == ':':
            srcpart = parts.pop(0)[1:]
            src = {'ident': None, 'host': None}
            if '!' not in srcpart:
                # e.g. a message from a server
                src['nick'] = srcpart
            else:
                # nick!ident@host
                tmp = srcpart.split('!', 1)
                src['nick'] = tmp[0]
                src['ident'], src['host'] = tmp[1].split('@', 1)
        cmd = parts.pop(0)
        args = []
        for i, arg in enumerate(parts):
            if arg[0] == ':':
                args.append(' '.join(parts[i:])[1:])
                break
            args.append(arg)
        return src, cmd, args
    

    解析后的行如下所示:

    > python ircparser.py 'PING :12345'
    src:  None
    cmd:  'PING'
    args: ['12345']
    > python ircparser.py 'NOTICE AUTH :Welcome to this server'
    src:  None
    cmd:  'NOTICE'
    args: ['AUTH', 'Welcome to this server']
    > python ircparser.py ':me!ident@host PRIVMSG #channel :hi'
    src:  {'nick': 'me', 'host': 'host', 'ident': 'ident'}
    cmd:  'PRIVMSG'
    args: ['#channel', 'hi']
    > python ircparser.py ':me!ident@host PRIVMSG #channel :!help me'
    src:  {'nick': 'me', 'host': 'host', 'ident': 'ident'}
    cmd:  'PRIVMSG'
    args: ['#channel', '!help me']
    

    【讨论】:

      猜你喜欢
      • 2015-11-17
      • 1970-01-01
      • 2021-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多