【问题标题】:IRC BOT (python)IRC 机器人(蟒蛇)
【发布时间】:2011-04-09 00:47:58
【问题描述】:
sck = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sck.connect((irc, port))
sck.send('PRIVMSG ' + 'NICKSERV' + 'ghost' + 'supaBOT' + 'htown')
sck.send('NICK supaBOT\r\n')
sck.send('PRIVMSG ' + 'NICKSERV' + 'IDENTIFY' + 'password')
sck.send('USER supaBOT supaBOT supaBOT :supaBOT Script\r\n')
sck.send('JOIN ' + " " + chan + '\r\n')

当我尝试运行脚本时出现此错误:

trix.gonullyourself.org 451 PRIVMSG  You have not registered
trix.gonullyourself.org 451 PRIVMSG  You have not registered
trix.gonullyourself.org 451 JOIN  You have not registered
: You

nick supaBOT 已在服务器上注册,但我不知道如何向服务器识别,因为上面的代码不起作用。

【问题讨论】:

    标签: python sockets irc


    【解决方案1】:

    就像迈克所说,您没有发送您应该发送的数据。您需要在那里添加空格,如果它们有空格,则在最终命令参数之前需要:。有些行也缺少'\r\n'。

    也就是说,PRIVMSG 的格式是:'PRIVMSG nick :message with spaces\r\n'

    PRIVMSG只有两个参数,所以你需要把:放在那里,表示该行的其余部分只有一个值,可能包含空格。

    您收到"You have not registered" 的原因是因为您必须在发送任何其他命令之前发送USER 和NICK 命令。如果NICK 命令失败(缺口碰撞),您必须检测错误并尝试另一个错误。一旦你发送了一个有效的USER 和NICK 命令,一些IRC 网络也会给你发送一个PING,你必须在服务器认为你“注册”之前回复PONG。之后你可以使用其他命令。

    【讨论】:

    • 这行得通,我没有收到任何错误,但由于某些奇怪的原因,该机器人无法识别 nickserv:|
    • @SourD 你在使用'PRIVMSG NICKSERV :IDENTIFY password\r\n'吗?它有什么反应吗?你用的是什么irc网络?
    • 好的,感谢您的帮助,我已经解决了这个问题,使用 'PRIVMSG NICKSERV IDENTIFY password\r\n' 没有 :
    • @SourD 如果可行,则 irc 服务器不符合 irc 协议规范。规范不允许参数内有空格,除非它是最后一个参数并且以: 为前缀。请参阅message format 和private messages 上的部分。
    【解决方案2】:

    检查你的字符串,'PRIVMSG ' + 'NICKSERV' + 'IDENTIFY' + 'password' 打印 PRIVMSG NICKSERVIDENTIFYpassword 这显然不是你想要发送的

    Ftr,最好使用字符串替换或 .format() 因为混合它们会增加额外的开销,因为每个字母会强制 python 在添加字母之前循环遍历字符串。即:'PRIVMSG NICKSERV IDENTIFY %s' %(password) 或 'PRIVMSG NICKSERV IDENTIFY {0}'.format(password)

    如果你想使用它,还有一个 irclib 已经存在(并且 supybot 存在/存在并且是一个纯 python irc bot)。

    【讨论】:

      猜你喜欢
      • 2014-02-07
      • 2019-05-17
      • 2018-12-31
      • 2017-05-13
      • 2012-02-03
      • 1970-01-01
      • 1970-01-01
      • 2017-01-26
      • 2012-07-28
      相关资源
      最近更新 更多