繁体   English   中英

如果我有 member.mention,如何清除?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM