python - 如何在不暂停整个程序的情况下等待一段时间?(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}')**```
解决方案
使用异步函数,您可以使用该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
文档
推荐阅读
- c# - 我需要使用 Vector3.up、Vector3.down、ecc.将 Vector3 应用于 Vector3[] 但我不能
- ios - Swfit - 检查当前时间是否在两个时间字符串之间
- python - 具有特定半径的球体的 VTK/Paraview 可编程源
- sql - Oracle View 是否计算您不想查询的字段?
- mysql - 如何有效地对超过 10M 的记录进行分页
- python - 如何将列表中的项目附加到python中的字符串上
- flutter - Flutter:无法显示警报对话框
- javascript - 计算两个字段并将结果设置在第三个
- macos - dns-sd注册被接受后没有出现在浏览中
- c++ - C++:具有许多非类型名参数的模板类