首页 > 解决方案 > 如何创建检查消息的命令 (Discord.py)

问题描述

我是带着问题来的。我做了这个 ping 某人的命令,但我不知道如何让它停止。最初它会监听“~stop”,它会破坏消息发送循环。但这行不通。请帮忙!

@client.command()
async def ping(ctx, member:discord.User=None):
  pingEvent = 0
  if (member == None):
    await ctx.send("who do you want me to ping stupid")
  if "~stop" in ctx.channel
    pingEvent = 0
  else:
    pingEvent = 1
    while pingEvent <= 1:
      await ctx.send(
        f"{member.mention}"
      )
      if pingEvent == 0:
        break

标签: pythondiscorddiscord.py

解决方案


首先,您的机器人将受到速率限制并最终被禁止这样做,但出于教育目的。这是解决方案。

检查循环内的停止

for _ in range(20): #restrict pings to avoid being banned
   await ctx.send(member.mention)

   try: 
      msg = await client.wait_for("message", check= lambda x: x.author == ctx.author and x.content.contains('~stop'), timeout=2)
   except asyncio.TimeoutError:
      continue
   else:
       break

这将每两秒发送一次消息,因为我们将超时设置为 2。这远低于速率限制,但仍会破坏 ToS

参考:


推荐阅读