Участник:Robot Werther/Программное обеспечение

В разное время для Robot Werther используется различное программное обеспечение. Основным ПО бота является Pywikibot, но параллельно с ним используются и иные программы.

Pywikibot

Основная статья: mw:Manual:Pywikibot

Основное программное обеспечение бота, работающее на языке программирования Python. Представляет собой полноценную систему бота с возможностью написания собственных программ на её основе. В ходе работы неоднократно использовались сценарии, написанные вручную; в частности, с их помощью были залиты модули для обновлённой системы спрайтов. Исторически является первым ПО, используемым для Robot Werther; эксплуатируется с 2014 года.

Werther

Проект вручную созданного робота общего назначения, разрабатывается с 2016 года. Концепция менялась неоднократно. Идейным образцом является проект самодельного бота участника AttemptToCallNil. С середины 2017 года проект носит имя персонажа советского фильма «Гостья из будущего» робота Вертера (много позднее была переименована и учётная запись).

Самый ранний проект бота (известного под аббревиатурой GROWEB, которая расшифровывается как Grand, Radical and Operative Wiki Editing Bot) предполагал создание монолитной платформы бота на языке C с использованием ряда сторонних библиотек, прежде всего libcurl (для интернет-соединений), libjson-c (для обработки JSON) и libpcre (для работы с Perl-совместимыми регулярными выражениями). На первом этапе предполагалось создание механизмов взаимодействия с вики, реализации связанных с ними данных, а также интерфейса и лаунчера бота; на втором — поддержка сценариев; на третьем — поддержка расширений.

Позднее был предложен другой подход: вместо большой и громоздкой программы использовать более простые программы («провайдеры») для обращения с вики-проектами, которые принимают посредством межпроцессного взаимодействия запросы на те или иные действия от других программ («абонентов»). Предполагается, что за счёт этого получится реализовать сценарии на основе языка «командной строки», просто вызывая те или иные команды, реализованные в виде отдельных программ; возможность перенаправления ввода/вывода позволила бы легко обрабатывать содержимое статей с помощью других приложений. Важной особенностью данной реализации является полный низкоуровневый доступ «абонентов» к API вики-проекта посредством «провайдера». Сам «провайдер» предоставляет лишь ограниченный набор высокоуровневых операций — как правило, самых важных: чтение и редактирование страницы (и её разделов), составление списков страниц, а также, возможно, их переименование и удаление (при необходимости данный набор может быть расширен). Такие сложные задачи, как обработка интервики или замена текста с помощью регулярных выражений, предполагается реализовывать с помощью сценариев. На данный момент вместо C предполагается использовать язык Rust.

Перспективы проекта пока неясны. С одной стороны, успешная разработка Werther позволила бы подтвердить, расширить и реализовать навыки оператора как программиста. С другой стороны, возможностей имеющегося в распоряжении ПО (в первую очередь Pywikibot и AWB) на данный момент достаточно для работы. Кроме того, не стоит забывать и об ещё одной проблеме — банальной лени.

Попутные программы в рамках проекта Werther

Поскольку разработка принципиально новой платформы бота (да ещё и на компилирующем языке) оценивалась как крайне сложное занятие, предполагалось её вести поэтапно, с созданием попутных программ для отладки тех или иных возможностей будущей платформы.

Первым этапом является экспериментальный робот FD2642OBR5 (или просто OBR5; название представляет собой случайную последовательность заглавных букв и цифр), единственной функцией которого является сохранение страницы с текстом, жёстко вшитым в исходный код программы. Первое испытание было совершено 3 июля 2016 года на русскоязычном разделе Справочной Gamepedia. Однако на протяжении около года проект не получил развития. Через год было создано несколько вариантов бота 0BR5, как правило отличающихся содержимым записываемого текста и описанием (так, один из вариантов позволял очищать песочницу по команде). Впоследствии удалось вместо перезаписи страницы добавлять текст в её конец.

Самым радикальным изменением FD2642OBR5 стало добавление возможности блокирования участников с фиксированными параметрами по вводу (в то время оператор вместе с ботом имел статус администратора). Так в конце 2017 года появилась программа, известная как «Прометей». В то время вики-проект переживал волну массового вандализма с использованием как учётных записей, так и IP-адресов открытых прокси-серверов. И тех, и других прозвали «репликаторами» в честь механических существ из «Звёздных врат», а программу для борьбы с ними — в честь первого боевого корабля землян из того же сериала, который в свою очередь был назван именем персонажа древнегреческой мифологии. Первоначально он поддерживал только один режим блокировки, и для смены параметров необходимо было перекомпилировать всю программу, но с добавлением поддержки опций командной строки стало возможно выбирать два режима: блокировку обычных адресов или подсетей (на две недели, позднее на один месяц) или блокировку прокси (на один год). С помощью «Прометея», используя механизм перенаправления ввода/вывода командной оболочки, можно было бы реализовать массовую блокировку адресов открытых прокси-серверов по списку из файла, однако в таком режиме бот не использовался. Хотя проект получил название «Прометей», его файлы были созданы под названием DakaraProject — подробнее см. здесь.

Все программы семейства OBR5 были написаны на C с использованием библиотек libcurl и libjson-c, соответствуя изначальному варианту проекта Werther.

Следующим этапом является отделение ввода от основной программы, своего рода эксперимент по межпроцессному взаимодействию. На практике он был реализован в изначальной версии программы «Дедал».

После отказа от C было создано несколько тестовых программ на Rust, тестирующих различные аспекты его возможного применения для бота (HTTP-соединения, многопоточность, межпроцессное взаимодействие). А 22 июля тестовый бот, написанный на Rust и известный под названием Inlicense Legion, впервые проставил шаблон {{Лицензия}} на более чем четырёх тысячах файлов, не помеченных шаблоном лицензии. До этого около 14 тысяч файлов были обработаны ботом участника MakandIv, работающем на базе pywikibot. То, что pywikibot делал несколько часов, было выполнено Inlicense Legion всего за несколько десятков минут. Высокая скорость работы Inlicense Legion достигалась прежде всего за счёт высокой параллелизации действий — на каждые 500 файлов программа запускала по одному подботу (то есть восемь на четыре тысячи), а последние файлы обрабатывала сама. Впервые параллельная схема работы была опробована в проекте CarpetBomber (см. Другое).

Дедал

«Дедал» — специализированная программа для оперативной блокировки массовых злоумышленников, таких как IP-адреса, подсети или аккаунты-виртуалы, а также для блокировки открытых прокси-серверов в соответствии с пунктом 7 правил об учётных записях. Является заменой «Прометею» и его более функциональным аналогом, что отражено в наименовании: в «Звёздных вратах» «Дедал» — боевой корабль, превосходящий «Прометей» по боевым возможностям (назван в честь легендарного мастера из греческой мифологии). Предназначена для использования с учётными записями ботов-администраторов.

Первая версия «Дедала» написана на C с использованием тех же библиотек, что и «Прометей», но у неё есть несколько существенных отличий.

  1. Возможность настройки параметров блокировки во время работы. Отсюда также вытекает поддержка команд («Прометей» позволяет вводить только цели блокировки, а режим — их было всего два — выбирался с помощью параметров запуска).
  2. Модулизация. Было создано три файла с кодом, один отвечает за интерфейс (высокий уровень), другой за непосредственную работу с вики-проектом (низкий уровень), третий является заголовочным файлом, указывающим общие определения для остальных двух. Если в «Прометее» вся логика была записана в одной-единственной функции main, то в «Дедале» за отдельные аспекты работы отвечают отдельные функции. Впрочем, для «Дедала» это мало отражается на процессе сборки, так как при изменении любого файла должна была быть перекомпилирована вся программа.
  3. Отделение ввода от программы через FIFO-канал, на который и посылаются команды. С одной стороны, это позволяет создать примитивное подобие сценариев (например, для настройки параметров под определённый режим, или блокировки по списку — сам «Дедал» поддерживал только блокировку одной цели за раз). Но с другой стороны, это позволяет запускать только один экземпляр «Дедала», в отличие от «Прометея», так как название канала было строго фиксированным.

Предполагалась разработка графической версии «Дедала» на основе GTK+ (при сохранении языка программирования), при этом библиотеки связи и разбора JSON предполагалось заменить на аналогичные из набора GNU. Но была создана только разметка основного окна.

Впоследствии «Дедал» была переписан на языке Python (для HTTP-запросов используется пакет Requests), выйдя за рамки проекта универсальной платформы бота. На настоящий момент программа не используется, так как бот больше не обладает статусом администратора, а потребности в подобного рода инструментах пока нет.

Другое

Используемые
Бывшие в использовании
Нереализованные
В данной статье используются материалы из статьи «Участник:Robot Werther/Программное обеспечение» с вики-сайта Minecraft Wiki, расположенного на Фэндоме, и они распространяются согласно лицензии Creative Commons Attribution-NonCommercial-ShareAlike 3.0. Авторы статьи.