Twitch сломал мой майнер дропсов за 1 день
Началось всё с простой лени – смотреть стримы ради наград очень долго и муторно
Для тех, кто не в теме: Twitch раздаёт внутриигровые награды за просмотр стримов. Посмотрел два часа, получил скин. Смотреть это никто не хочет, поэтому давно есть программы, которые «смотрят» за тебя. Самая известная называется TwitchDropsMiner. Я поставил её, она работала, и на этом история могла закончиться
С ЧЕГО НАЧАЛОСЬ
Оригинальный софт рассчитан на тех, кто уже разобрался. Очередь расставляешь руками и сам следишь, какая кампания когда закончится. Я пару раз терял награды, потому что майнер честно копал то, что стояло первым, а рядом сгорало то, что заканчивалось через три часа
Полез править очередь. Потом окно, потому что на него было больно смотреть. Потом уведомления. Где-то на этом этапе я заметил, что от оригинала осталось ядро, которое общается с Twitch, а всё вокруг уже моё. Назвал это WATCHDROP и решил довести до состояния, когда можно дать другим
Сразу скажу: ядро по-прежнему стоит на работе DevilXD и его контрибьюторов, это указано в проекте
ИЗ ЧЕГО СДЕЛАНО
Python, интерфейс на веб-технологиях внутри окна (pywebview), сборка через PyInstaller, обновления через Velopack. Не самый модный набор, но ядро на Python, и переписывать его ради красоты я не стал
ЧТО ВНУТРИ
1. Очередь
Первая версия «умной» очереди имела настройки: что важнее, срок или любимые игры. Потом я их выкинул. Если очередь умная, она должна решать сама, а если ей нужны три ползунка, она не умная. Сейчас правило одно: сначала то, что раньше закончится, потом избранное. Тронул порядок руками, умный режим выключился
2. Игры, по которым сейчас ничего нет
Долгое время приложение знало только про кампании, которые идут прямо сейчас. Звучит логично, пока не захочешь сказать ему: «Мне нужен Warframe, следи». А дропсов по Warframe сегодня нет, значит, и игры в списке нет, и отметить нечего. Получалось, что умная очередь умная только задним числом: о новой кампании ты узнавал, когда она уже шла.
Пришлось завести каталог игр, у которых дропсы бывают в принципе, и дать отмечать их заранее. Теперь можно выбрать игру, пока по ней тишина, и когда кампания стартует, она сама встанет в очередь
3. Пауза во время игры
Я гордился этой функцией: запустил игру, майнер встал на паузу и не мешает. Потом сел и посмотрел, что именно я останавливаю. Оказалось, один крошечный запрос в минуту. То есть пауза ничего не экономила и стоила людям прогресса. Переделал в тихий режим: дропсы капают, уведомления и анимации молчат до конца игры. Отдельное удовольствие было научить программу понимать, что такое «игра». Полноэкранный браузер с ютубом игрой не является, а Wallpaper Engine в Steam числится запущенной игрой круглосуточно
4. Уведомления
Сначала приложение сообщало обо всём, и через неделю я выключил их. Начал искать способ, чтобы другие не захотели их отключить также.
Теперь награды приходят сразу, но три штуки за минуту склеиваются в одно сообщение. Новые кампании пишутся только по избранным играм, остальное уходит в вечернюю сводку. Если что-то сломалось, приложение сначала две минуты чинится само. То, что вы и так видите в открытом окне, не дублируется. Во время игры и ночью оно копит и потом выдаёт одним сообщением. И потолок: не больше пяти несрочных в день
5. Вход в аккаунт
В конце сентября Twitch перестал выдавать коды входа тому клиенту, под который маскировался майнер. Я переключился на клиент для телевизоров. Он впустил, но не отдал список кампаний, то есть войти можно, а майнить нечего. В итоге сейчас вход сделан на странице самого Twitch, которая открывается в окне приложения. Пароль я при этом не вижу, что заодно снимает вопрос доверия
КАК TWITCH СЛОМАЛ ВСЁ СРАЗУ ПОСЛЕ РЕЛИЗА
Версию 1.0 я собрал 6 октября. Вечером 7 октября Twitch поменял правила зачёта просмотра.
Выглядело это грустно! Майнер отправляет сигнал «минута просмотрена», Twitch отвечает «принято», а прогресс стоит. Никаких ошибок. Первый баг-репорт от живого пользователя в моей жизни был именно про это
Сутки ушли на перебор. Менял формат сигнала, идентификаторы устройства, способ отправки. Ничего. Потом начал сравнивать с тем, что делает настоящий плеер в браузере, и картина сложилась: Twitch теперь засчитывает время только тем, кого видят его видеосерверы.
Дальше вопрос был, сколько «смотреть» достаточно. Читать плейлист стрима мало. Дёргать его раз в минуту мало. Качать видео целиком работает, но это около 5 МБ в минуту, а смысл майнера как раз в том, чтобы не качать. Сработал запрос к каждому новому куску видео без скачивания. Минуты идут, трафика почти нет.
Пара других проектов независимо пришла к тому же
ЧТО ЕСТЬ СЕЙЧАС
Windows 10 и 11, бесплатно, платных функций нет. Очередь, которая сама решает, что копать. Автосбор наград. Уведомления в Windows и через бота в Discord. Экран с раздачами игр из Epic, Steam и GOG. В планах версия под macOS и уведомления в Telegram
ВОПРОСЫ, НА КОТОРЫЕ У МЕНЯ НЕТ ОТВЕТА
Хочу услышать мнения, в том числе неприятные.
1. Свой ли это проект? Ядро чужое, всё остальное моё. Для одних это нормальный форк, для других перекрашенная чужая работа. Сколько надо переписать, чтобы считалось своим?
2. Настройки или автоматика? Я убрал ползунки из очереди, потому что считаю, что программа должна решать сама. Мне уже говорили, что это неуважение к пользователю. Кто прав?
3. Как жить бесплатному проекту? Сервер, домен и бот стоят денег. Платных функций я не хочу. Что бы вас не оттолкнуло?
И ПРОСЬБА
Я делаю это один и уже не вижу, где криво. Если фармите дропсы, поставьте, погоняйте пару дней и напишите, что сломалось или взбесило. Ругать можно, за этим и пришёл
WATCHDROP | Windows, бесплатно
ПРЕДУПРЕЖДЕНИЕ
Twitch автоматизацию не одобряет, риск бана исключить нельзя, решайте сами