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

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

Пример кода для бота на 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. Даже из его названия очевидно, что он работает на каждое сообщение.

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

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

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