IRC BOT (питон) - PullRequest
       14

IRC BOT (питон)

2 голосов
/ 09 апреля 2011
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

Ник supaBOT зарегистрирован на сервере, но я не знаю, как идентифицировать сервер, так как код вышене работает.

Ответы [ 2 ]

4 голосов
/ 09 апреля 2011

Как сказал Майк, вы не отправляете данные, которые должны отправлять.Вам нужно добавить пробелы и вам нужно : перед окончательными аргументами команды, если они имеют пробелы.Некоторые строки также отсутствуют '\r\n'.

То есть формат для PRIVMSG: 'PRIVMSG nick :message with spaces\r\n'

PRIVMSG имеет только два аргумента, поэтому вам нужнопоставьте :, чтобы указать, что остальная часть строки - это только одно значение, которое может включать пробелы.

Причина, по которой вы получаете "You have not registered", заключается в том, что вы должны отправлять команды USER и NICKперед любыми другими командами.И если команда NICK завершается неудачно (ник конфликт), вы должны обнаружить ошибку и попробовать другую.После того, как вы отправили действительные команды USER и NICK, некоторые сети IRC также отправляют вам PING, на который вы должны ответить PONG, прежде чем сервер сочтет вас «зарегистрированным».После этого вы можете использовать другие команды.

0 голосов
/ 09 апреля 2011

проверьте ваши строки, 'PRIVMSG ' + 'NICKSERV' + 'IDENTIFY' + 'password' печатает PRIVMSG NICKSERVIDENTIFYpassword, что явно не то, что вы хотите отправить

Ftr, лучше использовать подстановку строк или .format (), потому что их сочетают, что добавляетдополнительные издержки, поскольку каждая буква заставляет python циклически проходить по строке, прежде чем она добавляет букву.то есть: 'PRIVMSG NICKSERV IDENTIFY %s' %(password) или 'PRIVMSG NICKSERV IDENTIFY {0}'.format(password)

также существует уже существующий irclib, если вы хотите его использовать (и supybot существует / существовал и является чистым ботом irc python).

...