'func'位置参数 - Discord.py Bot

时间:2018-01-29 16:41:24

标签: python bots discord

所以我正在为Discord制作一个Python机器人,我收到一个奇怪的错误(之后我还有另一个询问):

TypeError: decorator() missing 1 required positional argument: 'func'

我不确定是什么原因造成的。我为项目设置文件树的方式如下:

├───.idea
├───handlers
│   └───userHandler.py
└───src
    └───main.py

它指向第23行到我on_message main.py方法中的@client.event async def on_message(message): if message.content.startswith(client.command_prefix + 'tstring'): client.send_message(message.channel, 'Hello, ' + str(userHandler.getuser())) 方法(整个方法):

client.send_message(message.channel, 'Hello, ' + str(userHandler.getuser()))

第23行就是这个:

userHandler

userHandler.py方法位于@client.command async def getuser(user, member: discord.Member = None): if member is None: member = user.message.author client.say('{0}'.format(member)) ,如上图所示:

@client.command

用户处理程序文件与main分开,因为我想在自己的系统中处理所有基于用户的命令。我将在它自己的处理程序中对命令使用相同的逻辑。

所以我有两个问题:

  1. 是否可以/理想地将命令写在远离main.py的不同文件中并仍然在main中调用它们来使用?如果是这样,每当我在main.py commandHandler.py中调用命令时,即使它已经在commandHandler.py文件中,我是否需要编写packages?或者有更优化的方法吗? (不确定这是否足够意义)

  2. 我刚刚在上面的错误中错过了一个参数吗?我目前还没有很好地使用Discord.py API。如果没有,问题是什么?我真的希望我该死的。

1 个答案:

答案 0 :(得分:1)

要回答您的第一个问题,是的,您可以在单独的文件中编写命令,并让它们仍然注册到main。在discord.py中,这是使用cogs调用的。这是example

您的代码存在一些问题,假设您拥有它的确切方式。首先,您必须始终await coroutine函数才能使用它们 - > await client.send_message("Hello") ... await client.say("Hello")其次,我并不完全确定创建一个" userhandler"是个好主意。特别是您尝试考虑的方式,可以更直接地获取用户对象。

最后,请参阅我上面发布的链接,了解如何使用@client.command()装饰器。