R4Bot — Discord-бот для модерации серверов и дополнительных сервисных задач. Бот использует slash-команды, работает с несколькими серверами через servers.json, поддерживает Firebase и включает игровые и служебные модули.
- Клонируйте репозиторий:
git clone https://github.com/Rarmash/R4Bot.git cd R4Bot - Установите зависимости:
pip install -r requirements.txt
- Установите FFmpeg. Он нужен для TTS и голосового воспроизведения.
- Настройте бота через
servers.jsonи.env:- шаблон переменных: .env_template
firebaseConfig.jsonнужно получить в Firebase Console черезProject Settings->Service accounts->Firebase Admin SDK->Python
- Запустите бота:
python main.py
Базовый запуск:
docker compose up --build -dКонтейнер использует:
.envfirebaseConfig.jsonservers.json
Если бот запускается на сервере, где Discord недоступен напрямую (например, из-за блокировок), можно пустить весь трафик контейнера через VPN с помощью sing-box.
-
Создайте локальный override:
cp docker-compose.override.example.yml docker-compose.override.yml
-
Создайте локальный конфиг XRay:
cp sing-box.json.example sing-box.json
-
Заполните
sing-box.jsonсвоими данными.Укажите свои параметры:
server— IP вашей XRay-нодыserver_port— порт inbound (например, 2040)uuid— ID пользователяflow— обязательно xtls-rprx-vision, если используется Realityserver_name— SNI (домен из Reality конфигурации)public_key— Reality public keyshort_id— Reality short ID
-
Запустите контейнеры:
docker compose up --build -d
Файлы docker-compose.override.yml и sing-box.json предназначены для локального использования на сервере и не должны коммититься в репозиторий. Используйте IP (172.x.x.x / реальный IP), а не host.docker.internal.
Бот поддерживает работу на нескольких серверах. Для этого нужно добавить отдельный блок настроек для каждого сервера.
{
"cogs": [
"events"
],
"server_id": {
"accent_color": "0xFFFFFF",
"log_channel": 0,
"admin_channel": 0,
"ticket_category": 0,
"suggestions_channel": 0,
"media_channel": 0,
"media_pins": 1,
"admin_id": 0,
"mod_role_id": 0,
"insider_id": 0,
"admin_role_id": 0,
"trash_channels": [],
"bannedChannels": [],
"bannedUsers": [],
"bannedCategories": [],
"bannedTTSChannels": [],
"banned_TTS_role": 0
}
}Описание полей:
cogs— список подключаемых модулейaccent_color— акцентный цвет сообщений бота в формате HEXlog_channel— канал для логирования удалённых и изменённых сообщенийadmin_channel— административный каналticket_category— категория для тикетовsuggestions_channel— канал для предложенийmedia_channel— канал для медиа-контентаmedia_pins— количество реакций, нужное для закрепления сообщенияadmin_id— Discord ID администратора ботаmod_role_id— ID роли модератораinsider_id— ID роли инсайдераadmin_role_id— ID роли администрацииtrash_channels— каналы, где не считается статистика сообщенийbannedChannels— каналы, исключённые из логированияbannedUsers— пользователи, исключённые из логированияbannedCategories— категории, исключённые из логированияbannedTTSChannels— каналы, где отключён TTSbanned_TTS_role— роль, которой запрещено использовать TTS
TOKEN= # Токен бота Discord
APPLICATIONID= # Application ID приложения из Discord Developer Portal
FORTNITEAPI= # Ключ API для Fortnite
XBOXAPI= # Ключ API для Xbox
STEAMAPI= # Ключ официального Steam Web API
DEBUGMODE=OFF # Значение debug-режима