我之前在 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)
答案 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
语句是因为如果通道不存在,控制台中会发生错误。如果通道不存在,则将消息发送到执行命令的通道。