IRC бот: MOTD не приходит, хотя я сделал USER и NICK - PullRequest
1 голос
/ 07 января 2012

Я делаю IRC-бот на python для вызова хакциссита (программа 8).Вот выдержка из кода подключения:

def ping():
    ircsock.send("PONG :Pong\n")
ircsock.connect((server,6667))
ircsock.send("USER "+botnick+" "+server+" "+botnick+" :"+version+"\n")
ircsock.send("NICK "+botnick+"\n")
while(connect):
    ircmsg = ircsock.recv(2048)
    ircmsg = ircmsg.strip('\n\r')
    print(ircmsg)
    if(ircmsg.find("PING :") != -1):
        ping()

Я не думаю, что с этим что-то не так.Все переменные определены и имеют значение, этот код работает без проблем на некоторых серверах (например, freenode).Но на других серверах (foonetic, hackthissite) я получаю следующий вывод:

:hub.irc.hackthissite.org NOTICE AUTH :*** Looking up your hostname...
:hub.irc.hackthissite.org NOTICE AUTH :*** Found your hostname
PING :3C8E9173
:3C8E9173!nospoof@hub.irc.hackthissite.org PRIVMSG Tadbot :VERSION

Я не уверен, что с этим делать.Я попытался отправить обратно версию своего бота на имя пользователя между ":" и "!", Что (как и ожидалось) ничего не сделало.На серверах, где это происходит, я никогда не получаю свой MOTD, поэтому я получаю сообщение об ошибке «Вы не зарегистрированы», когда я пытаюсь что-либо сделать.

Google дал некоторые результаты людей, объясняющих подобные проблемы, но это всегдабудь то, что они забыли прислать своего ПОЛЬЗОВАТЕЛЯ и НИК, так что я действительно в недоумении, что делать здесь.

Ответы [ 2 ]

1 голос
/ 31 января 2012

В дополнение к Правильный ответ , сообщение VERSION является сообщением CTCP. На это указывает полезная нагрузка PRIVMSG, окруженная непечатаемыми символами ASCII \001 (CTRL-A); это на самом деле \001VERSION\001.

Чтобы ответить на него, вам необходимо отправить PRIVMSG обратно к исходному нику, также отформатированному как сообщение CTCP: например. \001VERSION Nyubis Python Bot\001.

1 голос
/ 07 января 2012

Вы должны отправить PONG ответ серверу PING, в противном случае сервер будет считать, что соединение разорвано.

Правильный ответ в приведенном вами примере будет

PONG :3C8E9173

3C8E9173 - та же строка, что и запрошенный сервером.

...