/отметиться
Ежедневная отметка: начисляет баллы и ведёт серию дней подряд.
Человек заходит на сервер, когда собрался играть. В остальные дни он не заходит вовсе, и через месяц перестаёт заходить совсем: привычки нет, поводов нет. Модуль даёт повод — короткий и понятный: отметился, получил баллы, увидел, что серия дошла до шести дней и завтра будет награда. Рядом с отметкой идут задания, которые бот считает сам: сообщения в чате, минуты в голосовом с собеседником, ту же отметку. Баллы не висят мёртвым грузом — их тратят в лавке на роль на месяц, роль навсегда или на заявку администрации, если награда игровая. Сезон длится столько, сколько вы задали, потом баллы обнуляются, итоги уходят объявлением в канал, и счёт начинается заново.
Весь путь целиком, шаг за шагом. Справа — то, что реально увидят на вашем сервере.
Команда «отметиться» доступна всем и отвечает только тому, кто её дал. День считается по часовому поясу из настроек, а не по времени сервера базы: иначе у половины участников новый день наступал бы в три часа ночи. Отметка за сутки засчитывается ровно одна — день захватывается запросом с проверкой, поэтому два быстрых нажатия не начислят баллы дважды. Пропустил день — серия обнуляется и начинается заново.
Задание — это строка в настройках: название, что считаем, сколько нужно, сколько баллов и период (день или неделя). Считать бот умеет три вещи и обещает только их: сообщения в чате, минуты в голосовом и ежедневную отметку. Сообщения считаются с выдержкой, чтобы двадцать «ага» подряд не закрыли задание за минуту, а выдержка живёт в базе — перезапуск бота её не сбрасывает. Минуты в голосовом идут, только когда в канале есть собеседник и звук не отключён, иначе задание закрывалось бы сном в пустом канале.
Прогресс лежит в базе, отдельной строкой на человека, задание и период. Когда прогресс дотягивает до цели, задание помечается выполненным запросом с проверкой: строка переходит из «не выполнено» в «выполнено» ровно один раз, сколько бы событий ни пришло одновременно. Баллы начисляются после этого перехода, поэтому повторно они не придут даже при двух сообщениях в одну миллисекунду. О выполненном задании бот пишет в личные, а если личные закрыты — просто молчит, прогресс всё равно виден в команде.
Одна команда показывает всё сразу: сделана ли сегодня отметка, что осталось по каждому заданию с полоской прогресса, баланс, заработанное за сезон, серию и место в таблице. Ответ видит только сам человек. Место показывается именно здесь, а не в общей таблице: общее сообщение листают все подряд, и строка «ваше место» относилась бы к тому, кто последним нажал стрелку.
Награда — тоже строка настроек: название, цена, что человек получает, роль и срок. Роль на срок и роль навсегда бот выдаёт сам, предварительно проверив, что право «Управлять ролями» есть и роль не стоит выше роли бота. Баллы списываются условием внутри самого запроса: второе нажатие просто не находит строку с нужным остатком. Если Discord всё же откажет в выдаче, баллы возвращаются, а покупка остаётся в истории с пометкой возврата. Роль на срок снимается сама, и запись о ней делается до выдачи — перезапуск бота ничего не срывает.
Игровую награду бот не выдаёт: он списывает баллы и кладёт в канал заявок карточку с кнопкой «выдал». Кнопка закрывается захватом строки, поэтому два администратора не закроют заявку дважды, а отказ возвращает баллы и сообщает об этом участнику честно — только если возврат действительно прошёл. Сезон заканчивается сам по сроку или командой владельца: итоги уходят объявлением в канал, баллы обнуляются, история прошлых сезонов остаётся в базе, а купленные роли снимаются по своему сроку, а не по сезону.
Всё это меняется в личном кабинете в любой момент — каналы и роли выбираются списками с вашего сервера, вводить ID руками не нужно. Бот подхватывает изменения сам.
Основа сезона
Как заработать баллы
Серии (стрик)
Задания и лавка
Заявки на выдачу
Объявления и оформление
Что вводят на сервере, когда модуль подключён. Команды набираются со слэша — Discord подсказывает список сам, наизусть помнить ничего не нужно.
/отметиться
Ежедневная отметка: начисляет баллы и ведёт серию дней подряд.
/задания
Личная карточка: что осталось сделать сегодня и за неделю, сколько баллов на счету и какое место в сезоне.
/лавка
Список наград с ценами и покупка за баллы через меню и подтверждение.
/сезон
Таблица сезона по заработанным баллам, страницами по десять человек.
/сезон-сброс
Подводит итоги сезона и начинает новый с нуля; требует вписать слово СБРОСИТЬ.
/сезон-проверка
проверка настроек Показывает, что мешает работе: недостижимые задания, роли выше роли бота, недоступные каналы, нехватку прав.
Команды для администрации Discord показывает только тем, у кого есть нужное право сервера. Чтобы ими пользовалась ваша модерация без прав администратора, откройте доступ её ролям: Настройки сервера → Интеграции → ваш бот → нужная команда.
Бот разворачивается за пару минут: выбираете модули, вставляете токен, приглашаете на сервер.