我想阻止我的机器人自行回答,因此我试图建立一个if语句,显然这不是正确的语句。在这种情况下,我用message.author替换了什么?
@client.command()
async def amy(ctx):
if message.author == client.user:
return
else:
gif = discord.Embed(color = 0x83B5E3)
gif.set_image(url = 'https://media.giphy.com/media/2yyKE8ZEgrAXPx5gwI/giphy.gif')
await ctx.channel.send(embed=gif)
我知道如何处理事件,我只是不确定在命令下使用什么...
@client.event
async def on_message(message):
if message.author == client.user:
return
else:
gif = discord.Embed(color = 0x83B5E3)
gif.set_image(url = 'https://media.giphy.com/media/2yyKE8ZEgrAXPx5gwI/giphy.gif')
await ctx.channel.send(embed=gif)
答案 0 :(得分:1)
Y!我发现您拼错了ctx和消息!命令没有消息变量!
@client.command()
async def amy(ctx):
if message.author == client.user: # <-- RIGHT HERE
return
else:
gif = discord.Embed(color = 0x83B5E3)
gif.set_image(url = 'https://media.giphy.com/media/2yyKE8ZEgrAXPx5gwI/giphy.gif')
await ctx.channel.send(embed=gif)
所以基本上您只需要将代码更改为:
@client.command()
async def amy(ctx):
if ctx.author == client.user:
return
else:
gif = discord.Embed(color = 0x83B5E3)
gif.set_image(url = 'https://media.giphy.com/media/2yyKE8ZEgrAXPx5gwI/giphy.gif')
await ctx.channel.send(embed=gif)
希望有帮助!
答案 1 :(得分:1)
到目前为止,我只看到答案说明了您需要做什么。但不是为什么您需要执行他们告诉您的操作。该答案将为您提供策略和解决方案,因此您无需再次提出这些问题。 (并不是说它是错误的,但是您可以自己轻松地找到它,从而节省大量时间)。
步骤1:在文档中搜索事件(或在这种情况下,如何创建命令)
我们想了解如何制作命令。我们首先搜索如何制作命令。例如,this链接可帮助您执行命令。可以通过输入“如何在不和谐的py中进行命令”并获取来自官方文档https://discordpy.readthedocs.io/的第一个链接来获得此链接。
步骤2:查看从事件中获得的参数(对象)
阅读文档时,您会在第一部分中看到它使用了context对象。并且您可以通过功能(变量ctx)的输入来使用它。现在,我们想研究如何使用ctx/context object。
步骤3:了解对象的用途
如前所述,我们想了解如何使用对象。在这种情况下,我们将重点放在“ ctx”对象上。描述上下文对象的页面告诉ctx对象包含的所有内容。如您所见,出现的第一个参数是message object。这就是您想要的一部分。因此访问它的方式可能只是:ctx.message.author
。但是其他人怎么说:ctx.author
?好吧,如果您进一步阅读上下文页面,我们还会看到一个Author成员。它还指出这是Message.Author的简写。意味着我们还可以使用:ctx.author
,以获得完全相同的结果。
第4步:将对象集成到代码中
现在,我们知道上下文对象是什么,以及我们可以使用它做什么。但是我们如何整合它呢?
首先,让我们想起我们想要实现的目标很有用。我们希望阻止机器人对其自身做出响应。因此,只需忽略可能来自您的机器人的消息即可。我们需要比较传入消息的作者是否是该机器人,如果它来自该机器人,则需要忽略它。
如步骤3所述。我们可以使用ctx.message.author
或ctx.author
来获取作者。如果它等于漫游器(client.user
),那么我们应该早点回来。
这将导致一个if语句检查两个值:
@client.command()
async def amy(ctx):
if ctx.author == client.user:
return
else:
# the rest of your code.
或
@client.command()
async def amy(ctx):
if ctx.message.author == client.user:
return
else:
# the rest of your code.
_________________________________________________________________
我建议阅读文档。因为它很有帮助。通常,从事件/命令获得的输入只是完成工作所需的全部。如果您确切地知道自己需要什么,也很方便。例如,您可能已经搜索了从函数中获得的所有对象,并在其中搜索了特定的变量和描述,在这种情况下,您需要使用“作者”。这样可以使搜索更快。
无论如何,知道可以使用哪些通用对象很有用。因为这有助于为您的机器人编写代码。
答案 2 :(得分:0)
@client.event
async def on_message(message):
if message.author == client.user:
return
您已经做对了。 if是否需要放在函数顶部。似乎还有其他问题。
答案 3 :(得分:0)
如果我理解正确,则您不希望您的程序响应自身的命令。 在这种情况下,请使用ctx.author而不是message.author
尝试使用此代码:
@client.command()
async def amy(ctx):
if ctx.author == client.user:
return
else:
gif = discord.Embed(color = 0x83B5E3)
gif.set_image(url = 'https://media.giphy.com/media/2yyKE8ZEgrAXPx5gwI/giphy.gif')
await ctx.channel.send(embed=gif)