Как создать систему напоминаний в discord.py (disnake) с ограничением на количество отправляемых напоминаний, чтобы предотвратить возможный спам?

Как можно настроить бота так, чтобы он предоставлял только одно напоминание через 1 минуту после отправки сообщения в чат, избегая при этом спама напоминаниями при множестве сообщений? Код бота основан на использовании ивента `on_message`.
  • 27 июня 2024 г. 21:12
Ответы на вопрос 2
Для создания системы напоминаний с ограничением на количество отправляемых напоминаний можно использовать словарь для хранения информации о пользовательских напоминаниях и количестве уже отправленных напоминаний. 

Пример кода для бота на discord.py (disnake):

```python
import discord
from discord.ext import commands, tasks

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

reminders = {}

@bot.event
async def on_message(message):
    author = message.author
    if author.id in reminders and reminders[author.id] >= 1:
        await message.channel.send("У вас слишком много напоминаний. Пожалуйста, дождитесь отправки старого напоминания перед отправкой нового.")
    else:
        reminders[author.id] = reminders.get(author.id, 0) + 1
        await message.channel.send("Напоминание: " + message.content)

        async def reset_reminders():
            reminders[author.id] = max(0, (reminders.get(author.id, 0) - 1))

        await asyncio.sleep(60)
        reset_reminders.start()

    await bot.process_commands(message)

bot.run("TOKEN")
```

Этот код позволяет боту отправлять только одно напоминание через 1 минуту после отправки сообщения в чат. Если пользователь пытается отправить больше одного напоминания за раз, бот сообщит об этом и предотвратит спам.

Пожалуйста, не забудьте заменить `"TOKEN"` на токен вашего бота discord.
Всем привет, перепробовал несколько вариантов, но показать их не могу.
У нас есть несколько вариантов ответа, но показать их не можем.

Использую ивент on_message
Не использовать on_message. Даже из его названия очевидно, что он работает на каждое сообщение.

Переписать всю логику на команду, вместо чтения всех сообщений, обрабатывать только их.
Похожие вопросы