ДИСКЛЕЙМЕР: Я не программист и не линуксоид, а лишь энтузиаст-копипастер, который делится тем, в чем смог разобраться. Поэтому, не исключено, что знающие специалисты некоторые моменты или формулировки могут счесть неправильными или нелепыми. Подача данного материала предполагает, что вы обладаете базовым уровнем знаний по 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}>
`.