首页 > 解决方案 > 如何在不暂停整个程序的情况下等待一段时间?(Discord.py 重写。)

问题描述

请原谅错误的代码,但就是这样。

我输入了我想让用户静音的时间,我让用户静音,并休眠一段时间,但是当我睡觉时我无法运行任何命令,所以我假设 sleep 会暂停整个程序,如何我要停止吗?也请不要用硬程序员的男人语言来找我,我昨天开始的,请尽可能简单XD

@client.command()
async def chatmute(ctx, user: discord.Member, *, time = 5):
    role = discord.utils.get(user.guild.roles, name="-")
    await user.add_roles(role)
    role = discord.utils.get(user.guild.roles, name="Member")
    await user.remove_roles(role)
    await ctx.send(f'User has been chat muted.')
    time.sleep(time)
    role = discord.utils.get(user.guild.roles, name="Member")
    await user.add_roles(role)
    await ctx.send(f'Your mute ran out, {user.mention}')**```

标签: pythondiscorddiscord.pywaitdiscord.py-rewrite

解决方案


使用异步函数,您可以使用该asyncio库。它用于编写并发代码。
所以,而不是使用time.sleep,你应该使用asyncio.sleep

from asyncio import sleep

@client.command()
async def chatmute(ctx, user: discord.Member, *, time = 5):
    role = discord.utils.get(user.guild.roles, name="-")
    await user.add_roles(role)
    role = discord.utils.get(user.guild.roles, name="Member")
    await user.remove_roles(role)
    await ctx.send(f'User has been chat muted.')
    sleep(time)
    role = discord.utils.get(user.guild.roles, name="Member")
    await user.add_roles(role)
    await ctx.send(f'Your mute ran out, {user.mention}')**

参考: asyncio文档


推荐阅读