“捐赠”命令为所有拖缆发送相同的图片,即使我希望机器人为一个人发送图片| Discord.py

“捐赠”命令为所有拖缆发送相同的图片,即使我希望机器人为一个人发送图片| Discord.py,discord.py,Discord.py,我发出了一个命令。然而,我想让它变得更好 我在想这个: 只有当Carson是被捐赠的机器人时,机器人才会用图像进行响应。目前,它向所有拖缆捐款 机器人应该只接受金钱,而不是语言 @commands.command() 异步传输(自身,ctx): 等待ctx.send(“Aight,你想捐赠给谁?”) 拖缆=wait self.bot.wait_for('message',check=lambda message:message.author==ctx.author) 等待ctx.send(f

我发出了一个命令。然而,我想让它变得更好

我在想这个:

  • 只有当Carson是被捐赠的机器人时,机器人才会用图像进行响应。目前,它向所有拖缆捐款
  • 机器人应该只接受金钱,而不是语言
@commands.command()
异步传输(自身,ctx):
等待ctx.send(“Aight,你想捐赠给谁?”)
拖缆=wait self.bot.wait_for('message',check=lambda message:message.author==ctx.author)
等待ctx.send(f“好的,那么您将向{streamer.content}捐款。您将捐款多少?”)
amount=wait self.bot.wait_for('message',check=lambda message:message.author==ctx.author)
等待ctx.send(f“Aight,您正在向{streamer.content}捐赠${amount.content}。捐赠消息是什么?”)
捐赠=等待self.bot.wait_for('message',check=lambda message:message.author==ctx.author)
等待ctx.send(f“您刚刚向{streamer.content}捐赠了${amount.content},并显示消息:{generation.content}”)
如果streamer.content==“CallMeCarson”或“CallMeCarson”或“carson”:
等待ctx.send(file=discord.file(“./Images/callmecarsoncrying.jpg”))
返回```
我是python新手,如果这很容易做到,那么很抱歉。

问题如下:

if streamer.content == "CallMeCarson" or "callmecarson" or "carson":
这意味着与以下内容相同:

if streamer.content == "CallMeCarson" or string == True or string == True:
python中的非空字符串是
truthy
,因此这将始终是
True
&pass,因此它将始终适用于每个拖缆

在python中使用
时,需要重复要比较的参数

if streamer.content == "CallMeCarson" or streamer.content == "callmecarson" or streamer.content == "carson":
但这是过时的,因为您可以将其转换为小写形式&检查
carson
是否在其中:

if "carson" in streamer.content.lower():
假设您计划对多条拖缆执行此操作,我建议您使用
dict
,以避免使用900 if语句。以后您可以将所有其他名称和图像路径添加到此dict

streamers = {"carson": "callmecarsoncrying", "streamer2": "streamer2_image_name"}
for key in streamers:
    if key in streamer.content.lower():
        return await ctx.send(file=discord.File(f"./Images/{streamers[key]}.jpg"))

最后一行将发送消息,当它找到匹配项时,
断开
(通过
返回
)循环,因此不会检查其他拖缆。这样,代码看起来更干净、更易于维护。

啊,非常感谢!!