Найти в Дзене

«Discord‑бот для сервера: уведомления о входе/выходе, анонсы ивентов».

Разберём создание Discord‑бота для игрового сервера с функциями уведомлений о входе/выходе игроков и анонсов ивентов. Приведём полный код на Python с библиотекой discord.py. bash pip install discord.py python-dotenv bot/
├── config.py
├── events.py
├── notifications.py
└── main.py 1. config.py — настройки и токен: python import os
from dotenv import load_dotenv
load_dotenv()
TOKEN = os.getenv("DISCORD_TOKEN")
WELCOME_CHANNEL_ID = 123456789012345678 # ID канала для уведомлений
ANNOUNCEMENTS_CHANNEL_ID = 987654321098765432 # ID канала для анонсов 2. notifications.py — обработка входа/выхода: python from discord.ext import commands
from config import WELCOME_CHANNEL_ID
class Notifications(commands.Cog):
def __init__(self, bot):
self.bot = bot
@commands.Cog.listener()
async def on_member_join(self, member):
channel = self.bot.get_channel(WELCOME_CHANNEL_ID)
if channel:
embed = discord.Embed(
title="Добро пожаловать!",
Оглавление

Discord‑бот для сервера: уведомления о входе/выходе, анонсы ивентов

Разберём создание Discord‑бота для игрового сервера с функциями уведомлений о входе/выходе игроков и анонсов ивентов. Приведём полный код на Python с библиотекой discord.py.

Шаг 1. Подготовка и настройка бота

  1. Перейдите на .
  2. Создайте новое приложение → New Application.
  3. В разделе Bot создайте бота и скопируйте Token.
  4. Настройте права бота (для уведомлений нужны: Send Messages, Read Message History, Manage Webhooks).
  5. Сгенерируйте ссылку‑приглашение через OAuth2 URL Generator (выберите права и сервер).

Шаг 2. Установка зависимостей

bash

pip install discord.py python-dotenv

Шаг 3. Структура проекта

bot/
├── config.py
├── events.py
├── notifications.py
└── main.py

Шаг 4. Код бота

1. config.py — настройки и токен:

python

import os
from dotenv import load_dotenv

load_dotenv()

TOKEN = os.getenv("DISCORD_TOKEN")
WELCOME_CHANNEL_ID = 123456789012345678 # ID канала для уведомлений
ANNOUNCEMENTS_CHANNEL_ID = 987654321098765432 # ID канала для анонсов

2. notifications.py — обработка входа/выхода:

python

from discord.ext import commands
from config import WELCOME_CHANNEL_ID

class Notifications(commands.Cog):
def __init__(self, bot):
self.bot = bot

@commands.Cog.listener()
async def on_member_join(self, member):
channel = self.bot.get_channel(WELCOME_CHANNEL_ID)
if channel:
embed = discord.Embed(
title="Добро пожаловать!",
description=f"{member.mention} присоединился к серверу!",
color=0x00ff00
)
await channel.send(embed=embed)

@commands.Cog.listener()
async def on_member_remove(self, member):
channel = self.bot.get_channel(WELCOME_CHANNEL_ID)
if channel:
embed = discord.Embed(
title="Прощание",
description=f"{member.display_name} покинул сервер.",
color=0xff0000
)
await channel.send(embed=embed)

async def setup(bot):
await bot.add_cog(Notifications(bot))

3. events.py — анонсы ивентов:

python

from discord.ext import commands, tasks
from datetime import datetime

class Events(commands.Cog):
def __init__(self, bot):
self.bot = bot
self.event_scheduler.start()

@tasks.loop(hours=1)
async def event_scheduler(self):
now = datetime.utcnow()
# Здесь логика проверки ближайших ивентов (из БД/конфига)
upcoming_events = [
{"name": "Рейд на Дракона", "time": now + timedelta(hours=2)}
]
for event in upcoming_events:
if now + timedelta(minutes=30) >= event["time"] > now:
channel = self.bot.get_channel(ANNOUNCEMENTS_CHANNEL_ID)
if channel:
embed = discord.Embed(
title="Анонс ивента!",
description=f"Скоро: **{event['name']}**\nНачало через 30 минут!",
color=0xffa500,
timestamp=datetime.utcnow()
)
await channel.send("@everyone", embed=embed)

@commands.command(name="event")
async def create_event(self, ctx, name: str, time_str: str):
"""Создание ивента через команду"""
try:
event_time = datetime.strptime(time_str, "%Y-%m-%d %H:%M")
# Сохраняем в БД/файл
await ctx.send(f"Ивент **«{name}»** запланирован на {event_time}.")
except ValueError:
await ctx.send("Неверный формат времени. Используйте: ГГГГ‑ММ‑ДД ЧЧ:ММ")

async def setup(bot):
await bot.add_cog(Events(bot))

4. main.py — главный файл:

python

import discord
from discord.ext import commands
from config import TOKEN
import asyncio

intents = discord.Intents.default()
intents.members = True # Для отслеживания входа/выхода

bot = commands.Bot(command_prefix="!", intents=intents)

@bot.event
async def on_ready():
print(f"Бот {bot.user} запущен!")
await bot.load_extension("notifications")
await bot.load_extension("events")

if __name__ == "__main__":
bot.run(TOKEN)

Шаг 5. Запуск бота

  1. Создайте файл .env в корне проекта:

env

DISCORD_TOKEN=ваш_токен_бота

  1. Запустите бота:

bash

python main.py

Настройка и использование

Команды бота:

  • !event <название> <дата и время> — создать анонс ивента. Формат времени: ГГГГ‑ММ‑ДД ЧЧ:ММ.
  • Автоматические уведомления:
    при входе игрока — сообщение в канале WELCOME_CHANNEL_ID;
    за 30 минут до ивента — анонс в канале ANNOUNCEMENTS_CHANNEL_ID с упоминанием @everyone.

Настройка каналов:

  1. Замените WELCOME_CHANNEL_ID и ANNOUNCEMENTS_CHANNEL_ID на реальные ID каналов вашего сервера.
  2. Убедитесь, что у бота есть права на отправку сообщений в этих каналах.

Дополнительные возможности

  1. Интеграция с игровым сервером:
    используйте вебхуки для передачи данных о входе/выходе из TFS в Discord;
    настройте скрипт на сервере, который отправляет POST‑запрос на URL вебхука Discord при событии.
  2. Расширение функционала:
    команда !events — список ближайших ивентов;
    реакция «✅» на анонсе для регистрации участников;
    напоминание за 5 минут до старта ивента.
  3. Улучшение дизайна:
    добавьте миниатюры в embed‑сообщения (set_thumbnail(url=...));
    используйте разные цвета для типов уведомлений (зелёный — вход, красный — выход, оранжевый — ивент).

Устранение неполадок

Проблема: бот не реагирует на команды.

  • Решение: проверьте права бота, правильность префикса (!), логи консоли.

Проблема: нет уведомлений о входе/выходе.

  • Решение: включите Intents.members в настройках бота и на сервере (в Discord Developer Portal → Bot → Server Members Intent).

Проблема: ошибки импорта модулей.

  • Решение: убедитесь, что все файлы находятся в одной директории, а имена модулей указаны верно в bot.load_extension().

Заключение

Созданный бот:

  • автоматически уведомляет о входе/выходе игроков;
  • анонсирует ивенты за 30 минут;
  • позволяет создавать ивенты через команду !event;
  • легко расширяется для интеграции с игровым сервером.

Хотите, помогу адаптировать код под ваш игровой сервер (например, добавить синхронизацию с TFS) или добавлю другие функции?