Skip to content

Скрипт для Linux, автоматически отправляющий информацию о блокировках Роскомнадзора в Discord при помощи вебхуков

License

Notifications You must be signed in to change notification settings

SHULKERPLAY/Zapretyan-Lite

Repository files navigation

Запретян <3

Readme is only available in russian

Запретян Лайт / Zapretyan Lite

CodeFactor GitHub Release GitHub code size in bytes Discord YouTube Channel Views

Вывод новых блокировок ресурсов в Российской Федерации через вебхуки в Discord!

Форк оригинальной Запретян, который обеспечит отправку новых блокировок при помощи Webhook без надобности создавать бота.

Запретян Лайт - это скрипт, работающий на Debian/Ubuntu, который собирает данные о блокировках и сравнивает их с предыдущими сохранёнными данными.

Функции

  • Сбор аналитики: Дата и количество блокировок/разбанов
  • Вывод полного списка нововведений реестра блокировок в разные чаты с разными оповещениями с помощью вебхуков. Всё зависит от вашей конфигурации
  • Рассчитан на запуск раз в сутки с помощью systemd или Cron.

Отличия от обычной версии Запретян

  • Легковесность: Всё находится в одном скрипте и занимает минимум места. Меньше зависимостей, в отличии от оригинальной версии требуется только curl и git. В момент работы может занимать не более 30МБ места, в то время как оригинальной требуется около 400МБ библиотек для поддержания бота.
  • Принцип работы: Запретян создана для работу через Discord бота и использует функционал ботов, в то время как лайт версия работает через HTTP POST запросы, без возможности поддерживать бота.
  • Данные: В стандартной конфигурации для вас не создаётся таблица с аналитикой, а сама лайт версия сверяет данные только заблокированых доменов без поддержки просмотра блокировок IP адресов.
  • Простота: В лайт версии гораздо меньше настроек которые можно поменять. Нет управления цветами и источниками данных.

Зависимости

  • Debian 11 или новее (О совместимости с Ubuntu неизвестно, только пробовать...)
  • curl
  • git

Установка

Супербыстрая установка

Вам понадобится Debian или Ubuntu с установленным wget

wget -O- 'https://raw.githubusercontent.com/SHULKERPLAY/Zapretyan-Lite/refs/heads/discord/service_install.sh' | bash

И не забудьте поменять конфигурацию в shell/config.cfg. А именно настройте опции banhook, unbanhook и errorping по своему усмотрению

Или устанавливаем сервис вручную

Скачайте архив из последнего релиза

wget -O zapretyan.tar 'https://github.com/SHULKERPLAY/Zapretyan-Lite/releases/download/1/zapretyan.tar.gz'

Или скачайте архив репозитория

wget -O zapretyan.zip 'https://github.com/SHULKERPLAY/Zapretyan-Lite/archive/refs/heads/discord.zip'

Распакуйте его

tar -xf zapretyan.tar.gz или unzip zapretyan.zip

Для автоматической настройки системного юнита и зависимостей запустите с повышенными привилегиями service_install.sh и следуйте инструкциям

sudo ./service_install.sh 

Устанавливаем зависимости

apt update && apt install git curl -y

Создаём директорию в которой будет работать запретян. И ложим туда папки shell и sender
Например

mkdir /root/zapretyan
mv shell /root/zapretyan/shell 

Далее редактируем конфигурацию. Она лежит в shell/config.cfg

nano /root/zapretyan/shell/config.cfg

В переменную shdir пишем полный путь до папки shell

shdir=/root/zapretyan/shell 

Далее вписываем вебхуки нужных каналов и сохраняем файл. Подробная инструкция по конфигу есть ниже.

Не забудьте поменять конфигурацию в shell/config.cfg. А именно настройте опции bancid, unbancid, banipcid, unbanipcid и errorping по своему усмотрению

Теперь делаем так, чтобы рассылка включалась каждый день. Главный исполнительный скрипт - shell/zapretyanlite.sh, который нужно исполнять автоматически каждый день.

  • Это можно сделать с помощью Cron (С чем я вам определённо не помогу и вам нужно будет искать гайды по крону в интернете...)

  • Или с помощью системного таймера. Рассмотрим этот вариант

Создаём системную службу

touch /etc/systemd/system/zapretyan.service  
nano /etc/systemd/system/zapretyan.service  

И записываем в неё строки ниже:

[Unit]
Description=Zapretyan Lite - Discord Webhook

[Service]
ExecStart=/bin/bash /path/zapretyan/zapretyanlite.sh

Где вместо /path/zapretyan/zapretyanlite.sh вы должны вписать путь к вашему расположению скрипта

Нам не нужно устанавливать это как службу, поэтому просто сохраняем файл.

Создаём системный таймер. Именно он будет запускаться с системой и триггерить каждый день сервис написанный нами выше

touch /etc/systemd/system/zapretyan.timer  
nano /etc/systemd/system/zapretyan.timer  

И вписываем эти строки

[Unit]
Description=Trigger for Zapretyan Discord Webhook

[Timer]
Persistent=true
OnCalendar=Mon..Sun *-*-* 08:00:00

[Install]
WantedBy=timers.target

Где время меняем на собственное или оставляем это. По стандарту наша служба запускается раз в день в 08:00:00

Устанавливаем таймер

systemctl enable zapretyan.timer  
systemctl start zapretyan.timer  

Поздравляем! У вас есть рабочая служба

Остановить её можно с помощью systemctl disable zapretyan.timer
Если вы захотите редактировать время в которое запускается скрипт, поменяйте значение в таймере и напишите:

systemctl daemon-reload  

Аналогичным способом можно создавать и другие системные сервисы, просто меняя имя службы и путь к скрипту

Что такое вебхук?

Вебхук Discord — это уникальный URL-адрес, который позволяет автоматически отправлять сообщения в определенный канал сервера без участия бота. Каждый URL привязывается к чату, в который запретян отсылает списки. Именно поэтому, желательно, для блокировок и разбанов нужно два отдельных чата, соответственно и два вебхука.

Создать вебхук можно в настройках Discord сервера в разделе "интеграции"

Конфигурация

Описание shell/config.cfg

shdir=/example/shell - Путь к папке shell этого скрипта. Скрипт исполняет все команды по распаковке и сравнению с полными путями. При автоматической установки эта строчка перезаписывается значением в конце файла

banhook=("https://discord.com/api/webhooks/")
unbanhook=("https://discord.com/api/webhooks/")

banhook - Ссылка из созданного вебхука Discord в который будут выводиться все новые блокировки с прошлого сравнения

unbanhook - Ссылка из созданного вебхука Discord в который будут выводиться все снятые блокировки с прошлого сравнения

Для рассылки в несколько чатов (вебхуков) Файл конфигурации будет выглядеть так:

bancid=("https://discord.com/api/webhooks/000000000000000000" "https://discord.com/api/webhooks/111111111111111111")
unbancid=("https://discord.com/api/webhooks/00000000000000000" "https://discord.com/api/webhooks/111111111111111111")

При этом вы можете указать таким образом несколько вебхуков, и их количество может быть разное для каждой категории

bancid=("https://discord.com/api/webhooks/00000" "https://discord.com/api/webhooks/11111" "https://discord.com/api/webhooks/22222")
unbancid=("https://discord.com/api/webhooks/00000" "https://discord.com/api/webhooks/11111")

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

botname='Запретян~<3'
boticon='https://example.com/awesome.webp'

botname - Никнейм, который будет отображаться у отправителя сообщений

boticon - Прямая ссылка на изображение аватара отправителя. Должна быть прямая ссылка на картинку, которая желательно должна быть квадратной. Также отображается в футере встроенных сообщений

isban=true
isunban=true

isban - отключает любые отправки в вебхук banhook

isunban - отключает любые отправки в вебхук unbanhook

errorsend=true - Переключатель вывода сервисных сообщений, например, когда с прошлого дня не произошло никаких изменений

📙 В сегодняшнем списке нет новых заблокированых ресурсов! $errorping

analytics=false - Переключатель сбора аналитики. Она не выгружается в сеть, собирает в таблицу данные: Дата, кол-во блокировок, кол-во разбанов, всего заблокировано. Сохраняется в shell/analytics.csv

errorping='<@&000000000000000>' - Содержит пинг участника или роли при выводе сервисных сообщений. Оставьте errorping=' ' чтобы отключить упоминания. У Discord пинги имеют форму:

Для пользователей - <@idПользователя>

Для ролей - <@&idРоли>

Также вы можете оставить несколько пингов в это значение errorping='<@459657842895486977> <@&683823927851614242>'

📙 В сегодняшнем списке нет новых заблокированых ресурсов! @Шалкер~<3 @Разработчик

qdate=$(date +%d/%m/%y) - Системная команда Linux собирающая дату в форме 08/08/25 Отображается в шапке первого встроенного сообщения со списком. Не вижу сценариев в которых это нужно было бы менять.

В СПИСОК ОГРАНИЧЕННЫХ РЕСУРСОВ СЕГОДНЯ ПОПАЛИ: 08/08/25

csvdate=$(date +%d.%m.%Y) - Системная команда Linux собирающая дату в форме 28.06.2025 Выводится в первом столбце таблицы shell/analytics.csv. Не вижу сценариев в которых это нужно было бы менять.

date;banned;unbanned;total
21.05.2025 ; 1667 ; 118 ; 831954
22.05.2025 ; 1772 ; 95 ; 833631
23.05.2025 ; 1573 ; 47 ; 835157

Смена цвета встроенных сообщений и текста

В Lite концепции не предусмотрено изменение цвета через конфигурацию, поэтому нужно менять цвет внутри скрипта

Ищем часть из строчки (Таких две похожих: Для банов и для разбанов)

"content": " ","embeds": [{"title": "Заблокированые сегодня домены","description": "'"$embedlist"'","color": 16753314, .... }]

Это строка данных которые отправляются в вебхук. Чтобы выбрать другой цвет, нужно изменить значение параметра "color":. Сюда принимается почти любой цвет, но не в HEX а в DEC формате. Вы можете выбрать из онлайн палитр HEX код цвета и его код вбить в конвертер шеснадцатиричных чисел в десятичные (Можно просто загуглить hex to decimal). Так, чтобы сделать чистый белый цвет, код которого FFFFFF мы вводим "color": 16777215, и сохраняем.

Для смены текстовой части вы можете пробежаться по всему скрипту и поменять текст сообщений в кавычках под себя.

Известные недочёты

  • Скрипт не будет отправлять сообщения в Discord на территории РФ. Тут тоже ничего не сделать, РКН блокирует запросы к API Discord, вы просто будете ловить тайм-аут. Поэтому машина должна быть вне РФ

Буду рад любой поддержке, связаться со мной можно на нашем сервере Discord

About

Скрипт для Linux, автоматически отправляющий информацию о блокировках Роскомнадзора в Discord при помощи вебхуков

Topics

Resources

License

Stars

Watchers

Forks

Languages