IRC бот не может присоединиться к каналу - PullRequest
3 голосов
/ 19 февраля 2010
import socket

irc = 'irc.hack3r.com'
port = 6667
channel = '#chat'
sck = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sck.connect((irc, port))
sck.send('NICK supaBOT\r\n')
sck.send('USER supaBOT supaBOT supaBOT :supaBOT Script\r\n')
sck.send('JOIN #chat' + '\r\n')
data = ''
while True:
     data = sck.recv(4096)
     if data.find('PING') != -1:
        sck.send('PONG ' + data.split() [1] + '\r\n')
        print data

print sck.recv(4096)

Когда я подключаюсь к серверу, я не могу присоединиться к каналу, я получаю эту ошибку:

"451 ПРИСОЕДИНЯЙТЕСЬ: Вы не зарегистрированы"

Ответы [ 4 ]

11 голосов
/ 01 апреля 2012

Майк Грэм неправ. Что плохого в том, что вы отправляете команду JOIN слишком рано. Серверу требуется некоторое время, чтобы зарегистрировать команды NICK и USER, поэтому возникает ошибка «Nick notistered». Смотрите этот ответ: Бот Python IRC не присоединится .

Я также хотел бы призвать вас продолжать изучать и изучать протокол IRC, делая ботов с голыми сокетами. Кто заботится о вашем коде, не полностью соответствует RFC 1459. Вряд ли какой-либо сервер, клиент или бот соответствует 100% стандартам. Но если это работает, это работает!

И в отличие от того, о чем говорит Дейнит, не так уж сложно добиться отличных результатов с IRC-ботом с открытым сокетом. Просто прочитайте RFC и поэкспериментируйте!

2 голосов
/ 19 февраля 2010

Звучит так, будто Вы не зарегистрированы, и это требование для присоединения к этому каналу.Вам нужно будет зарегистрировать свой ник, а затем идентифицировать, прежде чем присоединиться.

Кроме того, попытка сделать бот irc с голыми сокетами не очень хорошая идея.Этот код не реализует RFC 1459 на полезном уровне и связывает логику вашей программы с вашей сетью.Рассмотрите возможность использования сетевой библиотеки (например, Twisted . twisted.words имеет отличную реализацию протокола IRC) или написания кода, эквивалентного единице.(Подсказка: первое легче и быстрее и менее подвержено ошибкам.)

0 голосов
/ 06 января 2013

клиент Python Twisted IRC

Установка

sudo yum install python-twisted-words

или

sudo apt-get install python-twisted-words

Документация по API

http://twistedmatrix.com/documents/8.2.0/api/twisted.words.protocols.irc.IRCClient.html

Пример

#!/usr/bin/env python2.7

from twisted.internet import reactor, protocol
from twisted.words.protocols import irc

class IRCLogger(irc.IRCClient):
    logfile = file('/tmp/freenode.txt', 'a+')

    nick = 'davey_jones_logger'

    def signedOn(self):
        self.join('#scala')

    def privmsg(self, user, channel, message):
        print "Got msg %s " % message
        self.logfile.write(" %s said %s \n" % ( user.split('!')[0], message ))
        self.logfile.flush()

def main():
    f = protocol.ReconnectingClientFactory()
    f.protocol = IRCLogger
    reactor.connectTCP('irc.freenode.net', 6667, f)
    reactor.run()

if __name__ == '__main__':
    main()
0 голосов
/ 19 февраля 2010

Конкретный канал, к которому вы пытаетесь подключиться, требует, чтобы вы были зарегистрированы в nickserv для этого сервера. Попробуйте зайти на сервер с обычным IRC-клиентом и создать канал самостоятельно, и попросите бота присоединиться к нему.

...