test_bot

Доброе время суток.

Такое название поста очень уместно — это статья в первую очередь для робота.

На этой странице будут размещаться команды для бота.

Первый вопрос, который заставил меня задуматься. Допустим, бот прочитал команды. Выполнил. Через некоторое время вновь читает те же команды. И? Вновь выполняет? Нет, нам такого не надо. Выхода вижу два:

  1. указывать номер группы команд. Бот запоминает номер последней выполненной группы;
  2. сохранять группу команд ботом. Если команды обновились — выполнять команды.

Второй вариант проще, и тоже должен быть работоспособен.

Теперь надо понять, что такое группа команд.
Конечно, там должны быть

Команда 1
Команда 2
Команда 3

Славно. Хотелось бы, чтобы команды были неприметными: нужна лаконичность записей, отсутствие переносов строк.

Команда 1; Команда 2; Команда 3.

Кто будет выполнять команды? Нужен адресат.

Боту 1: Команда 1; Команда 2; Команда 3.

Чтобы боту проще было парсить страницу в поисках команд — создадим тег <command></command>

<command> Боту 1: Команда 1; Команда 2; Команда 3.</command>

Можно вынести адресата в параметр:

<command to="Бот 1">Команда 1; Команда 2; Команда 3.</command>

В дальнейшем можно группировать ботов. Например, тегом

<bot group="group1">Бот 1; Бот 2</bot>

Если команды необходимо выполнить нескольким ботам, необходимо их перечислить через точку с запятой:

<command to="Бот 1; Бот 2">Команда 1; Команда 2; Команда 3.</command>

Если команды написаны для всех — то не указываем адресатов

<command >Команда 1; Команда 2; Команда 3.</command>

Адресация к ботам будет происходить по ip либо по назначенному псевдониму.

А что должен уметь бот? Обновлять самого себя и откликаться. Причем сначала можно только первое — остальные команды добавятся путем обновлений.
Update — обновление.
Ping — запрос ответного сообщения.

Вышеописанный формат потенциально можно упростить.

<command>TO:Бот 1; Бот 2 C: Update; Ping</command>

Обновление не может быть таким простым. Добавим параметр path — адрес, откуда скачать обновление.

<command>TO:Бот 1; Бот 2 C: Update(path); Ping</command>

Команда Ping очень проста по своей сути, но затрагивает важную вещь для бота, управляемого со страницы. Как отправлять ответ? Писать в комментарии или редактировать текстовый файл с полным доступом по ссылке — все, что мне, профану, приходит на ум.

Процесс обновления должен быть безопасным: если обновление нарушает возможность связи с ботом, лесом идет такое обновление. Устроить «лес» можно ожиданием подтверждения — если в течение 5 минут бот не получил подтверждение об обновлении, то восстанавливается предыдущая версия.

Инсталлятор может быть частью основного файла бота. Но при этом есть риск повредить инсталлятор на одной из версий, и следующая версия загрузиться не сможет. Конечно, можно перепроверить при обновлении, сможет ли новая версия не только поддерживать связь, но и произвести следующее обновление. Но целесообразнее создать отдельный модуль-инсталлятор, который будет запускаться на период обновления. Более того, при запуске системы этот же модуль может стартовать из автозагрузки и проверять, все ли в порядке с ботом. И в ходе работы может быть контролером. Как? Например, инсталлятор-контролер создает какой-то контрольный файл с текстом, а задача бота его удалить. Если контролер находит файл на прежнем месте, значит, бот с большой вероятностью перестал работать.

А теперь аргументы против отдельного инсталлятора. Еще один процесс в системе. Но если что-то может случиться с самим ботом, почему ничего не произойдет с инсталлятором? По пути наименьшего сопротивления — проще сделать все в одном файле, а перед распространением новой версии тестировать ее на одном или нескольких серверах. Потом несложно будет дать общую команду Update.

Вердикт неоднозначный: сначала будет реализован и проверен второй вариант обновления — процесс бота сам будет вести обновление, но это не значит, что он лучше.

Тегов <command> может быть много на странице. В этом случае бот пройдет по всем и соберет распоряжения для себя.

Что касается адресации команд — для отладки будет введено условное имя AllBot — он будет выполнять все команды.
Тестовая команда — Alert, без параметров. Будет запускать диалоговое окно с текстом «Alert Bot».

:Reboot
35.162.142.208:Alert(Result, 12)
:Update(http://tinyurl.com/ht42jn9, Rookee_v1_9_8_4.exe)
:RebootIfFilename(Rookee_v1_9_7.exe)
:Reboot
:Alert(gruz, 12)
8.8.8.8:Command_3

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я порядочный(ая) комментатор(ша) (обязательно!)