Подделываем результаты конкурсов на Twitch


Несколько лет назад на блоге уже была подобная статья про ВКонтакте, но время идет, стриминговые платформы в своем расцвете, как и розыгрыши призов среди зрителей. В частности, на платформе Twitch популярен чат-бот Nightbot, через который осуществляется как модерация и реализация полезного функционала для канала (прямо как у ботов в IRC), так и организация розыгрышей призов через панель управления. Рассмотрим подробнее, как подменить победителя с помощью расширения Tampermonkey в браузере Google Chrome (естественно, это актуально только с позиции организатора розыгрыша / стримера).

Для начала, давайте проанализируем, что происходит при нажатии на кнопку "Roll it!" в панели управления Nightbot.

Анализируем HTML-представление страницы (используем контекстное меню при нажатии по элементу и пункт Inspect, а не View Page Source) и наблюдаем следующее:

Мы видим, что при нажатии вызывается функция 'giveaway', которая где-то определена. Также, если переместиться в начало кода страницы (или воспользоваться вкладкой Sources в Developer Tools), то мы увидим, что в контексте подгружается Javascript-файл с именем вида 'app-f31e8d58.js', например: вот. Файл сжат, поэтому стоит воспользоваться http://beautifier.io/ или встроенным в Developer Tools браузера Google Chrome аналогичным инструментом.

Нас интересует фрагмент кода, который начинается со следующей строки (примерно 2040 строка в распакованном представлении кода):

Также обратите внимание на следующие фрагменты кода:

И сразу отметим нюансы:
1. Из-за использования AngularJS перехват внутренних функций представляет определенную сложность.
2. Прямая модификация массива e.users лишена смысла, т.к. победитель выбирается случайным образом из него, а урезание массива до 1 элемента приводит к дополнительным проблемам при отображении списка участников и их общего числа в панели управления Nightbot.
3. Прямая модификация e.winner приводит к визуальным гличам и необходимости менять ряд элементов DOM вручную.

В итоге остановимся на модификации результата функции перемешивания массива участников (e.users), путем перехвата вызова функции Math.floor. Фактически нас интересует следующий фрагмент кода:

В данном цикле происходит перемешивание элементов, но мы можем это предотвратить, если Math.floor будет возвращать 0 на каждой итерации, кроме последней. На последней итерации мы вернем значение, которое позволит нам переместить желаемого участника в начало массива. Именно там после перемешивания находится победитель. Обратите внимание на самый конец фрагмента кода, упомянутого ранее (функция 't' отвечает за отображение победителя):

В итоге получился следующий скрипт для Tampermonkey (обратите внимание на комментарии в коде):

Скрипт работает в Google Chrome с Tampermonkey, однако, работа в Mozilla Firefox с Greasemonkey не проверялась.

В архиве скрипт с англоязычными комментариями: скачать.
Также актуальная версия доступна на Greasyfork (если будет обновление, то именно там): перейти.

Подделываем результаты конкурсов на Twitch: 3 комментария

  1. Привет KAIMI вы не смогли бы сделать скрипт на рандомайзер Лизы он Эйр под инстаграм конкурсы заранее спасибо у меня не получается .(((

  2. Прошу прощение за нескромный вопрос и не по теме а будет новый гайд на сзлом easyQuizzy 2,0 а то предыдущий не работает с 2 шага очень щипитильная тема

    1. Модифицированный редактор теста easyQuizzy из статьи нормально открывает версии теста, созданные последней доступной версией программы.
      Смысла повторять шаги, кроме как для себя, нет.

Добавить комментарий

Ваш адрес email не будет опубликован.