Пишем простого бота для Twitch на JS

Готовый код — Github

Базовая настройка

Для начала устанавливаем и подключаем модуль tmi.js в нашем ранее созданном файле app.js

npm i tmi.js --save
var tmi = require ('tmi.js');

Теперь пишем настройки подключения к серверу для tmi.

var options = {
options: {
debug: true
},
connection: {
cluster: "aws",
reconnect: true
},
identity: {
username: "your-bots-username-here",
password: "oauthtokenhere"
},
channels: ["your-channel-here"]
};

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

  • username — здесь мы указываем никнейм нашего бота
  • password — сюда вставляем OAuth token который можно получить на сайте twitchapp
  • channels — указываем название канала к которому наш бот должен подключится

Подключаем нашего бота

var client = new tmi.client(options);
client.connect();

Культура бота

Для начала давайте сделаем что-бы наш бот приветствовал каждого кто заходит к нам на канал

client.on("join", function (channel, username, self) {
client.action("your-channel-here", username + " , glad to see you!");
});

Теперь наш бот культурный — будь как наш бот.

Кто здесь?

Давайте теперь научим нашего бота различать кто написал сообщение — пользователь или админ

client.on('chat', function (channel, username, message, self) {

if(username.username === "your-channel-here"){
// Admin commands
} else {
// Users commands
}
});

Здесь мы указываем что если никнейм пользователя который написал сообщение равен названию нашего канала — значит это вы (админ). Если нет, тогда обычный пользователь.

Команды пользователя

У пользователь будут команды которые возвращают ссылки на соц.сети. Потому, много кода не нужно, так как ответы статичны.

switch (message) {
case "!fb":
client.action('your-channel-here', 'your-fb-link-here');
break;
case "!twt":
client.action('your-channel-here', 'your-twitter-link-here');
break;
default:
}

Команды админа

А для админа мы дадим возможность задавать timeout сообщений для пользователь и чистить чат.

Для начала давайте узнаем есть ли команда в сообщение админа.

function splitMessage(message) {
if ((message.indexOf('!to')) !== -1){
timeOut(message);
} else if ((message.indexOf('!clear')) !== -1){
client.clear("your-channel-here");
}
}

Тут мы написали функцию которая получает сообщение пользователя, проверяет есть ли в нем !to или !clear. Если находим !to тогда будем вызывать функцию timeout-a которую сейчас напишем. А если нашли !clear — вызываем функцию модуля tmi clear

function timeOut(message) {
splitMSG = message.split(" ");
timeoutUserName = splitMSG[1];
timeoutDuration = splitMSG[2];
client.timeout("your-channel-here", timeoutUserName, timeoutDuration);
client.action('your-channel-here', timeoutUserName + ' now u have timeout mode! Duration: ' + timeoutDuration);
}

Здесь мы разбираем сообщение используя метод split. И разбиваем нашу строку на отдельный строки. Так как команда должна получаться 2 переменные — username (никнейм жертвы) и время в секундах на сколько мы будем ставить ей таймер. Дальше мы вызываем функцию timeout с модуля tmi передавая ему названия канала, никнейм жертвы и время. И выводим сообщение для нашей жертвы, что она получила таймер.

Теперь отрываем консоль и запускаем нашего бота.

node app.js

Вот так быстро мы создали самого простого бота для Twitch. Исходники можете найти на Github.

Like what you read? Give Ivan Kucher a round of applause.

From a quick cheer to a standing ovation, clap to show how much you enjoyed this story.