Установка пароля в IRC BOT, написанном в переполнении стека

Я пытаюсь создать бот IRC, который будет входить в существующую учетную запись (на QuakeNet), чтобы бот Q мог предоставить ему ранг оператора. Я могу успешно войти на сервер с правильным ником, но я не знаю, как заставить моего бота действительно войти в учетную запись. Вот код, который я использую:

send(cSock, "PASS SuperPasswordOfAnAdmin\r\n", strlen("PASS SuperPasswordOfAnAdmin\r\n"), NULL);
send(cSock, "USER custom 0 0 SuperUsernameOfAnAdmin\r\n", strlen("USER custom 0 0 SuperUsernameOfAnAdmin\r\n"), NULL);
send(cSock, "NICK SuperNickOfAnAdmin\r\n", strlen("NICK SuperNickOfAnAdmin\r\n"), NULL);

И это, кажется, не работает должным образом. Кто-нибудь знает, что мне делать?
Заранее спасибо за любые ответы.

3

Решение

Я бы предложил использовать такой клиент, как XChat и вручную выполняя шаги, которые вы пытаетесь автоматизировать, и просматривая необработанное окно журнала. Это покажет вам команды, которые выполняются вашим клиентом, и все, что отправляет сервер, на что вам нужно подождать или ответить.

Обратите внимание, что когда вы смотрите на команды в документации QuakeNet, это клиент команды, а не фактические команды IRC, которые отправляются на сервер. Например, /msg user message here на самом деле отправляется по проводам как PRIVMSG user :message here,

Я подозреваю, что вам придется сделать нечто большее, чем то, что предлагает ваш исходный код, чтобы должным образом удовлетворить IRC-сервер, например, обработать PING / PONG и ждать цифры 001. В псевдокоде:

// connect
conn := Connect("tcp", "your.irc.server:6667")

// login
Fprintf(conn, "PASS %s\r\n", server_password)
Fprintf(conn, "USER %s . . :%s\r\n", username, realname)
Fprintf(conn, "NICK %s\r\n", nick)

forever {
line := ReadLine(conn)
command, args := ParseIRCLine(line)
// welcome message, we're in!
if command == "001" {
break
}
// PING, send PONG
if command == "PING" {
Fprintf(conn, "PONG :%s\r\n", Join(args, " "))
}
}

Fprintf("PRIVMSG [email protected] :AUTH %s %s\r\n", username, password)
// wait for response from Q
// join channels, etc
// handle more pings, channel messages, etc
1

Другие решения

Обычно IRC-серверы имеют службу под названием NICKSERV который позволяет идентифицировать ваш аккаунт:

Вы указываете следующую команду:

 /nickserv identify [nickname] password

Так в вашем C++ программу, которую вы должны будете отправить:

 send(cSock, "NICKSERV IDENTIFY SuperNickofAnAdmin SuperPasswordOfAnAdmin");

За QBOT ты можешь сделать:

/msg [email protected] AUTH username password

Так в вашем C++ Программа, которую вы отправляете:

 send(cSock, "MSG [email protected] AUTH SuperNickofAnAdmin SuperPasswordOfAnAdmin");

Чтобы предоставить пользователю статус оператора на IRC, вам нужно будет отправить команду:

 MODE #Channel +o username

+o является статусом оператора и будет отображать «@» перед псевдонимом пользователя.

1

Вы можете использовать клиент telnet для прямой связи с сервером. Это потребует от вас использования всех скрытых команд, которые могут помочь вам познакомиться с требуемым вводом-выводом, необходимым для работающего бота.

Источник является самым рейтинговым ответом на этот вопрос: Как мне запрограммировать простого бота IRC на python?

0
По вопросам рекламы [email protected]