在python中创建一个简单的IRC bot。遇到麻烦

时间:2014-11-27 01:15:22

标签: python python-3.x bots irc

所以几个小时前我决定尝试使用python的套接字并构建一个简单的irc机器人。到目前为止,我在连接服务器时遇到了一些麻烦。我得到以下错误:

b":irc.ku.cx 439 * :Please wait while we process your connection.\r\n:irc.ku.cx NOTICE AUTH :*** Couldn't look up your hostname (cached)\r\n"
b':irc.ku.cx NOTICE AUTH :*** Checking Ident\r\n'
b':irc.ku.cx NOTICE AUTH :*** No Ident response\r\n'

之后就停了下来。但是大约一分钟的运行我突然得到了无数的b"",每个都在一个新的行中(可能与代码中的while循环有关)。这是我的代码:

import socket

server = 'irc.rizon.net'
channel = '#linux'
nick = 'MyBot'
port = 6667

ircsock = socket.socket()
ircsock.connect((server, port))

ircsock.send(bytes('"NICK " + nick', 'UTF-8'))
ircsock.send(bytes('"USER " + nick + " " + nick + " " + nick + " :" + nick', 'UTF-8'))

while True:
    data = ircsock.recv(2048)
    print (data)

    if data.find(b"PING") != -1:
        ircsock.send(b"PONG :" + data.split(':')[1])

感谢您提供任何帮助。

1 个答案:

答案 0 :(得分:0)

正如icktoofay所说,你的代码中还有额外的引号。此外,在IRC中,您需要在每个命令的末尾添加换行符(\r\n)。

替换这些行:

ircsock.send(bytes('"NICK " + nick', 'UTF-8'))
ircsock.send(bytes('"USER " + nick + " " + nick + " " + nick + " :" + nick', 'UTF-8'))

ircsock.send(bytes("NICK " + nick + "\r\n", 'UTF-8'))
ircsock.send(bytes("USER " + nick + " " + nick + " " + nick + " :" + nick + "\r\n", 'UTF-8'))

它应该有用。

顺便说一句,我建议使用socket.makefile()代替,它会为您处理缓冲和编码。这是您的代码修改为使用文件界面:

import socket

server = 'irc.rizon.net'
channel = '#linux'
nick = 'MyBot'
port = 6667

ircsock = socket.socket()
ircsock.connect((server, port))

handle = ircsock.makefile(mode='rw', buffering=1, encoding='utf-8', newline='\r\n')

print('NICK', nick, file=handle)
print('USER', nick, nick, nick, ':'+nick, file=handle)

for line in handle:
    line = line.strip()
    print(line)

    if "PING" in line:
        print("PONG :" + line.split(':')[1], file=handle)

在这里,我使用print函数自动插入空格和换行符。