我以前从未见过的 Python Discord bot 错误

时间:2021-04-25 00:06:20

标签: python discord repl.it

我之前在 repl.it 中启动了这段代码,但是每次我尝试运行它时,它都会向我抛出这个奇怪的错误。有人能帮我解决这个问题吗?

我正在尝试为 Discord bot 执行 !purge 命令,但是每当我尝试添加会在命令日志通道中弹出的嵌入式消息时,它都会停止并且不再执行任何代码在被窃听的行之后的那个功能。任何帮助将不胜感激。这是错误的代码:

@client.command()

@commands.has_any_role("Admin", "Server Owner")

async def purge(ctx, amount: int):
  
  await ctx.channel.purge(limit=1) #to delete the command

  await ctx.channel.purge(limit=amount) #to delete the messages
  
  channel = discord.utils.get(member.guild.text_channels, name="command-logs")

  emb = discord.Embed(color=discord.Color.green(), title="Purge command used", description=f"{user.name}#{user.discriminator} used !purge to delete {amount} messages.")

  await ctx.channel.send(embed=emb)

1 个答案:

答案 0 :(得分:1)

您的代码中存在三个主要错误,您也可以稍微“改进”一下。

首先:

要删除作者消息,您只需使用 await ctx.message.delete(),但您的方法也可以正常工作。

其次:

您希望显示 user.name 但从未定义它。要克服此错误,您可以使用:

    user= ctx.author # Author is the new user
    emb = discord.Embed(color=discord.Color.green(), title="Purge command used",
                        description=f"{user.name}#{user.discriminator} used !purge to delete {amount} messages.")

第三:

如果您想将消息发送到某个频道,您必须获得命令的作者,请使用 ctx.author 执行此操作,因为从未定义 member

channel = discord.utils.get(ctx.author.guild.text_channels, name="command-logs")

完整代码:

@client.command()
@commands.has_any_role("Admin", "Server Owner")
async def purging(ctx, amount: int):
    channel = discord.utils.get(ctx.author.guild.text_channels, name="command-logs")
    user = ctx.author

    if channel:
        await ctx.message.delete()

        await ctx.channel.purge(limit=amount)  # to delete the messages

        channel = discord.utils.get(ctx.author.guild.text_channels, name="command-logs")
        user = ctx.author
        emb = discord.Embed(color=discord.Color.green(), title="Purge command used",
                            description=f"{user} used !purge to delete {amount} messages.")

        await channel.send(embed=emb)
    else:
        await ctx.message.delete()
        await ctx.channel.purge(limit=amount)
        emb = discord.Embed(color=discord.Color.green(), title="Purge command used",
                            description=f"{user} used !purge to delete {amount} messages.")

        await ctx.send(embed=emb)
  • 使用 if/else 语句是因为如果通道不存在,控制台中会发生错误。如果通道不存在,则将消息发送到执行命令的通道。