Когда python компилирует ваш код, он выполняет весь скрипт один раз, поэтому ваш
while bt2=='True':
bot.loop.create_task(background_task_2())
запускается и, поскольку bt2='False'
в начале, он не будет запускать цикл while.
Что вы хотите сделать вместо этого, если что-то вроде этого
global bt2
bt2='False'
purging_task = None
bot = commands.Bot(command_prefix=!)
@bot.command(pass_context=True)
async def autopurge(ctx,time):
global bt2, bt2_time, bt2_chid,purging_task
bt2='True'
if int(time)==0:
purging_task.cancel()
elif not(purging_task):
bt2_time=int(time)
bt2_chid=ctx.message.channel.id
purging_task = bot.loop.create_task(background_task_2())
async def background_task_2():
global bt2, bt2_time, bt2_chid
while True:
print(bt2, bt2_time, bt2_chid)
async for msg in bot.logs_from(bot.get_channel(bt2_chid),limit=5):
await bot.delete_message(msg)
await asyncio.sleep(bt2_time)
Где бы вы запускали задачу, когда вы хотите запустить и иметь цикл while внутри этой задачи, и когда вы хотите закрыть ее, просто запустите Task.cancel()
Также
async for msg in bot.logs_from(bt2_chid):
await bot.delete_message(msg)
не работает, поскольку bot.logs_from принимает канал в качестве аргумента, а не его идентификатор