# 3HAuKA

## Подробная документация

### The Faerion Team

Abstract

3HAuKA – популярное средство организации викторины в среде IRC. Цель игры – набрать наибольшее количество очков, быстрее и точнее отвечая на задаваемые ботом вопросы. Незнайка написан на TCL и является расширением бота eggdrop, благодаря чему возможно использование практически на любой современной операционной системе.

## Chapter 1. Установка

Для использования скрипта необходима рабочая версия бота eggdrop, версию которого для Windows можно скачать здесь, для POSIX платформ – здесь. Вопросы установки и настройки eggdrop выходят за рамки этой документацию, однако неплохое описание на русском языке можно найти на сайте Eggdrop RDP. После успешной установки бота следует скачать последнюю версию самого Незнайки, отсюда, распаковать его и перенести файлы `3hauka.tcl` и `3hauka.txt` в подкаталог `scripts` каталога с установленым eggdrop. Файл `3hauka.txt` содержит демонстрационную базу вопросов.

## Chapter 2. Описание команд

Данный раздел описывает поддерживаемые скриптом команды и тонкости их использования.

## 2.1. !append

    !append откуда куда

Передаёт очки одного пользователя другому. Информация об исходном пользователе при этом теряется. Команда доступна глобальным операторам (+o).

## 2.2. !dump

    !dump текст...

Отправляет следующий за командой текст на сервер, как команду протокола IRC. Команда доступна глобальным мастерам (+m).

## 2.3. !email

    !email адрес

Изменение почтового адреса пользователя. Почтовый адрес используется в административных целых. Команда меняет настройки использующего её пользователя.

## 2.4. !forget

    !forget ник

Удаление всей информации о пользователе. Следует использовать с осторожностью, отмена данной операции невозможна. Команда доступна операторам канала (|+o).

## 2.5. !help

    !help ?команда?

Выдаёт подсказку об использовании бота. Подсказка состоит из нескольких строк текста, получаемых пользователем как NOTICE.

## 2.6. !hint

    !hint

Запрос подсказки. Подсказка выдаётся через 5 секунд и открывает первую букву слова. Каждые последующие 20 секунд выдаётся дополнительная подсказка, содержащая одну дополнительную букву. Каждая открытая буква снижает стоимость вопроса на одно очко. Начальная стоимость вопроса – три очка.

## 2.7. !jump

    !jump ?сервер? ?порт?

Смена сервера. В качестве параметров можно указать адрес сервера, к которому хочется подключить бота, а также номер порта. При отсутствии параметров используется случайный сервер из конфигурационного файла. Команда доступна глобальным мастерам (+m).

## 2.8. !kick

    !kick ник ?причина?

Удаление пользователя с канала без необходимости использования статуса оператора (в терминологии IRC). Команда доступна операторам канала (|+o).

## 2.9. !list

    !list

Получение полного списка зарегистрированных пользователей, в порядке убывания очков. Команда доступна операторам канала (|+o).

## 2.10. !memo

    !memo текст

Изменяет комментарий пользователя. Комментарий отображается в таблице рекордов а также при входе пользователя на канал. Команда меняет настройки использующего её пользователя.

## 2.11. !next

    !next
    !дальше

Пропуск текущего вопроса. Команда доступна операторам канала (|+o).

## 2.12. !op

    !op

Просьба выдать статус оператора. Доступна операторам канала (|+o).

## 2.13. !raw

    !raw ник

Получение всей информации о пользователе во внутреннем формате бота. Используется для отладочных целей. Команда доступна операторам канала (|+o).

## 2.14. !rename

    !rename текущий_ник новый_ник

Изменение имени пользователя в базе данных бота. Команда доступна глобальным операторам (+o).

## 2.15. !restart

Полный перезапуск бота. Команда доступна глобальным владельцам (+n).

## 2.16. !set

    !set ник параметр ?значение?

Изменяет значение указанного параметра. Список уже существующих параметров и их значений может быть получен командой !raw. Если значение не указано, параметр удаляется. Команда доступна операторам канала (|+o).

## 2.17. !stat

    !stat
    !стат

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

## 2.18. !start

    !start ?режим?

Запуск раунда викторины на текущем канале. На данный момент возможны два режима игры: обычный и блиц. В обычном режиме на вопрос даётся минута и возможно получение трёх подсказок. В режиме "блиц" на вопрос даётся 15 секунд и подсказки недоступны.

## 2.19. !stop

    !stop
    !стоп

Останов текущего раунда. Команда доступна операторам канала и пользователю, запустившему раунд.

## 2.20. !top

    !top ?количество?

Запрос информации о лидерах игры. Количество может варьировать в пределах от 5 до 10. При запущенном раунде викторины выдаётся только сокращённый, однострочный список из первых пяти игроков.

## 2.21. !topic

    !topic текст

Смена темы канала. Команда доступна операторам канала (|+o).

## 2.22. !version

    !version

Выводит номер версии скрипта `3hauka.tcl`, версии бота и версии используемого интерпретатора TCL. Команда доступна всем.

## 2.23. !won

    !won ?ник?
    !вон ?ник?

Вывод информации о достижениях конкретного пользователя. В случае отсутствия параметра `ник` выводит информацию о пользователе, её запросившем.

## 2.24. .hint

    .hint

Консольная команда вывода ответа на текущий вопрос. В случае проведения блиц-турнира команда не работает. Доступна глобальным мастерам.

## 2.25. .score

    .score команда файл

Консольная команда для переноса данных в другие системы. Допустимые значения параметра `команда`: export, import. Команда доступна глобальным мастерам.

## 2.26. .won

    .won nick

Вывод информации о пользователе. Консольная команда, доступна глобальным мастерам.

## Appendix C. Список изменений в версиях

Версия 1.10 от 2004/04/14
  - Настройка каналов вынесена в отдельный файл – `3hauka.conf` (пример прилагается).
  - Добавлено свойство канала no-skip, отключающее возможность пропуска вопросов (против любителей злоупотреблять).
  - Добавлена возможность исключения пользователя из рейтинга (!set username halt 1).
Версия 1.9 от 2003/06/05:
  - Ориентироваться в версиях стало невозможно, переносимся в CVS;
  - Пользователи со статическими адресами теперь определяются с помощью специальной опции конфигурации – static_hosts, вместо использования записи с глобальным флагом +c (common). Предыдущий вариант отказывался работать в некоторых конфигурациях;
Версия 1.5.9.1
  - Исправлена ошибка в обработке команды !email;
Версия 1.5.9
  - Наконец исправлена старая ошибка с ошибочной выдачей пользователям глобальных флагов;
Версия 1.5.8
  - Отображение правильных ответов теперь снова возможно, но отключено по умолчанию – см. опцию conf(showansw);
  - Появилась возможность автоматического сохранения таблицы рекордов в файл, каждую минуту – см. опцию conf(scoreboard);
Версия 1.5.7
  - Исправлена ошибка с сортировкой пользователей, у которых более 32768 очков;
  - Бот теперь не реагирует на команды пользователей на каналах, не описанных в конфигурации – conf(channels);
  - Добавлена возможность управления временем активности бота – параметр conf(timelimit) может содержать список часовых интервалов;
  - Добавлена возможность запрашивать информацию о пользователе по занимаемой позиции – !вон место;
  - Теперь каждый неправильный ответ после выдачи подсказки отнимает у пользователя одно очко, без какого-либо оповещения;
Версия 1.5.6
  - Исправлена ошибка при использовании команд !op и !kick в привате;
  - Исправлена ошибка, связанная с процедурами filter/tolower;
  - Добавлен скрипт fixbase.tcl;
Версия 1.5.5
  - Процедура filter вынесена из обработчика сообщений для повышения производительности;
  - Теперь если пользователь попадает под одну из записей со флагом +c (common), для него создаётся отдельная запись со статическим хостом, а не с динамическим. Очень полезно, например, при большом количестве игроков с "похожими" хостами (общежития, колледжи) – добавляется запись с маской, описывающей все хосты, и на этом проблема решается.
  - Добавлена команда .won в режиме прямого соединения с ботом;
Версия 1.5.4
  - Пользователь добавляется в юзерлист также по команде !start;
  - [users check ...] теперь возвращает хэндл пользователя, будь то старый или новый;
  - Исправлен глюк с неработающей командой !set;
  - Фикс для клиентов, не следующих стандартам: пробел между цветом и количеством очков;
Версия 1.5.3
  - Команды приватом теперь также необходимо слать с префиксом ! (слишком много одинаковых "родных" команд);
  - Изменена процедура проверки пользователей на "новизну";
  - Для получения плюса при входе на канал теперь нужно ответить как минимум на 100 вопросов, не достаточно находиться в пятёрке;
  - Исправлена ошибка, из-за которой не выводилось приветствие при входе игрока из пятёрки в канал;
  - Исправлена ошибка в комманде !append (исходный пользователь не удалялся);
Версия 1.5.2
  - Информация о занимаемом месте для пользователя, не отображаемого в таблице рекордов (в виду длительного отсутствия), теперь не выводится по команде !won;
  - Добавлена информация о количестве зарегистрированных пользователей в команду !stat;
  - При добавлении нового пользователя, он получает (приватом) сообщение с просьбой установить пароль на использование специфических команд применительно к себе, и адрес для ознакомления со списком этих команд. Пользователям без пароля, зашедшим на канал, так же выдаётся ненавязчивая просьба завести таки себе пароль (остаётся под вопросом способ восстановления потеряных паролей);
  - Информация о пользователях теперь хранится в основном юзер-листе, в связи с чем длина примечания теперь ограничена двумя сотнями символов, а имена пользователей более не приводятся к нижнему регистру и из них не вырезаются нестандартные символы, так же несколько сократились затраты ресурсов на преобразование;
  - Введена команда .score для импорта/экспорта информации опользователях (доступна только глобальным мастерам по телнету / dcc);
  - Подавлены встроенная в eggdrop реакция на команду help;
  - Добавлен пункт настройки – адрес страницы с описанием команд;
  - Убрана команда !flush (её теперешний аналог – !rehash);
  - Несостоявшийся "расширенный" лог a-la apache удалён к такой-то матери (пользы – ноль, расходов много);
  - Изменена обработка команды !won – теперь информация об отсутствующих игроках выдаётся только нотисами, не в канал;
  - Удалена поддержка линкованых пользователей (игры за другого игрока);
  - Исправлен баг с некорректной обработкой кавычек в параметрах !команд;
  - Исправлены многочисленные ошибки в операторских !командах, в том числе и нераспознавание операторов как таковых;
  - Очищен код, удалены неиспользуемые фрагменты;
Версия 1.5.1
  - Изменена выдача справки – команда help теперь показывает только уникальные команды, а список алиасов доступен по !help cmd...
  - Иистема разбивки длинных сообщений на несколько частей (например, для команды !list);
  - Пресечение отрицательного времени ответа (для любителей побаловаться с !set);
  - Правильный ответ теперь ботом не повторяется, для предотвращения создания скриптов для "выкачивания" правильных ответов;
Версия 1.5.0
  - Изменена процедура обработки команд пользователей, теперь бот реагирует на команды в приват, без префикса !. процедура отправки ответов, впрочем, требует доработки – они могут слаться как notice, что не всегда является лучшим вариантом;
  - Игра теперь не останавливается после команды !rehash;
  - Команда !help теперь выводит список поддерживаемых команд, а подсказка по самим командам выводится отдельно (!команда без параметров);
  - Участники пятёрки лучших теперь не могут останавливать игру, если канал находится в +bitch моде;
  - Существенно увеличена степень случайности вопросов;
  - При остановке игры выдаётся информация о количестве прозвучавших вопросов, количестве правильных ответов, и длительности игры;
  - При джойне пользователи получают информацию о длительности текущего раунда и текущий вопрос, если он уже был задан;
  - Ответ на команду !топ во время идущего раунда теперь выдаётся в виде одной строки, не вызывая задержек в реакции бота;
  - Добавлена команда !append user1 user2 – добавляет данные о первомпользователе ко второму (всё лучшее), удаляя первого из базы;
  - Теперь ведётся полный лог общения с ботом, выдаваемый также в partyline при наличии console +1 – conf(fnlog);
  - Пользователи, ответившие на 5 ответов, автоматически добавляются вюзерлист;
  - Добавлена (но пока скрыта от пользователей) функция "командной" игры (засчитывание ответов одного пользователя на имя другого), целесообразность сомнительна;
  - Добавлена выдача информации о версии tcl;
  - Сортировка пользователей с одинаковым количеством очков теперь ведётся в порядке возрастания количества ответов;
Версия 1.4.1
  - Грамматические исправления;
  - Теперь при джойне выдаётся информация о текущем вопросе;
  - Информация об уже заданных вопросах теперь обновляется не с каждым раундом, а только при загрузке бота или команде !rehash;
Версия 1.4.0
  - Исправлена ошибка, пропускавшая первый вопрос;
  - Теперь войс выдаётся только при достижении сотни очков;
  - Приветствие выдаётся только если для канала установлено +greet;
  - Бот сообщает о запуске викторины на все -secret каналы, на которых он находится;
Версия 1.3.0
  - Выдача +v пользователям в момент попадания в пятёрку лучших, а не только в момент захода на канал;
  - !Топ теперь понимает число от 5 до 10 в качестве параметра;
  - На порядок ускорена сортировка пользователей (происходит при джойнах и !топ), при большом количестве пользователей сильно тормозило;
Версия 1.2.0
  - Выдача +v и приветствие при входе только для лучших пяти игроков;
  - Дополнительная подсказка теперь выдаётся через 15 секунд после обычной, а не по команде !!хинт, при этом количество подсказок ограничено только временем, выделенным на вопрос;
  - Исправлена ошибка с таймерами для подсказок;
  - Исправлена ошибка с выводом разных подсказок при нескольких вариантах ответа;
  - Теперь помимо правильных ответов ведётся подсчёт очков;
Версия 1.1.0
  - Удаление "устаревших" пользователей теперь происходит не при сохранении таблицы (каждые 10 минут), а при загрузке (по команде !start или !load);
  - !хинт теперь не будет показываться, если ответ состоит из двух или менее букв (!!хинт – четырёх, соответственно);
  - Добавлены команды !memo, !set
  - Несколько исправлено отслеживание холостого хода: теперь на него влияют только правильные ответы и любые !команды (s7ream);
  - Добавлена команда !rehash, доступна только глобальным мастерам;