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