asdcbot. Бот для DC++ хаба. Этап 1. Проба пера

Хочется отписаться о первых успехах в реализации идеи разработки DC++ бота.

Задачами первого этапа я выделил:

  • Изучить (хотя бы в общих чертах) протокол NMDC (по которому работают большинство современных хабов)
  • Изучить и смоделировать процесс входа на хаб, получения общей информации о хабе и о его пользователях
  • Попробовать выполнить несколько команд и изучить результат их выполнения

На русскоязычной страничке документации (http://mydc.ru/topic915.html) все хорошо расписано, но на всякий случай поясню вкратце.

О структуре команд в документации все ясно написано: $КОМАНДА|. Экранирование символов не поддерживается, поэтому для отправки символов $ и | следует использовать их коды ($ и | соответственно).

Теперь непосредственно об общении с хабом. Здесь реализована такая схема: соединяемся с хабом. хаб отвечает командой $Lock, сообщая клиенту свой идентефикатор. В ответ на это клиент рассчитывает с помощью специальной функции ключ, который подтверждает то, что пытается подключиться оригинальный клиент (странное решение, если учесть, что эта функция располагается в свободном доступе на разных языках программирования) и отправляет его хабу командой $Key. Вместе с тем, клиент должен отправить команду проверки на доступность предполагаемого ника (нет ли в сети пользователя с таким ником) - $ValidateNick. В случаи успеха хаб приветствует нового пользователя командой $Hello, а пользователь в ответ на это обязан сообщить информацию о себе и о используемой версии протокола (команды $Version и $MyINFO). После представления хаб начинает бесконечно сыпать в сокет события, которые инициируют другие пользователи (подключение и отключение пользователей, поисковые запросы, etc.) Пример “рукопожатия” расписан на странице документации (http://mydc.ru/topic915.html - в самом низу первого сообщения).

При реализации тестового подключения особых граблей не возникло, реализовано было на php в течение получаса. Если у читателей этой статьи возникнут вопросы по реализации - пишите в комментариях, с радостью отвечу :)


  • Теги:
  • dc