Простой бот для VK, который напоминает о дедлайнах, в том числе и в групповых чатах, что позволяет не пропускать дедлайны целой группе.
Бот использует два внешних компонента: VKBottle — потрясающий, многофункциональный и, главное, асинхронный фреймворк для работы с ботами ВКонтакте — а также dateparser для распознавания введённых пользователем даты и времени. Если быть до конца честным, эти два компонента тянут за собой ещё кучу зависимостей, но их не надо устанавливать вручную. VKBottle также использует Loguru для вывода логов в консоль.
В терминале перейдите в директорию бота и выполните:
pip install -r requirements.txt
Для хранения дедлайнов бот использует БД SQLite, но в Python уже есть встроенный модуль для работы с ней, устанавливать дополнительно ничего не нужно.
Предполагается, что вы уже создали группу, в которой будет жить бот. Перейдите в её настройки, нажав на главной странице сообщества кнопку «Управление». Открываем раздел «Работа с API» и создаём новый ключ доступа (токен). Достаточно будет задать для ключа права доступа «Сообщения сообщества». В директории с ботом откройте файл config.py
и вставьте полученный ключ в переменную token
.
Здесь же откройте раздел «Long Poll API» и включите его (убедитесь, что в списке «Версия API» выбрана самая новая). Перейдите на вкладку «Типы событий» и отметьте все галочки в разделе «Сообщения» (на самом деле используется только событие «Входящее сообщение», но на всякий случай лучше отметить все — мешать не будет).
Перейдите в «Сообщения», включите сообщения сообщества, по желанию задайте приветственный текст.
Откройте «Настройки для бота», включите возможности бота и отметьте галочку напротив «Разрешить добавлять сообщество в беседы».
Поздравляем, бот готов к использованию!
Запустите bot.py
. Если на предыдущем шаге вы всё сделали правильно, бот начнёт работать. При условии, что установлен Loguru, в консоли начнут появляться логи.
ВАЖНО:
- Чтобы бот мог упоминать всех участников в групповом чате, его необходимо сделать администратором беседы — это ограничения ВКонтакте и мы не можем их обойти.
- Чтобы бот увидел сообщение в групповом чате, команде либо должен предшествовать знак слеша (/), либо обращение по короткому имени «Дед» (с запятой, по правилам русского языка). В последнем случае боту должно быть выдано разрешение на чтение всей переписки.
добавь <название> на <время>
(добавить <название> на <время>
,дед, добавь <название> на <время>
) — добавляет дедлайн. Дату и время можно вводить почти в любом формате, включая относительные величины, такие как «завтра», «в среду» и т. д. Ессли бот всё-таки не распознал введённое время, попробуйте другой формат.удали <название>
(удалить <название>
,дед, удали <название>
) — удаляет дедлайн. Если задано несколько дедлайнов с одинаковым названием (не надо так делать), будет удалён тот, который был установлен раньше.измени <название> на <время>
(изменить <название> на <время>
,дед, измени <название> на <время>
) — изменяет время уже существующего дедлайна.сбрось
(сбросить
,дед, сбрось
) — удаляет все дедлайны для данного чата.дедлайны
(дед, что по дедлайнам?
,дед, скажи дедлайны
,дед, расскажи про дедлайны
) — выводит список всех текущих дедлайнов.когда <название>?
(`дед, когда <название>?) — сообщает время конкретного дедлайна.
Бот пришлёт уведомление о скором дедлайне: одно — за сутки до дедлайна, другое — за час. Если дедлайн установлен в групповом чате, бот упомянет всех его участников (при условии, что он администратор беседы). Когда дедлайн настаёт, бот также присылает сообщение (но уже без упоминания — навряд ли кого-то спасёт тег, если этот человек просрочил дедлайн). При этом дедлайн автоматически удаляется, вручную этого делать нет необходимости.
Категорически приветствуются issues и pull requests. Также пожелание или замечание можно написать любому из нас (см. блок контактов в основной группе бота).