Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
4.5k views
in Technique[技术] by (71.8m points)

python - (No errors btw) Why isnt my purge command working?

@bot.command()
async def purge(ctx, limit=100, member: discord.Member=None):
  await ctx.message.delete()
  msg = []
  for m in ctx.channel.history():
    if m.author == member:
      msg.append(m)
  await ctx.channel.delete_messages(msg)

heres my code, this is a purge command with discord.py. Im trying to make it so it purges the message of someone you mention. Any help?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

The reason this isn't working is because ctx.channel.history() is an async function, so you'll have to use the async keyword before the loop. Like this:

@bot.command()
async def purge(ctx, limit=100, member: discord.Member=None):
  await ctx.message.delete()
  msg = []
  async for m in ctx.channel.history():
    if m.author == member:
      msg.append(m)
  await ctx.channel.delete_messages(msg)

You can also just use the purge function with a lambda instead. If you were to go that route, your code would look like this:

@bot.command()
async def purge(ctx, limit=100, member: discord.Member=None):
  await ctx.message.delete()
  deleted = await ctx.channel.purge(limit=100, check=lambda msg: msg.author == member)
  await ctx.channel.send('Deleted {} message(s)'.format(len(deleted)))

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...