Дискорд бот, позволяющий узнать, сколько людей на сервере сидит в очереди в игре, а также сколько конкретный юзер сервера провёл времени в меню, в очереди или играя.
Дискорд позволяет узнать статус игрока в игре через Rich Presence. Статусом может быть информация о том, что игрок сидит в меню, в очереди или играет. Бот сохраняет эти статусы, и использует их для своих вычислений.
В личных сообщениях бота можно использовать команды
/time
Menu: 13 Minutes
League Queue: 1.7 Hours
Casual Queue: 1.2 Hours
League Arena Playtime: 38 Minutes
Casual Arena Playtime: 55 Minutes
/info
Total: 1
League Queue: 1
Casual Queue: 0
Бот сильно ограничен тем фактом, что далеко не все включают в профиле Rich Presence. Тем не менее даже если информация о количестве участников в очереди довольно сомнительна, желающие всё ещё могут узнать свою статистику по времени в игре.
И ещё он ограничен тем, что бота на сервер должен добавить владелец сервера.
Для программы нужно создать приложение дискорда, включить там бота, включить у бота PRESENCE INTENT и SERVER MEMBERS INTENT. После чего скопировать токен бота и указать его секретом для приложения.
https://discord.com/developers/applications/
dotnet user-secrets set "Discord:Token" "123"
Затем в OAuth2 категории выбрать галочку bot, и при помощи сгенерированной в самому низу страницы ссылки пригласить бота на сервер. Боту не нужны никакие доступы ни к чему. Команды пишутся ему в личку.
На линуксе нет нативной версии батлрайта, и протон сам по себе не отправляет информацию о статусе игры в виде rp в дискорд. Но есть специально созданные мосты, которые этим занимаются. Проблема в том, что для дискорда такой игрок будет играть в 2 игры сразу. В "battlerite" (по запущенному файлу) и в "Battlerite" (по приходящему rp). И дискорд будет присылать боту rp только об одной из этих активностей. И если игра свёрнута, будет присылать пустые rp "battlerite". У пользователя это исправляется отключением обнаружения игры по файлу в настройках, но я добавил логику в обработку времени на тот случай, если кто-то ещё играет на линухе и не знает об этой проблеме.