Проблема с запуском (запущенный в чате бот) только каждые 5 секунд - PullRequest
1 голос
/ 12 апреля 2019

Я бы хотел, чтобы мой бот-дискордант каждые 5 секунд, основываясь на том, что я недавно что-то набрал в чате, отправлял сообщение «Ты говорил».Например, если я отправил эти сообщения (ниже) Привет (сообщение № 1 прошло одну секунду) Привет (сообщение № 2 прошло две секунды) Привет (сообщение № 3 прошло три секунды) Привет (сообщение № 4,Прошло 5 секунд) (Бот говорит): Вы говорили (имейте в виду, бот говорит это только один раз, а не 4 раза)

Однако, на данный момент, он бездействует и не отправляетСообщения.Я не получаю никаких ошибок, а сам бот работает и находится в сети.Мне было интересно, может ли кто-нибудь помочь мне отредактировать мой код, чтобы, если я что-то сказал, через 5 секунд бот сказал «Ты говорил» только один раз.Предыдущие проблемы перед этим кодом включали в себя спам ботов «Вы говорили», поэтому я хочу, чтобы он говорил «Вы говорили» только один раз.

(ниже) Я хочу, чтобы это делалось так, чтобы всякий разговорите, если прошло 5 секунд, бот скажет, что вы говорили (только один раз)

async def on_message (сообщение): if message.author.id == 'XXXXXXXXXXXXXXX':

    mins = 0 #mins standing for minutes#
    num = 0 #var for counting how many times bot has sent msg#
    if "" in message.content.lower(): #means if I say anything#
      if mins % 5 == 0: #if seconds past is divisible by 5 (meaning 5 seconds have past)
        num +=1
        if num == 1:
          msg = 'You have spoken!'
          await client.send_message(message.channel,msg)
          num -=1 #make num 0 again so bot does not repeatedly send msg#
          time.sleep(5)
          mins +=1
        if (mins % 5)>0:
          time.sleep(5)
          mins +=1 #do nothing if not divisible#

Я бы хотел, чтобы бот каждые 5 секунд, если я что-то говорил, говорил «Ты говорил» один раз.

1 Ответ

3 голосов
/ 12 апреля 2019

Каждый раз, когда бот видит сообщение, возьмите временную метку этого сообщения и сравните ее с временной меткой сообщения, на которое бот ответил последним. Если прошло более пяти секунд, запишите эту временную метку и отправьте сообщение:

from datetime import timedelta
from discord.ext.commands import Bot

bot = Bot(command_prefix="!")

last_time = None

@bot.event
async def on_message(message):
    global last_time
    if message.author == bot.user: # ignore our own messages
        return
    if message.author.id == ...:
        if last_time is None or message.created_at - last_time <= timedelta(seconds=5):
            last_time = message.created_at
            await message.channel.send("You have spoken")  # bot.send_message(message.channel, ...) on async

bot.run("TOKEN")
...