![](/img/trans.png)
[英]If I do {member.mention} twice will it mention two different users in my message?
[英]How to clear if I have member.mention?
@bot.command()
@commands.has_permissions(manage_messages=True)
async def clear(ctx,member : discord.Member,amount=200):
await ctx.channel.purge(limit=amount)
if amount > 200:
await ctx.send(f"{member.mention}merci de clear entre 0-200 message(s)")
else:
await ctx.send(f"j'ai clear {amount} message(s)",delete_after=5)```
错误:
File "C:\Users\dzzdz\PycharmProjects\pythonProject12\venv\lib\site-packages\discord\ext\commands\core.py", line 451, in _actual_conversion
ret = await instance.convert(ctx, argument)
File "C:\Users\dzdz\PycharmProjects\pythonProject12\venv\lib\site-packages\discord\ext\commands\converter.py", line 195, in convert
raise MemberNotFound(argument) discord.ext.commands.errors.MemberNotFound: Member "300" not found.
在这个错误中,我们可以看到该命令只有在我 do.clear @(amount) 时才有效。
如果我删除 discord.member 它正在工作。 我无法删除 discord.member ,因为在默认参数之前不能有可选参数。
那么我能做什么呢?
以下是我注意到的一些错误:
首先)由于您正在寻找消息的作者,因此member
在这里根本不相关。 我们可以简单地为此使用ctx.author
,然后根据需要显示它。
其次)您的代码中有逻辑错误。 您的if amount >200
语句不被视为您的代码的方式,然后可以删除超过 200 条消息而不会显示错误消息。
一种可能的代码是:
@client.command() / @bot.command() / @commands.command() # Depends on what you use
@commands.has_permissions(manage_messages=True)
async def clear(ctx, amount=200):
if amount > 200:
await ctx.send(f"{ctx.author.mention} merci de clear entre 0-200 message(s)")
return # Do not proceed
else:
await ctx.send(f"j'ai clear {amount} message(s)", delete_after=5)
await ctx.channel.purge(limit=amount) # Clear messages if lower than 200
我将您的问题解释为“我想要一个用户,但如果我不提及此人,我会收到错误消息。帮助?” 当然,有几种方法可以做到这一点,所以我将向您展示其中的两种。
方法1 :使用None
如果您不想使用任何额外的导入,您可以将您的member
移到前面并使其成为None
。 对于这两种方法,您都需要使用 if 语句将您的member
更改为ctx.author
。
@bot.command()
@commands.has_permissions(manage_messages=True)
async def clear(ctx,amount=200,member : discord.Member=None): # moved the member to the right
if member == None: # if no one is mentioned
member = ctx.author # default to ctx.author
await ctx.channel.purge(limit=amount)
if amount > 200:
await ctx.send(f"{member.mention}merci de clear entre 0-200 message(s)")
else:
await ctx.send(f"j'ai clear {amount} message(s)",delete_after=5)
方法 2 :使用typing.Optional
。
这通常用作可选参数。 这允许您的member
留在中间。
import typing
# ...
# other code
@bot.command()
@commands.has_permissions(manage_messages=True)
async def clear(ctx, member: typing.Optional[discord.Member]=None, amount=200): # member is kept in the middle
if member == None: # if no one is mentioned
member = ctx.author # default to ctx.author
await ctx.channel.purge(limit=amount)
if amount > 200:
await ctx.send(f"{member.mention}merci de clear entre 0-200 message(s)")
else:
await ctx.send(f"j'ai clear {amount} message(s)",delete_after=5)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.