Twitch

Уровень настройки Twitch OMEGA: напишите свой собственный бот Twitch с помощью Node.js и tmi.js - Часть 1

Напишите свой собственный Twitch-бот с Node.js и tmi.js

В этой статье я покажу вам, как использовать tmi.js на сервере Node.js, чтобы написать чат-бота, который ответит «Polo!» в чате всякий раз, когда кто-то набирает «! Марко».

Введение в серию

Эта статья является частью более длинной серии статей о том, как использовать возможности JavaScript для настройки потока Twitch.

В моем потоке много движущихся частей, и я все время добавляю их.

  • Я использую бэкэнд Rails для обработки внешних запросов API
  • Я запускаю локальный сервер веб-сокетов с Socket.IO, который обрабатывает ряд запросов от пользователей и игровых событий - чаще всего вызывая одну из моих потоковых анимаций.
  • Я поддерживаю виртуальную валюту для зрителей (золотые монеты… потому что я большой фанат D&D), которую зрители могут использовать для участия в розыгрыше призов. Все, что с этим связано, хранится в бэкэнде Rails.
  • Пользователи могут тратить баллы канала - воображаемую валюту, которую они накапливают, просматривая стримы Twitch, - на воспроизведение созданной мной анимации.
  • Пользователи могут тратить виртуальную валюту (золотые монеты… потому что я большой фанат D&D) для участия в конкурсах, которые проводятся с использованием написанного мной кода.

Если бы не полезные статьи различных программистов в Интернете, я бы никогда не смог сконструировать такую ​​сложную установку, полностью основанную на моем собственном дизайне. Тем не менее, я надеюсь, что другие кодеры / стримеры смогут воспроизвести мою работу и тем самым поднять планку для всех стримеров.

Или вы могли бы…

Как я уже сказал выше, в этой статье я покажу вам, как создать чат-бота, который будет говорить «Поло!» в чате всякий раз, когда пользователь набирает «! marco».

Если вам нужен только такой базовый чат и ответ, вы, вероятно, сэкономите время, перейдя сразу к этим превосходным, усовершенствованным инструментам для чат-ботов, которые уже доступны.

Каждый из этих популярных сервисов предлагает чат-бота, который значительно проще настроить, чем все, о чем я расскажу в этой статье. Они также предлагают множество других услуг, которые могут удовлетворить потребности вашего стрима.

Тем не менее, если вы ищете способ добавить интересные интерактивные настройки в свой поток и столкнулись с ограничениями того, что предлагают такие три распространенных сервиса, вам почти наверняка придется взаимодействовать с данными. проходя через вашу чат-комнату Twitch, а это означает, что удобство и знакомство с tmi.js является важной отправной точкой.

Это просто tmi.js

В духе полного раскрытия информации я не изобретаю велосипед здесь. Многое из того, что следует ниже, взято непосредственно из примеров и документации на домашней странице tmi.js.

Шаг 0 - Зависимости

Я пишу с предположением, что вы будете использовать какой-то контроль версий, например Git. Если это не так, вы смельчак с кодом, можете спокойно игнорировать любые ссылки на репозитории или .gitignore files.

Перейдите в каталог, в котором вы хотите, чтобы ваш бот жил, и выполните следующую команду в своем терминале:

npm init --yes

Первая часть - это то, как вы обычно создаете проект Node, и — yes пропускает информацию об авторстве вашего проекта, которую вы всегда можете заполнить позже.

При этом создается package.json файл, наличие которого в каталоге указывает на то, что вы, вероятно, работаете в проекте Node.js.

Теперь, когда мы начали наш проект, нам нужно установить библиотеку tmi.js. Эта библиотека - всего лишь программный способ взаимодействия с Twitch IRC, технологией, лежащей в основе чата Twitch.

npm install [email protected]

Это поместит зависимость tmi.js в ваш файл package.json, и мы готовы воплотить нашего робота в жизнь!

Шаг 1 - Прослушивание чата Twitch

Чтобы установить соединение с чатом Twitch только для чтения, нам не нужна какая-либо авторизация, поэтому мы начнем с того, что заставим tmi.js отслеживать чат и сообщать обо всех входящих сообщениях.

Сначала в папке проекта создайте файл с именем index.js и добавьте следующий код. Замените channel_name на канал, который вы собираетесь отслеживать:

// require the library
const tmi = require('tmi.js');

// establish a tmi.js client as a listener
const client = new tmi.Client({
// these are the basic options
  connection: {
    secure: true,
    reconnect: true
  },
// the channel we're connecting to
  channels: [ 'channel_name' ]
});

client.connect();
// the actual reporting event
client.on('message', (channel, tags, message, self) => {
  console.log(`${tags['display-name']}: ${message}`);
});

Теперь в вашем терминале запустите node index.js.

Если вы все сделали правильно, вы будете видеть сообщения чата в своем чате Twitch, которые выводятся на ваш терминал, пока вы не выключите этот сервер node.js.

Шаг 2 - Получение токена Oauth и установка его в качестве переменной среды

Хотя мы можем читать сообщения без какой-либо авторизации или аутентификации, для того, чтобы наш бот мог отправлять сообщения, нам нужен токен, который может авторизовать нашего бота.

Мы хотим, чтобы наш токен Oauth оставался закрытым, поэтому мы будем хранить его в отдельном файле, который не будет включаться в наши коммиты. Есть множество способов обработки переменных среды. Мы будем использовать библиотеку пакетов dotenv, но если вы впервые используете переменные среды, важно понимать объем этой темы.

Во-первых, если у вас нет .gitignore файла, создайте его в корне каталога вашего проекта. Этот файл сообщает Git, что он может пропустить при фиксации и отправке файлов.

Добавить

.env

в конец этого файла.

(Если вы новичок в использовании .gitignore file с Node.js, стоит взглянуть на шаблонный .gitignore template из Github.)

Затем создайте .env file в корне каталога вашего проекта. Здесь мы разместим наш токен Oauth.

Теперь перейдите на https://twitchapps.com/tmi/ и войдите в свою учетную запись Twitch, чтобы получить токен Oauth для использования с tmi.js. Скопируйте свой токен Oauth и…

Добавьте следующую строку в свой .env file:

TWITCH_OAUTH_TOKEN='oauth:YOUR_TOKEN_HERE'

Прямо сейчас большая часть элементов на месте, но Node.js не может обрабатывать .env file. Давай исправим это. В вашем терминале из корневого каталога вашего проекта введите

npm install dotenv

для установки библиотеки dotenv.

Затем добавьте следующую строку в начало вашего index.js файла:

require(‘dotenv’).config({path: __dirname + ‘/.env’})

Это настраивает библиотеку dotenv для использования .env file в нашем корневом каталоге.

Для моих копий / пастеров вот как должен выглядеть наш файл index.js на данный момент:

const tmi = require('tmi.js');
require('dotenv').config({path: __dirname + '/.env'})
const client = new tmi.Client({
 connection: {
  secure: true,
  reconnect: true},
 channels: [ 'channel_name' ]
});
client.connect();
client.on('message', (channel, tags, message, self) => {
console.log(`${tags['display-name']}: ${message}`);
});

С такой конфигурацией наш бот готов взаимодействовать с чатом нашего канала Twitch!

Шаг 3. Заставьте вашего бота отвечать в чате

Чтобы наш бот мог взаимодействовать с чатом, нам необходимо предоставить ему наши учетные данные для авторизации. Давайте изменим нашу client variable так:

const client = new tmi.Client({
  options: { debug: true },
  connection: {
    secure: true,
    reconnect: true
  },
  identity: {
    username: 'your_username',
    password: process.env.TWITCH_OAUTH_TOKEN
  },
  channels: ['channel_name']
});

Теперь мы можем изменить наш client.on(‘message’) block:

client.on('message', (channel, tags, message, self) => {
  // This will tell the bot to ignore echoed messages.
  if(self) return;

  if(message.toLowerCase() === '!marco') {
    client.say(channel, `Polo!`);
  }
});

Это должно сработать.

Давайте запустим наш сервер и проверим нашу работу.

Теперь у нас есть чат-бот, который может играть с Марко Поло в чате Twitch.

Для моих копий / пастеров вот как выглядит наш index.js файл:

const tmi = require('tmi.js');
require('dotenv').config({path: __dirname + '/.env'})
const client = new tmi.Client({
  options: { debug: true },
  connection: {
    secure: true,
    reconnect: true
  },
  identity: {
    username: 'your_username',
    password: process.env.TWITCH_OAUTH_TOKEN
  },
  channels: ['channel_name']
});
client.connect();
client.on('message', (channel, tags, message, self) => {
 // This will tell the bot to ignore echoed messages.
 if(self) return;
 if(message.toLowerCase() === '!marco') {
  client.say(channel, `Polo!`);
 }
});

Следующий

В следующей статье мы объединим наше новое понимание tmi.js с внешним API, поскольку я покажу вам, как использовать Riot Developer API, чтобы вернуть ваш внутриигровой рейтинг.

Больше контента на plainenglish.io