Discord.py 静音命令
Discord.py mute command
所以我完成了我的静音命令,然后我在一个人身上测试了它并且它起作用了。但是当涉及到对不同的人静音时,它却没有。我让一个人静音 1 分钟,另一个人静音 10 秒。因为我先做了 1m 静音,它先做了那个静音,然后我对另一个人做了 10 秒静音。它一直等到一分钟的静音结束,然后才执行 10 秒 mute.How 我可以阻止这种情况发生吗?
这是我的代码:
@client.command()
@commands.has_role("Mod")
async def mute(ctx, user : discord.Member, duration = 0,*, unit = None):
roleobject = discord.utils.get(ctx.message.guild.roles, id=730016083871793163)
await ctx.send(f":white_check_mark: Muted {user} for {duration}{unit}")
await user.add_roles(roleobject)
if unit == "s":
wait = 1 * duration
time.sleep(wait)
elif unit == "m":
wait = 60 * duration
time.sleep(wait)
await user.remove_roles(roleobject)
await ctx.send(f":white_check_mark: {user} was unmuted")
没有错误。
您正在使用 time.sleep(wait)
,这会暂停所有其他代码,直到 wait
时间段结束。当您使用 time.sleep
时 python 不接受任何其他输入,因为它仍然 'busy' 正在睡觉。
您应该查看 coroutines 来解决这个问题。
这个 post 给出了一个很好的例子来说明您要实现的目标:I need help making a discord py temp mute command in discord py
我认为这个编辑应该有效:
#This should be at your other imports at the top of your code
import asyncio
async def mute(ctx, user : discord.Member, duration = 0,*, unit = None):
roleobject = discord.utils.get(ctx.message.guild.roles, id=730016083871793163)
await ctx.send(f":white_check_mark: Muted {user} for {duration}{unit}")
await user.add_roles(roleobject)
if unit == "s":
wait = 1 * duration
await asyncio.sleep(wait)
elif unit == "m":
wait = 60 * duration
await asyncio.sleep(wait)
await user.remove_roles(roleobject)
await ctx.send(f":white_check_mark: {user} was unmuted")
所以我完成了我的静音命令,然后我在一个人身上测试了它并且它起作用了。但是当涉及到对不同的人静音时,它却没有。我让一个人静音 1 分钟,另一个人静音 10 秒。因为我先做了 1m 静音,它先做了那个静音,然后我对另一个人做了 10 秒静音。它一直等到一分钟的静音结束,然后才执行 10 秒 mute.How 我可以阻止这种情况发生吗? 这是我的代码:
@client.command()
@commands.has_role("Mod")
async def mute(ctx, user : discord.Member, duration = 0,*, unit = None):
roleobject = discord.utils.get(ctx.message.guild.roles, id=730016083871793163)
await ctx.send(f":white_check_mark: Muted {user} for {duration}{unit}")
await user.add_roles(roleobject)
if unit == "s":
wait = 1 * duration
time.sleep(wait)
elif unit == "m":
wait = 60 * duration
time.sleep(wait)
await user.remove_roles(roleobject)
await ctx.send(f":white_check_mark: {user} was unmuted")
没有错误。
您正在使用 time.sleep(wait)
,这会暂停所有其他代码,直到 wait
时间段结束。当您使用 time.sleep
时 python 不接受任何其他输入,因为它仍然 'busy' 正在睡觉。
您应该查看 coroutines 来解决这个问题。
这个 post 给出了一个很好的例子来说明您要实现的目标:I need help making a discord py temp mute command in discord py
我认为这个编辑应该有效:
#This should be at your other imports at the top of your code
import asyncio
async def mute(ctx, user : discord.Member, duration = 0,*, unit = None):
roleobject = discord.utils.get(ctx.message.guild.roles, id=730016083871793163)
await ctx.send(f":white_check_mark: Muted {user} for {duration}{unit}")
await user.add_roles(roleobject)
if unit == "s":
wait = 1 * duration
await asyncio.sleep(wait)
elif unit == "m":
wait = 60 * duration
await asyncio.sleep(wait)
await user.remove_roles(roleobject)
await ctx.send(f":white_check_mark: {user} was unmuted")