Python I';我的TEMPMUTE命令有一个错误

Python I';我的TEMPMUTE命令有一个错误,python,discord.py,Python,Discord.py,我制作了一个tempmute代码,或者我们可以说我在stackoverflow上找到了一个。我复制了代码,但似乎不起作用。如果你们现在有人能帮我,谢谢!代码是 @commands.has_permissions(kick_members=True) async def tempmute(ctx, member: discord.Member, time=0, reason=None): if not member or time == 0: return elif

我制作了一个tempmute代码,或者我们可以说我在stackoverflow上找到了一个。我复制了代码,但似乎不起作用。如果你们现在有人能帮我,谢谢!代码是

@commands.has_permissions(kick_members=True)
async def tempmute(ctx, member: discord.Member, time=0, reason=None):
    if not member or time == 0:
        return
    elif reason == None:
        reason = 'No reason'
    try:
        if time_list[2] == "s":
            time_in_s = int(time_list[1])
        if time_list[2] == "min":
            time_in_s = int(time_list[1]) * 60
        if time_list[2] == "h":
            time_in_s = int(time_list[1]) * 60 * 60
        if time_list[2] == "d":
            time_in_s = int(time_list[1]) * 60 * 60 * 60
    except:
        time_in_s = 0
 
    tempmuteembed = discord.Embed(colour=discord.Colour.from_rgb(0, 255, 0))
    tempmuteembed.set_author(icon_url=member.avatar_url, name=f'{member} has been tempmuted!')
    tempmuteembed.set_footer(text=f"{ctx.guild.name}  •  {datetime.strftime(datetime.now(), '%d.%m.%Y at %I:%M %p')}")
    tempmuteembed.add_field(name=f'ID:', value=f'{member.id}', inline=False)
    tempmuteembed.add_field(name='Reason:', value=f"{reason}")
    tempmuteembed.add_field(name='Duration:', value=f"{time}")
    tempmuteembed.add_field(name=f'By:', value=f'{ctx.author.name}#{ctx.author.discriminator}', inline=False)
    await ctx.send(embed=tempmuteembed)

 
    guild = ctx.guild
    for role in guild.roles:
        if role.name == 'Muted':
            await member.add_roles(role)
            await ctx.send(embed=tempmuteembed)
            await asyncio.sleep(time_in_s)
            await member.remove_roles(role)
            return
我得到的错误如下:

discord.ext.commands.errors.BadArgument: Converting to "int" failed for parameter "time".

这是因为
命令
s具有在其参数上运行的。由于
time
默认为
0
,类型为
int
,因此库尝试将
time
转换为
int
。但是,如果您给出像
10m
这样的单位后缀,则此转换将失败,因为
int('10m')
会以
ValueError
失败,这反过来会引发
BadArgument

要解决此问题,只需向
time
参数添加适当的类型注释:

from typing import Union
async def tempmute(ctx, member: discord.Member, time: Union[int, str] = 0, reason=None):

您在聊天中键入什么来调用该命令?*tempmute@user 10m Test
Member
对象在转换为字符串时将返回
Name#Discriminator
,因此您可以将
f'{ctx.author.Name}{ctx.author.Discriminator}
更改为
f'{ctx.author}
str(ctx.author)
。现在我在
tempmuteembed.set_footer(text=f“{ctx.guild.name}•{datetime.strftime(datetime.now(),“%d.%m.%Y在%i:%m%p'))部分上得到了名为
模块'datetime'的错误。
@ZeroKnight@wakandaᵗᶰᶜ 请注意,该错误提到模块“datetime”。您试图调用的是
datetime
模块上的
strftime
,而不是类。将
datetime
导入更改为
从datetime导入datetime
,或使用
datetime.datetime.strftime
。如果您采用后一种方法,那么现在就需要对
执行同样的操作。