@Avdosy

Как отключить выполнение кода на определённое время после его выполнения?

Всех приветствую. Осваиваю python и параллельно пытаюсь написать бота для дискорда. Столкнулся со следующей проблемой. Необходимо после выполнения кода отключить повторное выполнение данного кода, ибо если в чате дискорда написать в одном сообщение одно и тоже слово из списка (к примеру "вайп вайп вайп вайп вайп вайп вайп вайп вайп вайп вайп вайп вайп вайп), бот пытается ответить на каждое слово и получается спам.
Грубо говоря, как избежать спама? Дабы бот ответил на сообщение и к примеру втечении 60 секунд игнорировал слова из переменной wipe_triger
Заранее извиняюсь, если написано дибильным языком. Я пока что учусь. Заранее благодарен

wipe_triger = ['вайп']

@bot.event
async def on_message(message):
    if message.author == bot.user: return 
    if int(message.channel.id) != 000000000000000: return
    for content in message.content.split():
        for wipe_messages in wipe_triger:
            if content.lower() == wipe_messages:
                await message.channel.send(f'{message.author.mention} - текст!')
  • Вопрос задан
  • 101 просмотр
Решения вопроса 1
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Все просто. Сначала посчитайте количество стоп-слов, а уж затем посылайте одно сообщение по всем стоп-словам.
Как-то так (не отлажено)
wipe_triger = ['вайп']

@bot.event
async def on_message(message):
    if message.author == bot.user: return 
    if int(message.channel.id) != 000000000000000: return
    stop_words = 0
    for word in message.content.split():
        if word.lower() in wipe_triger:  # вместо цикла - IF
#            if content.lower() == wipe_messages:    # нафиг не нужно
                stop_words += 1 # считаем стоп-слова
    if stop_words > 0: # если пользователь флудит
       await message.channel.send(f'{message.author.mention} - текст!') # посытаем ему 'одно' сообщение
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
imkkervl
@imkkervl
Здравствуйте. Если я Вас правильно понял, то можно использовать кулдаун.

Есть специальный декоратор, который вешает кулдаун на команду

@commands.cooldown(1, 30, commands.BucketType.user)


1 - кол-во использований команды
30 - время в секундах, через сколько можно использовать команду еще раз
commands.BucketType.user - ограничение для пользователя

Когда кулдаун тригерится, он вызывает on_command_error
И уже через ивент вы можете реализовать отправку сообщения о кулдауне.
Ответ написан
Ваш ответ на вопрос

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

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