我如何解决无法有 2 个嵌入命令 discord bot PY

async def on_message(message):
    if message.content.startswith('.info'):
        embedVar = discord.Embed(title="Prices", description="T", color=246482)
        embedVar.add_field(name="e", value="e", inline=False)
        embedVar.add_field(name="e", value="e", inline=False)
        embedVar.add_field(name="r", value="r", inline=False)
        embedVar.add_field(name="r", value="r", inline=False)
        await message.channel.send(embed=embedVar)

@client.event
async def on_message(message):
    if message.content.startswith('.info1'):
        embedVar = discord.Embed(title="Prices", description="T", color=246482)
        embedVar.add_field(name="e", value="e", inline=False)
        embedVar.add_field(name="e", value="e", inline=False)
        embedVar.add_field(name="r", value="r", inline=False)
        embedVar.add_field(name="r", value="r", inline=False)
        await message.channel.send(embed=embedVar)

这是我的代码,每次我尝试创建一个新命令时,“.info”不起作用,但“.info1”起作用。有什么办法可以有更多的命令?

梅格加尤

问题是,on_message当你只能拥有一个功能时,你有两个功能。这意味着当您定义第二个on_message函数时,您将覆盖第一个函数,这会导致第一个on_message函数中的任何代码都不会运行。要解决此问题,您需要将两段代码放入一个on_message函数中(无论如何这更简单!):

@client.event
async def on_message(message):
    if message.content.startswith('.info'):
        embedVar = discord.Embed(title="Prices", description="T", color=246482)
        embedVar.add_field(name="e", value="e", inline=False)
        embedVar.add_field(name="e", value="e", inline=False)
        embedVar.add_field(name="r", value="r", inline=False)
        embedVar.add_field(name="r", value="r", inline=False)
        await message.channel.send(embed=embedVar)
    elif message.content.startswith('.info1'):
        embedVar = discord.Embed(title="Prices", description="T", color=246482)
        embedVar.add_field(name="e", value="e", inline=False)
        embedVar.add_field(name="e", value="e", inline=False)
        embedVar.add_field(name="r", value="r", inline=False)
        embedVar.add_field(name="r", value="r", inline=False)
        await message.channel.send(embed=embedVar)

但是,您可以清楚地看到这里肯定存在重复。要解决这个问题,只需使用or(甚至更简单!!!):

@client.event
async def on_message(message):
    if message.content.startswith('.info') or message.content.startswith('.info1'):
        embedVar = discord.Embed(title="Prices", description="T", color=246482)
        embedVar.add_field(name="e", value="e", inline=False)
        embedVar.add_field(name="e", value="e", inline=False)
        embedVar.add_field(name="r", value="r", inline=False)
        embedVar.add_field(name="r", value="r", inline=False)
        await message.channel.send(embed=embedVar)

但是,如果这只是虚拟代码并且您需要第二个elif语句,那么您可以使用第一个示例。否则,要么使用单独的函数,要么使用第二个示例。(使用DRY 编码原则!

另外,感谢@Bagle 对此的原始评论

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章