Бот на disnake для русскоязычного игрового сервера:
Если в консоли:
PrivilegedIntentsRequired или Websocket closed with 4014:
Вариант А — быстрый старт (рекомендуется): в .env оставьте:
ENABLE_MEMBERS_INTENT=falseБот запустится без ЛС новичкам. Выбор игр — через /games и меню в портале.
Вариант Б — ЛС при входе:
- Developer Portal → Bot → SERVER MEMBERS INTENT → включить.
- В
.env:ENABLE_MEMBERS_INTENT=true - Перезапустить
python bot.py.
- отдельная роль на каждую игру;
- отдельная категория на каждую игру (чат + голос);
- меню выбора игр при входе;
- голосовые каналы — 3 уровня доступа (кумулятивно: выше уровень = больше комнат).
| Игра | Роль | Категория |
|---|---|---|
| The Finals | 🎮 The Finals |
🏆 The Finals |
| PUBG | 🎮 PUBG |
🪖 PUBG |
| Icarus | 🎮 Icarus |
🌍 Icarus |
| Valorant | 🎮 Valorant |
🎯 Valorant |
| CS2 | 🎮 CS2 |
💣 CS2 |
| Rust | 🎮 Rust |
⚙️ Rust |
Служебные роли голоса: 🔊 · Разведчик (1), 🔊 · Отряд (2), 🔊 · Ядро (3). Модерация: 🛡️ Operator.
| Игра | Уровень для входа в ┆🔊・пати |
|---|---|
| The Finals, PUBG | 1 — Разведчик |
| Icarus, Valorant | 2 — Отряд |
| CS2, Rust | 3 — Ядро |
Уровни заданы в src/voice_tiers.py (DEFAULT_GAME_VOICE_TIER). После /deploy пересинхронизируются права на каналах.
📋・ИНФОРМАЦИЯ
├── 👋・welcome ← меню выбора игр
└── 📜・правила
🏆 The Finals 🪖 PUBG 🌍 Icarus
├── 💬・чат ├── 💬・чат ├── 💬・чат
└── 🔊・голос └── 🔊・голос └── 🔊・голос
🎯 Valorant 💣 CS2 ⚙️ Rust
├── 💬・чат ├── 💬・чат ├── 💬・чат
└── 🔊・голос └── 🔊・голос └── 🔊・голос
Категорию игры видит только тот, у кого есть соответствующая игровая роль.
| Intent | Нужен? |
|---|---|
| SERVER MEMBERS INTENT | ⚙️ Только если ENABLE_MEMBERS_INTENT=true |
| MESSAGE CONTENT INTENT | ❌ Нет |
Отметьте только эти галочки (русский интерфейс Discord → английское имя):
| № | Русский (примерно) | English | Зачем |
|---|---|---|---|
| 1 | Просматривать каналы | View Channels | Видеть каналы, работать с меню |
| 2 | Отправлять сообщения | Send Messages | Welcome, embed, ответы |
| 3 | Встраивать ссылки | Embed Links | Красивые embed-сообщения |
| 4 | Прикреплять файлы | Attach Files | На будущее / вложения |
| 5 | Читать историю сообщений | Read Message History | Читать каналы |
| 6 | Добавлять реакции | Add Reactions | Опционально для UI |
| 7 | Управлять ролями | Manage Roles | Выдавать игровые роли |
| 8 | Управлять каналами | Manage Channels | /deploy — категории и каналы |
| 9 | Подключаться | Connect | Проверка голосовых (не обязательно, но удобно) |
Не включайте «Администратор» на постоянной основе — достаточно пунктов 1–9.
Подставьте CLIENT_ID из Developer Portal → Application ID:
https://discord.com/api/oauth2/authorize?client_id=CLIENT_ID&permissions=269569104&scope=bot%20applications.commands
permissions=269569104 — это сумма прав из таблицы выше.
На время первой настройки можно пригласить с Администратором:
https://discord.com/api/oauth2/authorize?client_id=CLIENT_ID&permissions=8&scope=bot%20applications.commands
После успешного /deploy права можно урезать до таблицы выше (перепригласить бота или снять Administrator в настройках роли бота).
В Настройки сервера → Роли перетащите роль бота выше, чем:
- все
🎮 …игровые роли; 🔊 Voice Access;🛡️ Moderator.
Иначе бот не сможет выдавать роли при выборе в меню.
Токен храните только в .env (файл в .gitignore). Если токен светился в чате — Reset Token в Developer Portal.
cd e:\develop\Sbords
python -m venv .venv
.\.venv\Scripts\activate
pip install -r requirements.txt
copy .env.example .env
# В .env: DISCORD_TOKEN=...
python bot.py| Команда | Кто | Описание |
|---|---|---|
/deploy |
Администратор | Создаёт роли и каналы (без удаления старых). reset: true — полный сброс |
/setup-welcome |
Управление сервером | Публикует embed + меню (по умолчанию в ┆👋・портал) |
/games |
Все | Личное меню смены игр |
/status |
Все | Пинг, развёрнут ли сервер, число игр |
/games-list |
Все | Встроенные и кастомные игры |
/game-add |
Администратор | Добавить игру (роль + категория + чат + голос) |
/game-remove |
Администратор | Убрать кастомную игру (delete_discord — удалить в Discord) |
/channel-add |
Администратор | Доп. текстовый/голосовой канал в категории игры |
/voice-grant |
Модератор | Выдать уровень голоса 1–3 |
/voice-revoke |
Модератор | Снять уровень (или все) |
/voice-levels |
Все | Какие игры требуют какой уровень |
/refresh |
Администратор | Перечитать data/guild_*.json, перерегистрировать меню |
| Кто | Что видит / может |
|---|---|
| @everyone | Только 📋・ИНФОРМАЦИЯ (welcome, правила), без отправки |
🎮 Valorant (пример) |
Категорию 🎯 Valorant, чат и голос этой игры |
| Без роли игры | Чужие игровые категории скрыты |
| Игровая роль в голосе | Видит ┆🔊・пати, но connect = выкл |
🔊 · Разведчик (1) |
Connect в комнатах с требованием 1 |
🔊 · Отряд (2) |
Connect в комнатах 1–2 |
🔊 · Ядро (3) |
Connect во всех игровых голосовых |
🛡️ Operator |
Модерация + голос + управление каналами |
Как выдать голос: /voice-grant @участник level:2 или ПКМ → Роли → нужный уровень.
- Создать приложение и бота в Developer Portal, включить Server Members Intent.
- Пригласить бота по ссылке с правами из таблицы.
- Поднять роль бота в списке ролей.
- Запустить
python bot.py. /deploy/setup-welcome(или указать канал параметром).- Участники выбирают игры в меню /
/games. - Для голоса —
/voice-grant(уровень 1–3) или роли вручную.
Cloudflare Workers не подходят — боту нужен постоянный WebSocket к Discord, а не короткие HTTP-запросы.
| Вариант | Плюсы | Минусы |
|---|---|---|
| Домашний ПК | Бесплатно | ПК должен быть включён; настройте автозапуск python bot.py |
| Oracle Cloud Free | Бесплатный VPS навсегда | Регистрация, настройка Linux |
| Railway / Render / Fly.io | Простой деплой | Бесплатный тариф часто «засыпает» или с лимитами |
| Hetzner / Timeweb | Стабильно | Платно, но недорого |
Минимум для VPS: Python 3.11+, git clone, .env с DISCORD_TOKEN, systemd или pm2 для автоперезапуска. Боту нужен исходящий доступ к discord.com и gateway.discord.gg — прокси для YouTube/GitHub не нужны.
Пример unit для Linux (/etc/systemd/system/sbords.service):
[Unit]
Description=SBORDS Discord bot
After=network.target
[Service]
Type=simple
User=bot
WorkingDirectory=/home/bot/Sbords
EnvironmentFile=/home/bot/Sbords/.env
ExecStart=/home/bot/Sbords/.venv/bin/python bot.py
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.targetSbords/
├── bot.py
├── config.py # 6 игр по умолчанию, имена каналов
├── src/deploy.py # развёртывание, уровни голоса
├── src/voice_tiers.py # уровни 1–3 и права на каналах
├── src/games_registry.py # встроенные + custom_games из JSON
├── src/cogs/admin.py # /deploy, /setup-welcome
├── src/cogs/manage.py # /game-add, /channel-add, /refresh
├── src/cogs/games.py # /games, /status, голос
├── src/views.py # меню и embed
└── data/guild_*.json # ID ролей, custom_games, extra_channels
Повторный запуск бота не ломает меню — оно persistent, ID ролей в data/.