Python I';我的TEMPMUTE命令有一个错误
我制作了一个tempmute代码,或者我们可以说我在stackoverflow上找到了一个。我复制了代码,但似乎不起作用。如果你们现在有人能帮我,谢谢!代码是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
@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
。如果您采用后一种方法,那么现在就需要对执行同样的操作。