Боты

Классический бот для автомодерации

import discord
from discord.ext import commands
import re
import asyncio
import datetime

TOKEN = "ВСТАВЬТЕ_ВАШ_ТОКЕН_СЮДА"

intents = discord.Intents.default()
intents.message_content = True
intents.members = True

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

INVITE_PATTERN = re.compile(
    r'(?:https?://)?(?:www\.)?(?:discord\.(?:gg|com/invite|me)/|discordapp\.com/invite/)[\w-]+',
    re.IGNORECASE
)

@bot.event
async def on_ready():
    print(f'Бот запущен: {bot.user}')

@bot.event
async def on_message(message):
    if message.author == bot.user or message.author.bot:
        return

    if isinstance(message.channel, discord.DMChannel):
        return

    if INVITE_PATTERN.search(message.content):
        try:
            await message.delete()
        except discord.Forbidden:
            pass
        except discord.HTTPException:
            pass

        try:
            await message.author.timeout(
                datetime.timedelta(minutes=10),
                reason="Отправка приглашения Discord"
            )
            notification = await message.channel.send(
                f"{message.author.mention} получил мут на 10 минут за отправку приглашения."
            )
            await asyncio.sleep(10)
            await notification.delete()
        except discord.Forbidden:
            try:
                await message.channel.send(
                    f"{message.author.mention} отправил приглашение, но бот не может выдать мут."
                )
            except discord.Forbidden:
                pass
        except discord.HTTPException:
            try:
                await message.channel.send(
                    f"{message.author.mention} отправил приглашение. Не удалось выдать мут."
                )
            except discord.Forbidden:
                pass

    await bot.process_commands(message)

@bot.command(name='ban')
@commands.has_permissions(ban_members=True)
async def ban_user(ctx, member: discord.Member, *, reason="Причина не указана"):
    try:
        await member.ban(reason=reason)
        await ctx.send(f"Пользователь {member} забанен. Причина: {reason}")
    except discord.Forbidden:
        await ctx.send("У бота нет прав на бан этого пользователя.")
    except discord.HTTPException:
        await ctx.send("Произошла ошибка при попытке бана.")

bot.run(TOKEN)

Особенности этого бота:

  • Бот автоматически удаляет приглашения на любые другие дискорд сервера и выдает мьют на 10 минут нарушителям
  • Бот имеет команду бана, с автоматической проверкой прав