@wesqyy

Как сделать анти флуд по комманде пример: !antispam on / off?

Хочу сделать для бота анти флуд не знаю как но хочу !antispam on ( включалось ) !antispam off выключалось
  • Вопрос задан
  • 186 просмотров
Пригласить эксперта
Ответы на вопрос 2
Zagir-vip
@Zagir-vip
Web dev, Game dev, app dev, Разработчик на Python!
Для создания анти-спама в Discord боте на Python можно использовать следующий код:

import discord
from discord.ext import commands

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

# Создаем словарь для хранения количества сообщений пользователя
message_count = {}

# Задаем лимит сообщений за определенный промежуток времени
SPAM_LIMIT = 5
SPAM_TIME = 10

@bot.event
async def on_message(message):
    # Проверяем, что сообщение отправлено в текстовый канал
    if isinstance(message.channel, discord.TextChannel):
        # Проверяем, что отправитель не является ботом
        if not message.author.bot:
            # Проверяем, что отправитель не находится в списке администраторов
            if message.author not in bot.get_guild(message.guild.id).get_role(ADMIN_ROLE_ID).members:
                # Получаем количество сообщений пользователя за последний SPAM_TIME секунд
                if message.author.id in message_count:
                    message_count[message.author.id] += 1
                else:
                    message_count[message.author.id] = 1
                
                # Если количество сообщений превышает SPAM_LIMIT, то удаляем сообщение и отправляем предупреждение
                if message_count[message.author.id] > SPAM_LIMIT:
                    await message.delete()
                    await message.author.send(f'Вы были заблокированы на {SPAM_TIME} секунд за спам')
                    await message.author.add_roles(bot.get_guild(message.guild.id).get_role(MUTED_ROLE_ID))
                    await asyncio.sleep(SPAM_TIME)
                    await message.author.remove_roles(bot.get_guild(message.guild.id).get_role(MUTED_ROLE_ID))
                    message_count[message.author.id] = 0

    await bot.process_commands(message)


В этом коде мы создаем словарь message_count, который хранит количество сообщений каждого пользователя. Затем мы задаем лимит сообщений за определенный промежуток времени (5 сообщений за 10 секунд). В функции on_message мы проверяем, что сообщение отправлено в текстовый канал, что отправитель не является ботом и не находится в списке администраторов. Затем мы получаем количество сообщений пользователя за последний промежуток времени и если оно превышает лимит, то удаляем сообщение, отправляем предупреждение и блокируем пользователя на SPAM_TIME секунд. После этого мы удаляем блокировку и сбрасываем количество сообщений пользователя до 0.

Обратите внимание, что для работы этого кода необходимо задать значения для констант ADMIN_ROLE_ID и MUTED_ROLE_ID, которые соответствуют ID ролей администратора и заблокированного пользователя на вашем сервере Discord.
Ответ написан
fenrir1121
@fenrir1121
Начни с документации
Загир Меджидов надеюсь это chatGPT. Если нет внимательно поищите SPAM_TIME в вашем коде.

Coding No на вопрос
не знаю как ...
отвечает гугл. Если вы используете тег Python потрудитесь представить вашу попытку решения.
В дискорде существует slow-mode, который можно выставить на любое время и дать ролям иммунитет к нему.
Все кто без иммунитета смогут писать 1 сообщение в X секунд. Если передать 0 - отключается.
Выставляется одной строчкой кода
async def setdelay(ctx, seconds: int):
    await ctx.channel.edit(slowmode_delay=seconds)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы