Skip to content

13Hz/osu-not

Repository files navigation

image

GitHub issues GitHub commit activity GitHub Telegram

osu!not

Телеграм-бот для получения уведомлений о сыгранных ранее игр по выбранным пользователям

Окружение

  • Laravel 11.12.0
  • PHP 8.2.21
  • MariaDB 10.8

Установка

  1. Склонировать репозиторий
git clone https://github.com/13Hz/osu-not.git
  1. Выполнить установку библиотек и зависимостей
composer install
  1. Выполнить команду установки
php artisan install

Следовать шагам установки: указать идентификатор телеграм бота (без знака @), токен бота, идентификатор приложения авторизации osu oauth, секретный токен, публичной ссылки на приложение, настроек подключения к БД

В процессе установки скрипт автоматически попытается установить webhook для телеграм бота и создать ссылку для создания первого токена авторизации в osu!, но для этого важно указать действующую ссылку на это приложение (APP_URL в env файле (будет предложено указать в процессе установки)). Если по каким-то причинам эти моменты будут отработаны некорректно их всегда можно вызвать вручную командами:

Установка вебхука

php artisan webhook:set

Генерация ссылки авторизации

php artisan api:oauth

В конце установки (или после вызова соответствующей команды) будет сгенерирована ссылка на авторизацию через OAuth сервисы osu!. Перед переходом по этой ссылке необходимо установить callback_url в настройках приложения на сайте, что бы произошел автоматический редирект на приложение и токен добавился в систему

  1. Запустить обработчик планировщика заданий и очередей
php artisan schedule:work
php artisan queue:work --queue=generate_preview  
php artisan queue:work --queue=check_last_scores
php artisan short-schedule:run
  1. После установки можно перейти в чат с ботом или добавить его в любой чат/канал и работать с ним, доступные команды и их описание будет ниже

Команды

/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.

Так что, скорее всего, можно связаться с разработчиком и попросить увеличить лимиты

About

osu! telegram notifications bot

Topics

Resources

License

Stars

Watchers

Forks

Languages