首页 > 解决方案 > 这种语法会正确取消暂停成员吗?

问题描述

我正在尝试发出暂停命令,但不确定在时间结束后它是否会正确取消暂停。我想在前缀后使用 1m/30s/5h/2d 挂起,但它不会取消挂起。我不确定我是否等待了足够长的时间,但是它没有响应或产生错误。

@bot.command()
@commands.has_any_role('✪ Commissioner ✪', '✪ Vice Commissioner ✪', '✪ Board of Directors ✪')
async def suspend(ctx, member:discord.Member, time, *, reason):
    guild = bot.get_guild(766292887914151949)
    role_name = 'Suspended'
    role = discord.utils.get(guild.roles, name='Suspended')
    embed = discord.Embed(colour = discord.Colour.red())
 
    embed.add_field(name='<a:CheckMark:768095274949935146> **Success!**', value=f'{member.mention} has been successfully suspended for {time} for {reason}')
    
    # Defile the "role" variable
    role = ctx.guild.get_role(766647041483866132)

    await ctx.send(embed=embed)
    await member.add_roles(role)
    await bot.delete_message(ctx.message)
    # Using asyncio module to wait
    expired = await asyncio.sleep(time)
    await member.remove_roles(role)
    thing = discord.Embed(name='<a:CheckMark:768095274949935146> Suspension Expired', value=f"{member.mention}'s suspension is over.")
    await expired.send(embed=thing)

标签: pythonpython-3.xdiscorddiscord.pydiscord.py-rewrite

解决方案


你的问题在这里:

expired = await asyncio.sleep(time)
await member.remove_roles(role)
thing = discord.Embed(name='<a:CheckMark:768095274949935146> Suspension Expired', value=f"{member.mention}'s suspension is over.")
await expired.send(embed=thing) # expired isn't a messageable...

# -------------------------------------------------------------
# To fix this, you can use ctx.send instead.

expired = await asyncio.sleep(time)
await member.remove_roles(role)
thing = discord.Embed(name='<a:CheckMark:768095274949935146> Suspension Expired', value=f"{member.mention}'s suspension is over.")
await ctx.send(embed=thing)

推荐阅读