Discord.py rewrite, настройка фоновых задач, фоновые задачи не загружаются - PullRequest
1 голос
/ 14 мая 2019

Я не могу понять, как активировать мои фоновые задачи во время выполнения.Предполагается изменить цвет роли, что успешно, если я заставлю код работать после события.Но настроить его на работу в фоновом режиме не удается.Нет ошибок, я думаю, что задача никогда не загружается.

#Login and bot initializer
@client.event
async def on_ready():
    print('Logged in as')
    print(f"Username:  {client.user.name}")
    print(f"User ID:  {client.user.id}")
    print('---------------------------------')


#Runtime Background Tasks
async def runtime_background_task():
    id=client.get_guild(564683412699480094)
    colours = [discord.Colour(0xe91e63),discord.Colour(0x0000FF0),discord.Colour(0x00FF00),discord.Colour(0xFF0000)]

    print("BACKGROUND TASK>> Functional")

    await client.wait_until_ready()
    while not client.is_closed:
        i = random.randint(0, len(colours))
        await asyncio.sleep(1)
        print(i)
        for role in id.roles:
            if role.name == 'bot':
                await role.edit(server=id, role=role, colour=colours[i])
                break

1 Ответ

0 голосов
/ 14 мая 2019

Вы можете использовать расширение discord.ext.tasks, чтобы упростить это для себя.Здесь у нас есть задача, которая выполняется каждую секунду, чтобы изменить цвет роли.

Я не видел, где вы определили id, поэтому я использую before_loop для инициализации сервера с идентификатором:

import discord
from discord.utils import get
from discord.ext.tasks import loop
from discord.ext.commands import Bot
from random import choice

bot = Bot("!")

colours = [discord.Colour(0xe91e63), discord.Colour(0x0000FF0), discord.Colour(0x00FF00), discord.Colour(0xFF0000)]

guild_id = 12345
role_name = "bot"
role_to_change = None

@loop(seconds=1)
async def colour_change():
    await role_to_change.edit(colour=choice(colours))
    print("Task")

@colour_change.before_loop
async def colour_change_before():
    global role_to_change
    await bot.wait_until_ready()
    guild = bot.get_guild(guild_id)
    role_to_change = get(guild.roles, name=role_name)

colour_change.start()
bot.run("token")
...