我一直在尝试用 python 开发一个不和谐的机器人,我想制作一堆没有出现在帮助中的“隐藏”命令。我想让它每当有人激活隐藏命令时,机器人都会向他们发送 pm。我试图制作一个函数来做到这一点,但到目前为止它不起作用。这是 cog 文件中的代码:
import discord
from discord.ext import commands
class Hidden(commands.Cog):
def __init__(self, client):
self.client = client
def hidden_message(ctx):
ctx.author.send('You have found one of several hidden commands! :shushing_face:\nCan you find them all? :thinking:')
@commands.command()
async def example(self, ctx):
await ctx.send('yes')
hidden_message(ctx)
def setup(client):
client.add_cog(Hidden(client))
运行示例命令时,机器人会正常响应,但不会调用该函数。控制台中没有错误消息。我对 python 还是很陌生,所以有人能告诉我我做错了什么吗?
答案 0 :(得分:3)
在调用 await
等异步函数时需要使用 ctx.author.send
,因此您包装的函数也需要异步
async def hidden_message(self, ctx):
await ctx.author.send('You have found one of several hidden commands! :shushing_face:\nCan you find them all? :thinking:')
然后
@commands.command()
async def example(self, ctx):
await ctx.send('yes')
await self.hidden_message(ctx)
最后,要使命令从默认帮助命令中隐藏,您可以这样做
@commands.command(hidden=True)
答案 1 :(得分:2)
为了发送消息,hidden_message
必须是一个 courotine,即它使用 async def
而不仅仅是 def
。
然而,由于 hidden_message
的调用方式,会出现第二个问题。将 hidden_message
调用为 hidden_message(ctx)
需要在全局范围内定义该函数。由于它是 class Hidden
的方法,因此需要这样调用。
突出显示编辑:
class Hidden(commands.Cog):
...
async def hidden_message(self, ctx):
...
@commands.command()
async def example(self, ctx):
await ctx.send("yes")
await self.hidden_message(ctx)