我正在尝试将连接到IRC的python机器人的输入规范化。
我的python脚本是这样的:http://pastebin.com/St4A1vLf
如果有人说" !help
",这将出现在命令提示符下(当我在命令提示符下运行脚本时)。
:bot!~botty@112.443.22.5 #fish :!help
我想做的是获取变量" data
"并将其规范化,以便它只显示用户的昵称,即" bot
",因此凝视冒号' :
'和字符串的其余部分(来自!~
)也被删除。
在此之后,我希望它向说" !help
"的用户发送带有" no help settings
"的私人消息/查询。(稍后我将添加帮助命令。
首先:您发布的行没有意义,因为缺少命令。你可能的意思是
:bot!~botty@112.443.22.5 PRIVMSG #fish :!help
但是为什么不使用现有的 python irc 实现之一,例如扭曲的单词呢?它们允许您轻松处理某些命令(例如您情况下的 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']