Как посчитать интервал между двумя сообщениями pycord

Рейтинг: 0Ответов: 1Опубликовано: 01.08.2023

Делаю бота дс который будет выдавать опыт (систему опыта и бд уже сделал) за сообщение. Хочу сделать проверку чтобы люди специально не спамили и не получали опыт, что я имею в виду: Человек отправляет сообщение, ему выдали 10-50 опыта, а потом бот должен заснуть на 10сек(чтобы он не принимал сообщений), а потом проснуться и так циклично.

asyncio.sleep(10) и time.sleep(10) не помогают. Использую:

Pycord dev(pycord development)

Python3.11

Ответы

▲ 0Принят

Можно просто запоминать дату и время (datetime) последнего сообщения от каждого пользователя и затем смотреть разницу во времени с новыми сообщениями, приходящими в обработчик on_message

Например, так:

from datetime import datetime
import discord

bot = discord.Client(intents=discord.Intents.all())

user_last_message_dict = {}

@bot.event
async def on_message(message: discord.Message):
    # если даты последнего сообщения от такого пользователя еще нет, то добавляем
    if message.author.id not in user_last_message_dict:
        user_last_message_dict[message.author.id] = datetime.now()

    # если с последнего сообщения от пользователя прошло 10 секунд
    if (datetime.now() - user_last_message_dict[message.author.id]).seconds >= 10:
        . . . # здесь выдача опыта и т.п.

    # запоминаем дату последнего сообщения от этого пользователя
    user_last_message_dict[message.author.id] = datetime.now()

bot.run(TOKEN)