Для создания анти-спама в 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.