通常我会尝试使用twisted库来实现类似的功能,但Python3不提供这个功能,所以我尝试使用sockets库。代码确实建立了一个连接,但是服务器很快就以“没有ident响应”响应。我没有太多的网络编程经验,所以如果有人能指出我在这里犯的错误,我将不胜感激。我也很清楚有些函数/其他代码没有使用,或者我使用的不一致。我只是想把我所有的代码都粘贴在这里,以防万一。
import socket
server = "irc.freenode.net"
channel = "put channel here"
nickname = "put nickname here"
def encode(text):
return text.encode("ascii")
def ping():
irc_socket.send(encode("PONG :pingis\n"))
def send_message(chan, msg):
irc_socket.send(encode("PRIVMSG " + chan + " :" + msg + "\n"))
def join_channel(chan):
irc_socket.send(encode("JOIN " + chan + "\n"))
def login(username='user', realname='Pythonist', hostname='Helena', servername='Server'):
irc_socket.send(encode("USER %s %s %s %s" % (username, hostname, servername, realname)))
irc_socket.send(encode("NICK " + nickname))
irc_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
irc_socket.connect((server, 6667))
login()
join_channel(channel)
while True:
buffer = irc_socket.recv(1024)
msg = str.split(str(buffer))
if msg[0] == "PING":
irc_socket.send("PONG %s" % msg[1])
print(msg)
代码最初来自:http://wiki.shellium.org/w/Writing_an_IRC_bot_in_Python,我做了一些小改动。
Ident是一种UNIX服务,20多年来没有人使用它。
它用于在终端应用程序中进行终端服务器到远程服务器的连接时标识远程用户。Ident对于现代互联网来说是不安全的,所以没有人再使用它了。
所以你撞上了过去的鬼魂。另外,正如上面的回答中提到的,如果发送正确的
NICK
命令,IRC服务器对您的客户机很满意。引起所有麻烦的小问题:您在
login
中缺少新行。"USER %s %s %s %s"
应该是"USER %s %s %s %s\n"
,"NICK " + nickname
应该是"NICK " + nickname + "\n"
。服务器查找您的标识,但找不到它,之后的下一步是让您注册,但您从未向它发送完整的行,因此它一直在等待…等待相关问题 更多 >
编程相关推荐