我的irc机器人挂在:calvino.freenode.net“NOTICE *: * 查找你的主机名......”在我向我的代码添加一些功能之前它正在工作。我已经对这些功能进行了评论,但它仍然没有用! 它停留在那条消息上,没有进展。我必须强迫它退出。
我是一个非常新手的编码员,我两周前才开始编码。所以我完全有可能在那里有一个非常愚蠢的错误。 作为参考,我用这篇文章来编写我的机器人的框架。 http://ubuntuforums.org/showpost.php?p=9363159&postcount=3 我没有发布我的其余代码,但我把它放在这个pastebin中,以防需要它! http://pastebin.com/kVF04UFr
import socket
import urllib2
import httplib
import mechanize
channel = '#testbot'
botnick = 'tastybot'
network = 'irc.freenode.net'
port = 6667
irc = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )
irc.connect ( ( network, port ) )
print irc.recv ( 4096 )
irc.send ( 'NICK' + botnick + ':\r\n' )
irc.send ( 'USER tastybot tastybot tastybot :Python IRC\r\n' )
irc.send ( 'JOIN' + channel + ':\r\n' )
irc.send ( 'PRIVMSG' + channel + ':What\'s up?\r\n' )
running = True
[various functions]
while running:
[rest of code]
答案 0 :(得分:1)
不确定这是不是您的错误,但您的字符串似乎有问题:
irc.send ( 'PRIVMSG' + channel + ':What's up?\r\n' )
你的撇号是什么让程序认为它已退出字符串
答案 1 :(得分:1)
我的猜测是你要连接的IRC服务器要求提供身份:
Ident是一种旧协议,服务器用于识别共享系统上的哪个用户连接到它们。如今,它最常用于从受感染的计算机(通常没有安装identd [ident daemon])中清除克隆和floodbots。
来源:http://help.undernet.org/faq.php#19
最简单的解决方法是尝试连接到另一台IRC服务器,您可以尝试'holmes.freenode.net'作为您的服务器。我在该服务器上使用我的IRC bot没有任何问题。
编辑: 如果您想查看我用于连接服务器的代码:connection.py
答案 2 :(得分:0)
发送时忘记了空格。应该是这样的:
import socket
import urllib2
import httplib
import mechanize
channel = '#testbot'
botnick = 'tastybot'
botuser = 'tastybot'
network = 'irc.freenode.net'
port = 6667
irc = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )
irc.connect ( ( network, port ) )
print irc.recv ( 4096 )
irc.send ( 'NICK ' + botnick + '\r\n' )
irc.send ( 'USER ' + botuser + ' 0 * :Python IRC\r\n' ) # Read RFC next time, please
irc.send ( 'JOIN ' + channel + '\r\n' )
irc.send ( 'PRIVMSG ' + channel + ' :What\'s up?\r\n' )
running = True
[various functions]
while running:
[rest of code]
如果帐户使用密码,只需发送PASS password
作为FIRST消息 - 在发送用户名和昵称之前 - 立即建立连接。
同样在IRC中(由RFC定义),最大消息len为512字节。
顺便说一句,当收到的字符串中的最后2个符号为\r\n
时,你应该真正停止阅读框架。我的机器人(hy-powered)中的样本:
(defn read [self]
(setv b 512)
(setv on True)
(setv c "")
(while (and on (!= b 0))
(setv x (self.sock.recv 1))
(+= c (x.decode "UTF-8"))
(-= b 1)
(if (= "\r\n" (cut c -2))
(do
(if (= "" (cut c -2))
(continue))
(setv on False)
(setv c (cut c 0 -2)))))
c)