python - 如何创建检查消息的命令 (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
解决方案
首先,您的机器人将受到速率限制并最终被禁止这样做,但出于教育目的。这是解决方案。
检查循环内的停止
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
参考:
asyncio.TimeoutError
- 你必须用import asyncio
wait_for
- 阅读服务条款
推荐阅读
- angular - 无法将数组传递给从 @Input 获取数据的 chart.js
- css - 在不影响边距或尺寸的情况下,在 div 中居中文本?
- node.js - nodejs:尝试与 SignalR api 交谈时出现未知错误
- python-3.x - 将在 Conda 环境中创建的 Python App 部署到 Heroku
- tensorflow - 使用 Bazel 安装 Tensorflow 时出现 CalledProcessError
- java - 实际请求参数不满足消息参数条件“拒绝”:reason={}
- c# - 如何在 c# Azure Function 项目中的多个类中重用 ILogger?
- html - Div 开头的图标/图像
- ios - 将第三方框架链接到我自己的框架,使用 Carthage 分发
- android - 将 gradle 版本更新到 5.1.1,但 kapt 不起作用