ДИСКЛЕЙМЕР: Я не программист и не линуксоид, а лишь энтузиаст-копипастер, который делится тем, в чем смог разобраться. Поэтому, не исключено, что знающие специалисты некоторые моменты или формулировки могут счесть неправильными или нелепыми. Подача данного материала предполагает, что вы обладаете базовым уровнем знаний по nodejs, а также понимаете принцип работы и настройки конфига Nginx-Rtmp-модуля.
Сервисов, которые предоставляют ботов с оповещениями о начале стрима достаточно много. Но все они, как правило, привязаны к крупным площадкам. Twitch и Discord — самая распространенная связка. Некоторое время назад я написал гайд о том, как сделать оповещения в Telegram-канал при начале стрима на Twitch. И этого вполне достаточно, если рестримить на другие площадки вместе с Twitch: просто в теле поста указать остальные ссылки. Но что делать, если вы планируете стримить только на Boosty или VkPlayLive?
Я нашел достаточно простое решение.
Технология элементарная: когда стрим стартует, то меняется содержимое определенного файла, за которым следят боты. Изменение файла служит триггером для ботов и они постят оповещение.
В моем случае, я использую VPS на Ubuntu с установленными Nginx-rtmp-модулем (он меняет содержимое файла, когда стрим до него дотягивается) и Nodejs для ботов (с запуском через pm2). Если вы хотите это повторить на домашнем Windows, то технически, Nginx-rtmp вам не нужен. Проще будет использовать Touch Portal, Lioranboard, Streamdeck и т.д., чтобы при старте стрима редактировался файл. Как бы то ни было, с Windows разбираться у меня задачи не стояло, поэтому расскажу как это устроено у меня.
Nginx-rtmp
OBS транслирует не напрямую на Boosty, а сперва в Nginx-rtmp-сервер. Который реагирует на входящий коннект, запускает bash-скрипт для изменения отслеживаемого файла, а также «проталкивает» стрим на Boosty.
Понадобится bash-скрипт, который при активации будет добавлять в конец содержимого файла notification символ «i«:
#!/bin/bash
echo "i" >> /path/to/file/notificationВажно выдать скрипту необходимые права для запуска:
sudo chmod u+x /path/to/file/notification.shПример конфига Nginx:
rtmp {
server {
listen 1935;
application boosty {
live on;
record off;
exec publish /path/to/file/notification.sh;
push rtmp://vsu.mycdn.me/input/<stream_key>;
}
}
}Также, обратите внимание, чтобы в верхушке конфига в строке user был указан тот же самый пользователь, который создавал bash-скрипт, иначе директива exec_publish не сработает.
Вкратце, что тут происходит:
Создается application под названием boosty. Адрес, который вбивается в OBS, будет следующим: rtmp://IP.ВАШЕГО.VPS/boosty
При публикации (т.е. когда поток из OBS придет на сервер) запустится shell-команда /path/to/file/notification.sh — которая запустит bash-скрипт.
Чтобы правки применились надо перезапустить nginx.service:
sudo systemctl reload nginxТут можно отметить любопытный момент Nginx-rtmp. В директиве exec_publish можно сразу прописывать типичные команды: например, создать папку — mkdir или создать файл — touch и это работает. Но echo, printf или tee, почему-то, не исполняются. Поэтому приходится создавать bash-скрипт для этих целей.
Telegram-бот
Опущу детали того, как создать бота в Telegram и получить токен. Об этом можно прочесть здесь.
Так получилось, что я всю дорогу пользуюсь nodejs, поэтому пример будет на javascript с библиотекой telegraf:
npm i telegrafСоздается файл config.json, куда помещается токен телеграм-бота:
{
"token":"<ТОКЕН>"
}
Основной скрипт будет выглядеть примерно так:
const fs = require('fs');
const {token} = require('./config.json');
const { Telegraf } = require('telegraf');
const { message } = require('telegraf/filters');
const bot = new Telegraf(token);
fs.watchFile("/path/to/file/notification", (curr, prev) => {
console.log('File is changed!');
bot.telegram.sendMessage('@telegram_channel', 'Подруб на Boosty!');
});
bot.launch();
fs.watchFile("/path/to/file/notification" — путь к отслеживаемому файлу.bot.telegram.sendMessage('@telegram_channel', 'Подруб на Boosty!') — адрес Telegram-канала, куда будет поститься уведомление и текст сообщения.
Бота нужно обязательно добавить в администраторы канала с правом писать сообщения.
Discord

Создать бота в Discord и получить токен можно в Discord Developer Portal, создав там новое приложение.
Чтобы увидеть ID каналов/ролей/пользователей, нужно перейти в «режим разработчика»(Настройки -> Расширенные) и тогда через правый клик мыши будет доступно новое контекстное меню.
В config.json помещается токен и ID-канала, в который будет публиковаться уведомление (не забудьте боту разрешить писать сообщения, обращаться по ролям и прикреплять ссылки в этом канале):
{
"token":"DISCORD_BOT_TOKEN",
"alert_channel":"ID_CHANNEL",
"boosters_role": "ID_ROLE"
}Так получилось, что у меня Discord-бот работает на библиотеке Discordjs-12. Возможно, в более свежих версиях, синтаксис будет отличаться.
npm i discord.js-12Пример основного скрипта:
const Discord = require('discord.js-12');
const fs = require('fs');
const client = new Discord.Client({intents: ["GUILDS", "GUILD_MESSAGES", "GUILD_MEMBERS"]});
const {
token,
boosters_role,
alert_channel
} = require('./config.json');
client.once('ready', () => {
console.log("Status: Connected to discord");
});
client.on('ready', () => {
fs.watchFile("/path/to/file/notification", (curr, prev) => {
console.log(`File is changed!`);
client.channels.cache.get(alert_channel).send(`Подруб на Boosty! <@&${boosters_role}>`);
});
});Здесь, все аналогично боту Telegram.
Стоит обратить внимание, что обращение по ролям пишется вот в таком виде: `<@&${ROLE_ID}>`.
