Как добавить паузу между сообщениями discord.py? - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть бот-диск, запрограммированный на python.Я хочу, чтобы бот произнес первую часть шутки, time.sleep, а затем вторую часть шутки (обе в одной переменной).Это мой код:

if message.content.startswith('!joke'):
    a = 'Can a kangaroo jump higher than a house?' + time.sleep(3) + 'Of course, a house doesn’t jump at all.'
    b = 'Anton, do you think I’m a bad mother?' + time.sleep(3) + 'My name is Paul.'
    c = 'Why can\'t cats work with a computer?' + time.sleep(3) + 'Because they get too distracted chasing the mouse around, haha!'
    d = 'My dog used to chase people on a bike a lot.' + time.sleep(3) + 'It got so bad, finally I had to take his bike away.'
    e = 'What do Italian ghosts have for dinner?' + time.sleep(3) + 'Spook-hetti!'
    msg = random.choice([a, b, c, d, e]).format(message)
    await client.send_message(message.channel, msg)

А это вывод консоли:

Ignoring exception in on_message
Traceback (most recent call last):
  File "C:\Python\Python36\lib\site-packages\discord\client.py", line 307, in _run_event
    yield from getattr(self, event)(*args, **kwargs)
  File "archie_official.py", line 138, in on_message
    a = 'Can a kangaroo jump higher than a house?' + time.sleep(3) + 'Of course, a house doesn’t jump at all.'
TypeError: must be str, not NoneType

Можете ли вы мне помочь?Спасибо.

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Вы вообще не должны использовать time.sleep, так как он плохо работает с asyncio, на котором построен discord.py.Вместо этого у нас должен быть список пар, случайным образом выбрать одну и затем использовать asyncio.sleep для паузы между сообщениями .:

jokes = [
    ('Can a kangaroo jump higher than a house?', 'Of course, a house doesn’t jump at all.'),
    ('Anton, do you think I’m a bad mother?', 'My name is Paul.'),
    ('Why can\'t cats work with a computer?', 'Because they get too distracted chasing the mouse around, haha!'),
    ('My dog used to chase people on a bike a lot.', 'It got so bad, finally I had to take his bike away.'),
    ('What do Italian ghosts have for dinner?', 'Spook-hetti!')]

setup, punchline = random.choice(jokes)
await client.send_message(message.channel, setup)
await asyncio.sleep(3)
await client.send_message(message.channel, punchline)
0 голосов
/ 18 сентября 2018

Вы все об этом ошибаетесь.

a = 'Can a kangaroo jump higher than a house?' + time.sleep(3) + 'Of course, a house doesn’t jump at all.' 

Не сработает. Причина этого в том, что вы хотите, чтобы time.sleep(3) была строкой, для каждого из которых вы бы получили (что я знаю).Нужно сделать следующее

await bot.say("Can a kangaroo jump higher than a house?")
time.sleep(3)
await bot.say('Of course, a house doesn’t jump at all.' )

Конечно, вам нужно будет сменить бота на клиента, но это в основном то, что вам нужно сделать.

Причина, по которой это не сработает: Выполнение a = "string" +func()+"string2 ; print(a)" выдаст ошибку, потому что вы рассматриваете все это как строку.

...