Alfredo Albélis
Alfredo Albélis

Reputation: 27

Multitasks in discord py bot

I'm trying to multitask with discord py, but I have a problem

Code:

@tasks.loop(seconds=10)
async def taskLoop(ctx, something):

    await ctx.send(something)

@client.command()
async def startX(ctx, something):
    
    taskLoop.start(ctx, something)

@client.command()
async def endX(ctx):
    
    taskLoop.cancel()
    taskLoop.stop()

In discord I start the command like: -startX zzzzzzzzzz
So it works, every 10 seconds the bot sends "zzzzzzzzzz"

When I try to create a new task (while the previous one is still running), for example: -startX yyyyyyyy
I get the error:
Command raised an exception: RuntimeError: Task is already launched and is not completed.

Obviously I understand it's because the other task is still working, but I looked in the documentation and couldn't find a way to create multiple tasks.

Are there any solutions for this? Thread maybe?

Upvotes: 0

Views: 1099

Answers (1)

Łukasz Kwieciński
Łukasz Kwieciński

Reputation: 15689

You can't really start the same task more than once. You can create a "task generator" which will generate and start the tasks

started_tasks = []

async def task_loop(ctx, something):  # the function that will "loop"
    await ctx.send(something)


def task_generator(ctx, something):
    t = tasks.loop(seconds=10)(task_loop)
    started_tasks.append(t)
    t.start(ctx, something)


@bot.command()
async def start(ctx, something):
    task_generator(ctx, something)


@bot.command()
async def stop(ctx):
    for t in started_tasks:
        t.cancel()

Upvotes: 2

Related Questions