Фоновая задача в случайных каналах Discord.py - PullRequest
0 голосов
/ 03 апреля 2019

Я пытаюсь заставить мою фоновую задачу отправлять по разным каналам, используя random.choice(). Когда я включаю бот, он отправляет только один случайный канал и только этот канал. Есть ли способ посылать по разным каналам каждый раз, когда он зацикливается?

async def test_loop():
    await client.wait_until_ready()
    channels = ['550528972226', '5149003563352', '514900351233', '5799132312340']
    channel = client.get_channel(random.choice(channels))
    while not client.is_closed:
        time = random.randint(1,5)+random.random()
        monies = random.randint(100,250)
        emojigrab = '?'
        emojimsg = await client.send_message(channel, emojigrab)
        await client.add_reaction(emojimsg, "?")
        pay = await client.wait_for_reaction(emoji="?", message=emojimsg, timeout=1800,
                                             check=lambda reaction, user: user != client.user)
        if pay:
            await client.delete_message(emojimsg)
            await client.send_message(channel, "{} secures the bag for ${:,}".format(pay.user.mention, monies))
            add_dollars(pay.user, monies)
            await asyncio.sleep(int(time))

1 Ответ

1 голос
/ 03 апреля 2019

В настоящее время channel = client.get_channel(random.choice(channels)) находится вне вашего цикла while, что означает, что переменная channel никогда не изменяется. Переместите его внутрь цикла while, чтобы изменять его каждый раз при отправке нового сообщения.

async def test_loop():
    await client.wait_until_ready()
    channels = ['550528972226', '5149003563352', '514900351233', '5799132312340']
    while not client.is_closed:
        channel = client.get_channel(random.choice(channels))
        time = random.randint(1,5)+random.random()
        monies = random.randint(100,250)
        emojigrab = '?'
        emojimsg = await client.send_message(channel, emojigrab)
        await client.add_reaction(emojimsg, "?")
        pay = await client.wait_for_reaction(emoji="?", message=emojimsg, timeout=1800,
                                             check=lambda reaction, user: user != client.user)
        if pay:
            await client.delete_message(emojimsg)
            await client.send_message(channel, "{} secures the bag for ${:,}".format(pay.user.mention, monies))
            add_dollars(pay.user, monies)
            await asyncio.sleep(int(time))
...