0

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

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

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

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

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

4

1 回答 1

0

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

: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']
于 2012-04-28T08:31:30.427 回答