Телеграм-бот для получения уведомлений о сыгранных ранее игр по выбранным пользователям
- Laravel 11.12.0
- PHP 8.2.21
- MariaDB 10.8
- Склонировать репозиторий
git clone https://github.com/13Hz/osu-not.git
- Выполнить установку библиотек и зависимостей
composer install
- Выполнить команду установки
php artisan install
Следовать шагам установки: указать идентификатор телеграм бота (без знака @), токен бота, идентификатор приложения авторизации osu oauth, секретный токен, публичной ссылки на приложение, настроек подключения к БД
В процессе установки скрипт автоматически попытается установить webhook для телеграм бота и создать ссылку для создания первого токена авторизации в osu!, но для этого важно указать действующую ссылку на это приложение (APP_URL в env файле (будет предложено указать в процессе установки)). Если по каким-то причинам эти моменты будут отработаны некорректно их всегда можно вызвать вручную командами:
Установка вебхука
php artisan webhook:set
Генерация ссылки авторизации
php artisan api:oauth
В конце установки (или после вызова соответствующей команды) будет сгенерирована ссылка на авторизацию через OAuth сервисы osu!. Перед переходом по этой ссылке необходимо установить callback_url в настройках приложения на сайте, что бы произошел автоматический редирект на приложение и токен добавился в систему
- Запустить обработчик планировщика заданий и очередей
php artisan schedule:work
php artisan queue:work --queue=generate_preview
php artisan queue:work --queue=check_last_scores
php artisan short-schedule:run
- После установки можно перейти в чат с ботом или добавить его в любой чат/канал и работать с ним, доступные команды и их описание будет ниже
/start - Инициализация и запуск бота
/add {username} - Добавить пользователя для отслеживания в текущем чате
/players - Отобразить список добавленных пользователей
После добавления пользователя в чат он будет периодически проходиться скриптом для проверки новых результатов. Результатом считается последняя сыгранная карта, если в текущей итерации проверки результат отличается от того, что был итерацией ранее - считаем этот результат новым, обновляем эту информацию и отправляем сообщения во все чаты, где был добавлен этот игрок
Приложение работает на osu!api v2, если верить документации, существует ограничение на 1200 запросов в минуту
На текущий момент приложение проходится по всем пользователям с частотой 1 раз в 10 секунд. Путем нехитрых вычислений можем посчитать, сколько пользователей может обрабатываться приложением:
1200 - максимальное количество запросов в минуту
10 - секунд между проходами пользователей (текущая настройка)
60 / 10 = 6 (раз за минуту отработает скрипт)
1200 / 6 = 200 (максимально допустимое количество пользователей, что бы не выйти за пределы 1200 запросов)
Можно как угодно играть с настройками периодичности проверки - чаще = более своевременные уведомления = меньше пользователей; реже = дольше пауза между скором и уведомлением = больше пользователей
В #7 была добавлена оптимизация игроков в инактиве. Те игроки, что редко играют будут обновляться реже, что положительно сказывается на итоговом количестве запросов в апи в минуту.
Также в документации написано:
If you are doing more than 60 requests a minute, you should probably give peppy a yell.
Так что, скорее всего, можно связаться с разработчиком и попросить увеличить лимиты