K.I.T.T.


20.06.2015

Командир завёл трактор, но передачу поменять забыл, поэтому поехал на восток. К счастью, огненная стена не такая уж и горячая, а саппорт плага как всегда бесполезен, поэтому доступ как сайту (хотя и без ютуба), так и ко всем составляющим бота был быстро налажен, так что никаких проблем возникнуть не должно. Разве что, модуль jquery находится прямо на сайт, а не загружается с гугла, как раньше, и добавление новых и/или сложных функций может занять больше времени. Хотя, нахождение на 5 часов в будущем от Москвы должно всё компенсировать. С праздником драконьей лодки вас!

4.04.2015

Добавлена команда !picture, позволяющая получить случайную картинку из гугла по вашему запросу. Так как денежки злой компании платить не хочется, используется бесплатная версия API, поэтому количество запросов в день, говорят, ограничено некоторым количестом — около 100. В связи с этим делается следующее:
    1. Сервер получает ваш запрос и проверяет, не было ли уже точно такого же ранее. Если был, то загружает из файла предыдущие ссылки.
    2. Отправляется в гугл просьба на получение 3-х страниц результатов (по 4 картинки на каждой). Соответственно, это будут либо страницы 0—2, либо (n+1)—(n+3), если по такому запросу уже было скачано что-то, где n — номер последней загруженной страницы.
    2а. Эти 12 картинок соединяются с уже имеющимися.
    3. Вам высылается случайная картинка из общего списка ссылок.
    4. Новые картинки записываются в файл, вместе с номер последней страницы результатов.
То есть, чтобы получать наиболее разнообразные картинки, нужно не менять текст запроса, а просто продолжать писать одно и то же.

3.04.2015

Запилил небольшой сервачок на питоне, с которым может общаться бот! Теперь бэкапы можно делать с любой периодичностью, а не хранить все данные в localStorage браузера. Но это мелочи.
Так как сервер не имеет никаких CORS ограничений, у бота теперь есть доступ ко всему интернету! Что это значит? Можно получать рандомные картинки по рандомному запросу, можно постить на двачике, можно скачивать порно, загружать его на ютуб, добавлять в плейлист и играть для всей румы — всё зависит от вашей фантазии (ну и моих рук, разумеется).
Так что придумывайте фичи, пишите в !message или треде — постараюсь добавить.

По поводу скробблера: за тегами никто не следит, поэтому треки, содержащие HQ HD 1800p OFFICIALE VIEDOLE и подобное, будут просто игнорироваться. (В перспективе, конечно, запилить автокоррекцию.)

31.03.2015

Следуя словам Наполеона, запилил я скробблер сам, так как то дурацкое расширение перестало работать. Правила те же: трек больше 30 секунд, должно пройти больше половины или 4 минуты, иначе не заскробблится.
Добавлена команда !noscrobble, позволяющая отключить скробблинг текущего трека (если там, скажем, с тегами полная каша). Включить обратно нельзя.
Алсо, плаг наконец-таки починил удаление сообщений.

25.03.2015

Добавлена долгожданная связка с ласт.фм! Теперь можно узнать теги или посмотреть количество проигрываний dvachbot'ом играющего исполнителя. В последнее время скробблер работает херово, то скроббля, то нет, поэтому в скором времени планирую переделать/сделать этот плагин сам.

23.03.2015

По просьбе петровалика было добавлено оповещение об отключении цикла при большой очереди.

21.03.2015

Починена возможная проблема работы сайта при неработающем localStorage (private browsing в сафари на айфоне, например), из-за которой нельзя было передвигаться между закладками.
По многочисленным просьбам добавлена команда !iwanttocycleevenwithdjcycleturnedoff, добавляющая вас в список при выключенном цикле. Имеются ограничения. Возможны неполадки (может получиться так, что событие смены диджея отправится до того, как собственно сменится диджей, и команда с добавлением вас в список будет отправлена тогда, когда вы ещё как бы и не вышли из него, а следовательно ничего не произойдёт) — пишите в багрепорт.
Алсо, если вдруг не заметили, все розовые команды в блоге кликабельны.

19.03.2015

К сожалению, население отреагировало крайне негативно, и всё прошло совсем не так, как хотелось бы. Лично мне в этом всём интересен был лишь детектор мата, правильность его работы и возможность его обойти. Но никто даже особо и не пытался.
Из полезного: в очередной раз обновлена !lastpos, теперь ваше место в очереди не теряется даже после рестарта бота. Если вы ни разу не вылетали и напишете !dc, вам будет сообщено, что последнее записанное ваше место было в 1970-ом году.

18.03.2015 — Четыре Чистых Часа Четверга

Наказатель за мат доделан. Запускается сам каждый четверг в 18 часов (по Брянскому времени) на 4 часа. Если в вашем сообщении было слово из запрещённого списка, получите мут на 1 минуту (сообщение удалено не будет, только если это команда была).
Самостоятельно можно включить (!enable swear) в любое время. В связи с этим была добавлена команда !letusswear, которая отключит наказатель до следующего четверга, так как !disable swear never выключит как его, так и автоматическое включение, а !disable swear — лишь на 2 часа.

16.03.2015

Всё, добавил все возможные описания. Если заметите ошибку/опечатку — обязательно сообщите! А то тут шестьдесят чёртовых шесть тысяч символов.
Алсо, сайт запоминает последнюю открытую вами закладку (blog или bot description) и после перезагрузки страницы откроет именно её.

15.03.2015

Добавлен детектор мата в ваших сообщениях! В планах устраивать несколько часов в неделю, в течение которых за появление мата в сообщении будет выдаваться мут на 1-2 минуты.
Принцип работы детектора: создаётся список запрещённых слов и корней, участвующих в бесконечном количество слов морфологически богатого языка. Далее все буквы каждого из слов изменяются на регулярные выражения, содержащие (почти) все возможные варианты написания этой буквы в слове по-русски, транслитом, или заменяя на внешне похожие буквы из латиницы. Например, буква я оригинального слова будет замечена, если сообщение содержит я, ya, ja, йа или иа. Таким образом происходит нещадная поимка всего, что хоть сколько-то напоминает искомые слова. Очевидно, будет много ошибок. Начиная от слова требушет, закачивая фразой Суп из довольной курицы. Если в сообщении был обнаружен мат, идёт проверка на исключения — т.е. известные ложные срабатывания детектора. Если в сообщении содержалось слово из списка исключений, то оно удаляется, а оставшееся сообщение снова прогоняется через детектор, где всё происходит по той же схеме. Таким образом, изначально детектор настроен на большое количество ошибок первого рода (false positive), которые затем исправляются, так как ошибки второго рода поймать и исправить в данном случае невозможно.
В последней версии получалось не более 1% ложных срабатываний на несколько сотен сообщений. Обойти детектор, естественно, возможно.
Имеется возможность проверить, является ли сообщение, которое вы хотите отправить, "запрещённым": !sweartest.
Полный список слов/замен можно посмотреть примерно на трёхтысячной строке кода.

14.03.2015

Количество строк в коде безвозвратно перевалило за 3 тысячи!
Добавлена возможность оповещать заходящих в руму людей о чём хотите — !joinmessage.

12.03.2015

Описаны все, так сказать, standalone команды, доступные для простых смертных.

11.03.2015

Переписаны команда lastpos и несколько других функций, на которые она полагается, поэтому в случае неполадок обязательно пишите в багрепорт!

10.03.2015

Добавлена возможность бана/мута на произвольное время. Пока что мут максимум на 45 минут, а бан на 24 часа. Минимум — 18 секунд.

09.03.2015

Наконец-то закончил переписывать основную часть кода (принцип обработки сообщений), так что теперь, как говорили админы плага, "внедрение новых фич будет происходить гораздо быстрее"! Ну и сайт начинаю заполнять.

General Info

Бот такой же юзер, как и вы. Только лучше.
Команды регистронезависимые. Все аргументы команд вводятся через пробел. Если аргумент написан в скобках, значит он не обязателен для ввода. Курсив означает, что это аргумент, текст которого зависит от запроса. Обычный шрифт — то, что нужно вводить именно так, как написано. Менять аргументы местами нельзя.
Бот старается казаться умным, поэтому сводит все 'особенные' и невидимые символы к тому, что видите и можете ввести вы. Если буква выглядит одинаково как на кириллице, так и на латинице — вводите как угодно! Иными словами, забанить киттекса через чат можно введя guerrillaforce, а отправить котика Игорьку — Lамigоr. Теоретически, можно ввести лишь часть ника, пропуская дублированные буквы, но результат не гарантирован.

Используемый код всегда можно посмотреть на гитхабе.
Экскурсии за кулисы проводятся каждый четверг в 15:00GMT+3.
Тред на 2ch.hk

Background functions

Autoskip — Cкип трека при определённом соотношении мехов и вутов.
Бот скипает при выполнении следующего неравенства: meh ≥ ⌊1.25*woot⌋ + ⌊(grey+resident)/5⌋ + 3.
DJ Cycle — Автопереключение цикла в зависимости от длины очереди.
Если в очереди становится 15 человек — отключает. Как только длина очереди опустится ниже 10 человек — включит обратно. Соответственно, при очереди в [10,14] человек цикл можно быть как включен, так и выключен. Гистерезис тип.
Stuck — Скип зависших треков.
Если трек завис, то бот через несколько секунд попробует скипнуть 5 раз с некоторым интервалом. Если не получилось, то на 10 минут эта функция отключается. Идут проверки на оставшееся и прошедшее времена и название трека перед каждым скипом, так что случайных скипов возникнуть не должно.
Mrazota — Скип излишне длинных треков.
Если трек длится дольше 100 минут и на момент начала трека в очереди есть 2+ человек, то скипнет.
Overplayed — Сообщение о том, что исполнитель/трек недавно уже играл.
"Недавно" — 3 часа для повтора трека и две длины очереди (отводя по 4 минуты на трек) для повтора исполнителя. Иными словами, играйте исполнителей через одного. С часу ночи до 8 утра GMT+3 или при очереди из 3х и меньше человек автоматически отключается.
Autoreconnect — Перезапуск в случае неполадок со связью.
Если в чате не было активности последние 5 минут, то будет отправлено проверочное сообщение, которое вы можете заметить в чате. Если оно не отправится или не сможет быть удалено два раза (с интервалом в 5 минут), то произойдёт перезагрузка. Таким образом, максимальное время неактивности бота составляет 10 минут, если проблема не на стороне плага, конечно.

Everyone

!message / !bugreport text — Остановить сообщение на мой автоответчик.
Чего не понятно-то?!

!lastpos / !dc (username) — Восстановление в очереди в случае дисконнекта.
Команда применима как к себе, так и к другому пользователю. Запоминает врема вылета бессрочно, но двигает в очереди только в течение одного часа.
Если место человека в очереди меньше записанного — ничего не произойдёт.
Если в течение трёх секунд пользователь не будет подвинут на нужное место (по причине лагов плага, например), то в чат будет отправлено соответствующее сообщение с записанной позицией.
Если бот добавил вас в очередь, но не подвинул из-за лагов — не выходите из очереди, иначе придётся просить помощи у манагера.
Имена обрабатываются кучей замен символов в регэкспах, поэтому имеется некоторая свобода в его написании.

Если username == "_chat", то только сообщит в чат ваши записанные место и дату вылета.

!dc ==> Добавит в очередь и подвинет на нужноe место вас.
!dc felix ==> Добавит в очередь и подвинет Felix Ermolov

!lastplayed / !lp — Информация о последнем проигрывании трека.
Пока что идёт проверка на совпадение либо id видео, либо исполнителя и названия трека. Поэтому если вы играете парамор под названием ghoticlolita - Paramore (<3 hayley) - ain't it fun [hq] (official video), то ваши проигрывания с накрутками Gavnuk'а ничего общего иметь не будут.

Ввод каких-либо аргументов на выполнение команды не влияет.

!roll / !reroll — Рулетка жанров.
Роллить можно не более двух раз, после чего нужно побыть за пультом, иначе рулетка будет недоступна.

Ввод каких-либо аргументов на выполнение команды не влияет.

!tags (artist) — Теги исполнителя текущего или artist.
Если произойдёт ошибка (нет такого исполнителя, например), в чат будет выведен текст ошибки, данный самим ласт.фм'ом. Если у исполнителя просто нет тегов, то об этом будет сообщено.

!tags ==> Chanson, Russian, Russian chanson, Shanson, Russian gothic.
!tags Gramatik ==> Hip-hop, Funk, Downtempo, Chillout, Instrumental hip-hop.

!playcount (artist) — Количество проигрываний исполнителя.
Данные беруться с аккаунта dvachbot на last.fm, поэтому данные могут и будут отличаться от !lastplayed

!playcount ==> BLVCK CEILING has been played 107 times in this room.
!playcount Михаил Круг ==> Михаил Круг has been played 21 times in this room.

!boooring — Скип длинного трека при нежелании румы его слушать.
Порог скипа слегка ниже, чем для обычного автоскипа.

Ввод каких-либо аргументов на выполнение команды не влияет.

!leaveafter — Удаление пользователя из очереди после одного трека.
Если команда отправлена будучи за пультом, текущий трек будет засчитан за "проигрывание". Если в очереди никого нет (т.е. вы опять попадёте за пульт), то по причине багов плага удалить вас не получится.

В чат никакого ответа на команду не отправляется.
Ввод каких-либо аргументов на выполнение команды не влияет.

!wakemeup — Будильник, сообщающий о приближении вашей очереди.
Как только вы станете первым в очереди, в чат будет отправлено сообщение, которое затем будет тут же удалено. Команда одноразовая, т.е. сбрасывается после каждого звонка будильника.
Так как проверка на необходимость разбудить идёт при каждом обновлении очереди, не рекоммендуется отправлять эту команду, находясь на первом месте в очереди. Впрочем, это было бы довольно глупо.
В чат никакого ответа на команду не отправляется.
Ввод каких-либо аргументов на выполнение команды не влияет.

!iwanttocycleevenwithdjcycleturnedoff — Автодобавление при выключенном цикле.
Отправить команду можно только находясь на 5-ом (или ниже) месте в очереди. После каждого добавления необходимо отправлять команду заново.

Ввод каких-либо аргументов на выполнение команды не влияет.

!lastseen username — Сообщение о последнем онлайне пользователя.
Если введённое имя ни с чем не совпало, значит такого пользователя в руме никогда не было.

!lastseen GREGORIYLEPS ==> GREGORIYLEPS has never been to this room.
!lastseen kitt ==> K.I.T.T. is in the room, dummy!

!tweek (username) (n) — Цитата великой. Подробнее
Можно послать как случайную цитату, так и нужную вам (указав номер). Либо просто в чат, либо в личку одному из пользователей.
Введённый номер делится с остатком на количество цитат, поэтому существует бесконечное количество номеров для каждой из цитат.

Если n не является числом, то всё написанное после команды будет считаться именем.
Номером цитаты n выбирается последнее введённое слово/число.
Если первое слово username'а является числом, то цитата будет отправлена просто в чат, а не в личку, однако номером всё равно будет последнее число среди аргументов.
Если введённый username не совпал ни с одним из юзеров, когда либо бывавших в комнате, в чат будет написано именно то, что вы написали.

!tweek ==>
!tweek 3 ==> если честно, то трек не очень
!tweek твик ==> @твик
!tweek твик 3 ==> @твик если честно, то трек не очень
!tweek 5 negroes in kfc 3 ==> если честно, то трек не очень

!meow (username) — Рандомный котик.
Отправляет ссылку на котика либо вам, либо указанному вами пользователю.
К сожалению, времени обновлять список ссылок не было, поэтому там всего около полусотни разных котиков.

Если введённый username не совпал ни с одним из юзеров, когда либо бывавших в комнате, в чат будет написано именно то, что вы написали.

!asian (username) — Фотография милой азиатки.
Отправляет ссылку на приятную девушку азиатской внешности либо вам, либо указанному вами пользователю. Всего их несколько сотен.

Если введённый username не совпал ни с одним из юзеров, когда либо бывавших в комнате, в чат будет написано именно то, что вы написали.

!wowroll — Случайное число от 0 до 100. Полезно для разрешения разногласий. Подробнее
Ввод каких-либо аргументов на выполнение команды не влияет.

!wowroll ==> @you have rolled .

!add command response — Добавление пользовательской команды.
"Команды" регистронезависимы. "Командой" считается первое слово после !add, а "ответом" — всё последующее.

command не может содержать пробелов.
response не может начинаться с ! или /, кроме /me.
Если у команды нет хотя бы двух аргументов, разделённых пробелом, не произойдёт ничего.
Если "команда" уже существует, добавлена она не будет.
Никакого сообщения об успешном добавлении команды в чат не идёт, только об ошибках.

!add hello Greetings, my friends! ==> !hello ==>Greetings, my friends!

!relay (-r username) message — Сказать что-либо от лица бота.
Можно отправить как просто сообщение, так и адресованное определённому пользователю. Свобода написания имени пользователя такая же, как и в других командах.

message не может начинаться с ! или /, кроме /me
Если после команды стоит '-r', то бот постарается из последующих нескольких слов вычленить нужное имя пользователя, отправляя целиком ваше сообщение с @ перед ним, если введённое имя не совпало ни с одним из пользователей, которые сейчас онлайн.

!relay Птички поют. ==> Птички поют.
!relay -r jesus Хочешь наркоты? ==> @JesusSuperstar Хочешь наркоты?

!postсount — Количество ваших постов, сыгранных песен и отправленных команд.
Ввод каких-либо аргументов на выполнение команды не влияет.

!postcount ==>

!plugpoints — Количество заработанных вами плагпоинтов.
Новая система плагпоинтов — херня. Настоящие плагпоинты зависели от вашей музыки, реакции публики на неё и вашей активности. Нынешние же дают просто так, за проведённое время даже не в руме, а просто на сайте.
Плагпоинт начисляется за каждую сыгранную вами песню, за каждый поставленный вам вут, за каждый граб вашего трека и за каждую оценку вами чужих треков.

Ввод каких-либо аргументов на выполнение команды не влияет.

!plugpoints ==> @You, You have 0 plugpoints.

!picture (_local) query — Случайная картинка по тексту query.
С каждым запросом количество картинок для выбора увеличивается. Картинки берутся через Google Image Search API.

Если первый аргумент == "_local", то будет отправлена ссылка из уже скачанного набора, без отправки каких-либо запросов в гугл.

!bean — Зубочиску?
Зубочистку?

!trifoce — Трифорс.

▲ ▲

!kitt — Приветствие бота.
В чат будет отправлено одно из двух доступных сообщений.

!ping — Pong!

Bouncers

!cycle (argument) — Управление циклом.
Теперь доступно и баунсерам!

Если не введён argument, то переключит состояние цикла.
Если argument == "on", то включит цикл.
Если argument == "off", то выключит цикл.
Если argument == "autoon", то включит автоматическое прееключение цикла, зависящее от длины очереди (по-дефолту включено).
Если argument == "autooff", то выключит автоматическое прееключение цикла на один час.

!staff username role — Дать/отнять лычку/очко.
Для успешного выполнения команды ваша роль должна быть выше как изначальной, так и конечной ролей цели. Т.е. манагер максимум может повысить до баунсера или снять лычку с баунсера/резидента. Исключение — снятие лычки с себя (или нахождение в списке избранных, естественно).

Доступные роли: 'grey', 'resident', 'bouncer', 'manager', 'cohost' и 'host' или цифрами от 0 до 5.
Если пользователь не в комнате, роль будет дана/снята при следующем его онлайне.
Требования ко вводу имени как и во всех других командах.


!staff tequila 3 ==> Дать дженерку манагера.
!staff guerila 1 ==> Зашкварить китеха.

!move username place — Подвинуть пользователя в очереди.
Можно использовать вне зависимости от нахождения человека в очереди — если надо, то добавит.

!move ex_x 1 ==> Послушать к-попчику.

!mute username duration — Замутить пользователя.
Можно мутить на произвольное время от 18 секунд до 45 минут. При использовании этой команты пользователю будет сообщено в чате о длительности наложенного на него мута. Изначально мут будет дан на ближайшее дозволенное плагом время (с округлением вверх), а затем снят через необходимый промежуток времени.

Дефолтные длительности:
  15 минут: "15", "s", "short",
  30 минут: "30", "m", "medium",
  45 минут: "45", "l", "long".
Остальные длительности вводятся в минутах, в том числе нецелых. Требования ко вводу имени как и во всех других командах.


!mute walek 36.25 ==> Замутить петровалика на 36 минут и 15 секунд.
!mute твик 0.2 ==> Invalid duration.

!ban username duration — Забанить пользователя.
Можно банить на произвольное время от 18 секунд до 24 часов. Изначально бан будет дан на ближайшее дозволенное плагом время (с округлением вверх), но затем снят через необходимый промежуток времени.
Дефолтные длительности:
  1 час: "1", "h", "hour",
  сутки: "24", "d", "day",
  навсегда: "p", "perma", "permanent", "forever", "endless".
Остальные длительности вводятся в часах, в том числе нецелых. Требования ко вводу имени как и во всех других командах.


!ban Gavnuk 5.2 ==> Убрать парамор из румы на 5 часов и 12 минут.
!ban Вася Пупкин 24 ==> Invalid Target.

!unmute username — Размутить пользователя.
Требования ко вводу имени как и во всех других командах.


!unban username — Разбанить пользователя.
Требования ко вводу имени как и во всех других командах.



Managers

!restart — Перезапустить бота.
Будут сброшены/потеряны следующие вещи: приветственное сообщение, голосование, скип по таймеру, все выключенниые на время настройки и текущие игры.
Также могут быть неправильно добавлены плагпоинты за играющий во время рестарта трек, если после окончания рестарта не прибавилось/убавилось вутов или мехов, или неправильно собрана статистика скорости чата в этот момент времени.
Лучшее время для рестарта — в самом начале трека.

Ввод каких-либо аргументов на выполнение команды не влияет.

!botstop — (Частичное) отключение бота.
Через 30 секунд отключит ответы китта на чат, автоскип, управление циклом, приветствие, сообщение заходящим в руму, детектор мата и проверку заевшей пластинки — словом, всё, кроме фоновых функций/сбора статистики и команд !lastpos и !botstart.

Ввод каких-либо аргументов на выполнение команды не влияет.

!botstart — Запуск бота.
Команда доступна только после отключения бота.

Ввод каких-либо аргументов на выполнение команды не влияет.

!settings (setting) — Вывести в чат настройки и их состояние.
Можно узнать, на какие сообщения бот сейчас отвечает и, если нужно, отключить. Подробнее в секции Settings.

Если указана setting, то выведет в чат состояние только этой настройки.
Если настройки не указана или такой существует, то в чат будут выведены (почти) все.


!enable setting — Включить функцию бота.
Подробнее в секции Settings. Если настройка содержит поднастройки, то вводятся они через точку. По-дефолту все настройки, кроме locklist, addtweek и swear, включены. После рестарта отключаются лишь те, что были выключены бессрочно.

Если setting == 'all', то включит всё.
Никакого оповещения об успешном или неуспешном выполнении команды нет.

!enable addtweek ==> Включить автодобавление твик в очередь (доступно не всем).
!enable games.hangman ==> Включить возможность играть в виселицу.

!disable setting (t) — Отключить функицю (на время t).
Если в руму пришли серьёзные люди и вы не хотите их смущать азиаточками, можно отключить эту опцию. Настройки должны вводиться так, как они написаны при выводе в чат командой !settings. Подробнее в секции Settings.

Если setting == 'all', то выключит всё.
Если t == 'never', то настройка будет отключена бессрочно и не будет включена обратно даже после рестарта бота.
Если t не указано, настройка будет включена через 2 часа.
Время t вводится в минутах.
Никакого оповещения об успешном или неуспешном выполнении команды нет.

!disable fun 30 ==> Отключить котиков и прочие рулетки на 30 минут.
!disable games.russian never ==> Отключить возможность играть в русскую рулетку навсегда.
!disable control ==> Отключить возможность управлять ботом.

!letusswear — Отключить наказатель за мат до следующего четверга.
Вынужденный костыль в связи с принципом работы системы включения/выключения настроек и проверки на необходимость мутить в случае нахождения мата в сообщении.

Ввод каких-либо аргументов на выполнение команды не влияет.

!joinmessage (-t time) (text) — Приветствие входящему пользователю.
Не запоминает уже оповещённых людей, поэтому писать вам будет каждый раз, когда вы заходитие.
Если отключена настройка welcome, приветсвия не будет независимо от наличия или отсутствия текста сообщения (т.е. эта команда не будет влиять).

Если time не указано, сообщение будет отключено через 1 час.
Если не введён text, приветствие будет отключено.
Время time вводится в часах.
Никакого оповещения об успешном или неуспешном выполнении команды нет.

!joinmessage -t 5 Ставим рэп! ==> K.I.T.T.: @JoinedUser Ставим рэп! В течение 5 часов.
!joinmessage Ставим рэп! ==> K.I.T.T.: @JoinedUser Ставим рэп! В течение 1 часа.
!joinmessage ==> Приветствие отключено.

!noscrobble — Не скробблить текущий трек.

Chosen ones

!nodelete — Переключение удаления сообщений с командами.
Включит или выключит, в зависимости от текущего состояния.

!locklist — Закрыть бассейн. Совсем.
Помимо блокировки вейт листа, будет удалять оттуда всех, кто попытается зайти (плаговская блокировка работает только на серых). Таким образом, играть будет всего один человек.

!unlocklist — Открыть обратно очередь для всех.
!flush — Сбросить лимиты.
Сбрасываются счётчики количества запрошенных кошек и азиаток (т.е. всем снова доступно 10), количество роллов рулетки (т.е. не обязательно становится диджеем для повторного ролла) и количества отправленных подряд сообщений с одинаковой командой.

!remove command — Удалить пользовательскую команду.
Команда должна быть написана без восклицательного знака в начале.

Никакого оповещения об успешном или неуспешном выполнении команды нет.

!remove usi ==> (Реклама продажи усов на пуджа удалена.)

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

!tweekcycle — Автоматическое добавление твик в очередь.
Включает или выключает, в зависимости от текущего состояния настройки.

!woot — Вутнуть ботом трек.
!meh — Мехнуть ботом трек.

Games

!russian (argument) — Русская рулетка.
1/6 шанс выстрелить в себя и получить мут на 15 минут.

Если argument == 'score', то в чат будет написано текущее количество невыстрелов.
Если argument == 'highest', то в чат будет написано ваше максимальное количество невыстрелов.
Если argument == 'highscore', то в чат будет написан рекордсмен румы.
Если argument равен чему угодно другому или не указан, то вы нажимаете на спусковой крючок.

!russian ==> BANG; K.I.T.T. muted User for 15 minutes.
!russian score ==> @You 6, 33.40%
!russian highest ==> @You's highest score was 7, 27.83%
!russian highscore ==> Peka1337 is the luckiest person in this room with 23 consecutive clicks.

!hangman language — Начать игру в виселицу.
Начать игру могут только менеждеры и выше. Игра кооперативная. Всего даётся 10 попыток (на всю руму) угадать букву, после которых вы проигрываете и будете повешены. Слова же можно пытаться угадать неограниченное количество раз. Повторные угадывания одной и той же буквы не засчитываются за попытки.
Можно играть как на русском (словарь из 65 тысяч, порой дурацких, существительных), так и на ангилйском (3 тысячи самых популярных слов) языках. Если слово содерит дефис — он будет поставлен сразу.
Одновременно может быть запущена лишь одна игра, т.е. запуск новой завершит предыдущую.

Если language == 'ru', стартуется виселица на русском языке.
Если language == 'eng', стартуется виселица на английском языке.

!hangman ru ==> Let's play hangman in Russian!

!hangstop — Прервать игру в виселицу.
Может сделать только менеджер и выше.

Ввод каких-либо аргументов на выполнение команды не влияет.

!letter / !lt letter — Угадать букву в слове при игре в виселицу.
Букву нужно писать на том же языке, на котором идёт игра. Е и Ё, И и Йразные буквы! Регистр не важен.

Если letter не указана, не произойдёт ничего.

!letter e ==> Sorry, no such letter in the word!

!word / !wd word — Угадать слово при игре в виселицу.
Слово нужно писать на том же языке, на котором идёт игра. Е и Ё, И и Йразные буквы!

Если word не указано, не произойдёт ничего.

!word бирюлька ==> Sorry, that's not the word!


Voting

!votestart proposal *( -o optN) — Внутричатовое голосование.
Начать могут только менеджеры и выше.
Если указан только proposal, т.е. сообщение не содержит " -o ", то начнётся голосование за или против этого предложения.
Если же указано несколько вариантов, разделённых " -o ", то начнётся голосование за один из вариантов. Формально количество вариантов не ограничено, но на практике ограничением будет являться длина сообщения в чате плага.

!votestart Васю обратно в сохосты! ==> Let the voting begin. Today's proposal is: Васю в сохосты! Please vote for or against this proposal by typing "!voteyea" or "!votenay".
!votestart kittex -o SomethingNew -o Guerrilla Force ==> Let the voting begin. Today's options are: 1. kittex; 2. SomethingNew; 3. Guerrilla Force. Please vote for an option of your choice by typing "!vote #".

!votehalt — Преждевременное прерывание голосования. Результаты сообщены не будут.
!voteend — Завершение голосования и оглашение результатов.
Если было голосование за/против, то для победы количество голосов "за" должно быть больше, чем голосов "против".
Если было голосование за одну из опций и вышла ничья среди 2-3 вариантов, они будут сообщены (вместе с количеством голосов) и будет предложено перезапустить голосование только с этими вариантами.
Если вышла ничья среди 4 и более вариантов, будет сообщено лишь количество голосов за каждый из них и предложено переголосовать целиком.

!voteend ==> No one has voted.
!voteend ==> The majority has ruled against the proposal. No revolution today, sorry.

!votestandings — Промежуточные результаты.
В случае голосования за/против, будут сообщены голоса за каждую из сторон.
При выборе из вариантов будет либо сообщён лидирующий вариант с количеством голосов за него, либо сообщено о ничьей между "двумя или более" вариантами.

!voteremind — Сообщить в чат об идущем голосовании.
!revote — Перезапустить голосование, сбросив все голоса.
!voteties — Решение ничьей.
Перезапускает голосование, оставив только лидирующие варианты, если их было не более 3. Команда доступна только после попытки завершения голосования командой !voteend
.

!voteyea — Голосовать за.
!votenay — Голосовать против.
!vote n — Голосовать за вариант n.
Если варианта с таким номером не существует, то вам сообщат.

!signstart — Запись в список/сбор подписей.
Если вам нужно узнать не только сколько человек хотят что-то сделать, но и кто именно. Могу стартовать баунсеры и выше.

!signstart Обучение алисы ездить на велосипеде ==> People are needed for Обучение алисы ездить на велосипеде! Type "!signup" to join the list.

!signhalt — Преждевременное прерывание записи людей. Результаты сообщены не будут.
!signend — Завершение сбора людей и сообщение результатов.
Выведет в чат список имён, кто решил записаться.

!signend ==> The following people have decided to join: progertech.

!signed — Посмотреть текущий список.
!signup — Записаться в список.
!withdraw — Исключить себя из списка.

Events

!valentine username — Отправить валентинку.
Посылает шоколадку и сердечко указанному пользователю.

Если username == 'showmethescore', сообщит самого любимого члена общества.

!sweartest text — Проверить слово/предложение на запрещённость.
Возможность проверить сообщение на мат без каких-либо последствий. Однако, все проверки записываются, поэтому у вас есть два варианта: проверять все возможные варианты написаний в поиске недектируемого, но вскоре обнаружить починку этой нелепой оплошности, или же писать сразу в чат и рисковать получить мут.

Если с текстом всё в порядке, в чат не будет сообщено ничего.

!sweartest Я твой хуй ебал, пидрила ==> That's swearing.
!sweartest Употреблять алкоголь в больших количествах — вредно. ==>


Settings

 Состояние настройки отвечает либо за ответ на команду из соответствующей категории, либо за автоматическое выполнение действий. Например, отключение fun не позволит более крутить рулеточку, а отключение mehskip выключит автоскип по мехам.
В чат выводятся не все настройки, так как некоторые скрыты, как commdelete (однако всё равно могут быть изменены), а некоторые вовсе не могут быть отключены, как control. Но при запросе конкретной настройки (например, !settings control) её значение выведено в чат будет.
Если была включена или выключена опция, содержащая поднастройки (как games), то будут включены или выключены все поднастройки.

Tools — Основные и полезные команды.
Включает в себя следующие команды: message/bugreport, lastpos/dc, lastplayed/lp, tags, playcount, skip, boooring, leaveafter, wakemeup, lastseen, postcount, staff, move, mute, ban, unmute, unban, joinmessage, votestart, voteties, votehalt, signstart, signhalt.

Control — Управление ботом и румой.
Включает в себя следующие команды: botstop, settings, enable, disable, nodelete, cycle, locklist, unlocklist, flush, remove, destroy.

Fun — Котики и прочее.
Включает в себя следующие команды: meow, asian, bean, roll/reroll, wowroll, tweek, triforce, plugpoints, add, relay.

Games — Различные игры.
Включает в себя следующие команды: hangman, russian. Содержит поднастройки с теми же именами: hangman и russian. Включать/выключать их нужно через точку.

Various — Бесполезные, эвентовые и/или временные команды
Включает в себя следующие команды: kitt, valentine, ping, tweekcycle, sweartest, woot, meh.

User Commands (usercomm) — Пользовательские команды.
Включает в себя все добавленные пользователями команды, которых несколько десятков.

Welcome — Приветственное сообщение.
Если опция выключена, то сообщение не будет отправлено вне зависимости от команды joinmessage.

Mehskip — Скип по мехам.
Autocycle — Переключение цикла в зависимости от длины очереди.
Scrobble — Скроббинг треков на ласт.фм
Mrazota — Скип излишне длинных треков.
Sameartist — Сообщение о том, что трек/исполнитель уже играл недавно.
С часу ночи до 8 утра GMT+3 или при очереди из 3х и меньше человек автоматически отключается.

Setstaff — Возможность раздавать лычки через бота (командой !staff).
Spam — Проверка на спам.
Пока что спамом считается отправка одной и той же команды (вне зависимости от аргументов) 6 раз подряд в течение двух минут.

Stuck — Автоматический скип зависших треков.
Swear — Детектор мата.
Сам детектор не отключается, отключаются только наказания за мат. По-дефолту выключено.

LocklistБлокировка вейтлиста.
Delete Commands (commdelete) — Удаление сообщений, содержащих команды.
Командой считается любое сообщение, начинающееся с восклицательного знака.
Если сообещние с командой находится в блоке с предыдущими сообщениями пользователя, то удалено оно не будет вне зависимости от этой настройки.

Addtweek — Автодобавление твик в очередь.
Однажды твик пожаловалась на то, что она не хочет вручную добавляться в очередь даже при отключенном цикле, поэтому была сделана эта команда. Через несколько дней ей надоело, что её автоматически добавляет в очередь. С тех пор эта функция заброшена и ржавеет.