如何在 discord.py 中设置暂停的原因和持续时间?

How can I set a reason and a duration for a suspension in discord.py?

我有一个有效的暂停命令,但不能让机器人重复原因和持续时间,然后删除触发器。我也不知道如何让机器人在暂停时间后自动解除角色。这是我的代码:

@bot.command(pass_ctx=True)
@commands.has_any_role('✪ Commissioner ✪', '✪ Vice Commissioner ✪', '✪ Board of Directors ✪')
async def suspend(ctx, *, member:discord.Member):
 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.')]
 await ctx.send(embed=embed)
 await member.add_roles(role)

一种方法是使用 asyncio 模块。您可以将当前代码替换为:

import asyncio

@bot.command(pass_ctx=True)
@commands.has_any_role('✪ Commissioner ✪', '✪ Vice Commissioner ✪', '✪ Board of Directors ✪')
async def suspend(ctx, time, *, member:discord.Member):
    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.')]

    await ctx.send(embed=embed)
    await member.add_roles(role)

    # Using asyncio module to wait
    await asycio.sleep(time)
    await member.remove_roles(role)

你会使用这样的命令:[prefix]suspend({time}, {member})

--编辑--

我注意到您没有定义 role 变量。你可以这样做:

role = ctx.guild.get_role(roleID)

现在,您的命令应该如下所示:

@bot.command(pass_ctx=True)
@commands.has_any_role('✪ Commissioner ✪', '✪ Vice Commissioner ✪', '✪ Board of Directors ✪')
async def suspend(ctx, time, *, member:discord.Member):
    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.')]
    
    # Defile the "role" variable
    role = ctx.guild.get_role(roleID)

    await ctx.send(embed=embed)
    await member.add_roles(role)

    # Using asyncio module to wait
    await asycio.sleep(time)
    await member.remove_roles(role)