python - Discord Python Bot:清除命令 If 语句
问题描述
我目前正在尝试在 python 中制作一个不和谐的机器人。自从我开始学习以来已经大约 1 周了,我想我会试一试。我正在尝试制作一个清晰的功能来清除聊天。我想让机器人说“请输入一个有效的数字”。int
如果您键入除前任以外的任何其他内容。一些字符。
例如,当我输入“.clear t”时,它不会做任何事情,并且会在终端中生气。当我输入诸如“.clear 3”之类的有效参数时,它会抛出“请输入有效数字”。全部清除后。
我尝试了 if 语句的不同变体,包括放置。想不通。我有一种感觉,这与放置 if 语句的位置有关。感谢您花时间阅读。
@client.command(pass_context = True)
async def clear(ctx, number = 5):
number = int(number)
counter = 0
channel = ctx.message.channel
async for x in client.logs_from(ctx.message.channel, limit = number):
if counter < number:
await client.delete_message(x)
counter += 1
await asyncio.sleep(0.5)
if number != int():
await client.send_message(channel, "Please enter a valid number.")
解决方案
您需要学习如何正确检查对象的类型。在你的情况下,如果number = 5
,并且你做了if number != int():
,因为int()
返回0
,你基本上是在说if 5 != 0:
,这总是。
要克服上述问题,请使用isinstance(obj, type)
. 但是,这并不重要,因为number
它将始终是一个字符串(除非使用默认值)。
number
如果无法将以下行转换为整数,则会引发错误。
number = int(number)
这引发了一个ValueError
,您需要捕获它才能发送您的错误消息。
@client.command(pass_context=True)
async def clear(ctx, number=5):
channel = ctx.message.channel
try:
number = int(number)
except ValueError:
return await client.send_message(channel, "Please enter a valid number.")
async for x in client.logs_from(channel, limit=number):
await client.delete_message(x)
await asyncio.sleep(0.5)
然而,使用 discord.py,通过使用类型注释语法,可以更轻松地进行类型对话:
@client.command(pass_context=True)
async def clear(ctx, number: int=5):
channel = ctx.message.channel
async for x in client.logs_from(channel, limit=number):
await client.delete_message(x)
await asyncio.sleep(0.5)
如果您迫切需要将该错误消息发送到频道,您可以从on_command_error
事件中完成。(搜索他们的文档)
您可能已经注意到我删除了该counter
部分,因为limit
它的作用完全相同。(删除冗余)
推荐阅读
- c++ - c++ 中的预处理和搜索路径如何工作?
- algorithm - 01 有m个物品限制的背包问题
- swift - 如何从 macOS 上的后缀中获取文档标识符?
- c++ - 调整四叉树的大小
- r - 如何在不合并 r 中的数据框的情况下从多个数据框的列名中删除“-”和空格
- flutter - 学习颤振
- android - Android Studio Kotlin:尝试从 inputStream(蓝牙)读取时应用程序冻结
- java - 使用 Hibernate 从 MS SQL 检索值而不执行创建 CRUD 操作
- python - subprocess.Popen和线程的python3有线行为
- r - 复制具有不同大小案例的函数