Я нуждаюсь в помощи, пишущий основного бота IRC, который просто соединяется с каналом.. может кто-либо для объяснения меня это? Мне удалось заставить это соединяться с сервером IRC, но я не могу присоединиться к каналу и войти в систему. Код, который я имею к настоящему времени:
import sockethost = 'irc.freenode.org'
port = 6667
join_sock = socket.socket()
join_sock.connect((host, port))
<code here>
Любая справка значительно ценилась бы.
Вероятно, проще всего было бы взять за основу реализацию протокола IRC от twisted. Посмотрите на : http://github.com/brosner/bosnobot для вдохновения.
Чтобы подключиться к IRC-каналу, необходимо отправить определенные команды, специфичные для протокола IRC, на IRC-сервер, прежде чем вы сможете это сделать.
При подключении к серверу необходимо подождать, пока сервер отправит все данные (MOTD и whatnot), затем отправить команду PASS.
PASS <some_secret_password>
Далее следует команда NICK.
NICK <username>
Затем необходимо отправить команду USER.
USER <username> <hostname> <servername> :<realname>
Оба являются обязательными.
Тогда вы, скорее всего, увидите сообщение PING с сервера, вы должны отвечать серверу командой PONG каждый раз, когда сервер отправляет вам сообщение PING. Сервер также может запрашивать PONG между командами NICK и USER.
PING :12345678
Ответьте с тем же текстом после «PING» с помощью команды PONG:
PONG :12345678
То, что после PING, уникально для каждого сервера, поэтому убедитесь, что вы отвечаете значением, которое сервер отправил вам.
Теперь вы можете присоединиться к каналу с помощью команды JOIN:
JOIN <#channel>
Теперь вы можете отправлять сообщения каналам и пользователям с помощью команды PRIVMSG:
PRIVMSG <#channel>|<nick> :<message>
Выйдите из сети
QUIT :<optional_quit_msg>
Экспериментируйте с Telnet! Начните с
telnet irc.example.com 6667
Дополнительные команды и параметры см. в IRC RFC.
Надеюсь, это поможет!
Это откроет сокет, но вам также нужно сообщить IRCd, кто вы. Я делал нечто подобное в perl давным-давно, и нашел IRC RFCs очень полезными.
Основной RFC: http://irchelp.org/irchelp/rfc/rfc.html
Другие RFC: http://irchelp.org/irchelp/rfc/index.html