如何从没有参数 discord.py 的命令中获取服务器对象



我正在尝试制作一个机器人,当我执行!info时,它将在控制台中显示服务器信息,而无需使用 Python 上的 discord.py 向其传递任何参数。我发现的只是传递论点。

这是我到目前为止尝试过的:

@bot.command()
@asyncio.coroutine
def info(ctx):
server = ctx.message.author.server
server_name = server.name
server_id = server.id
server_owner = server.owner.name
print("server name: {}"
"server id: {}"
"server owner: {}"
.format(server_name, server_id, server_owner))

运行时,它会在控制台中显示以下内容:

Ignoring exception in command move
Traceback (most recent call last):
File "D:PycharmProjectsMoveyvenvlibsite-packagesdiscordextcommandsbot.py", line 846, in process_commands
yield from command.invoke(ctx)
File "D:PycharmProjectsMoveyvenvlibsite-packagesdiscordextcommandscore.py", line 367, in invoke
yield from self.prepare(ctx)
File "D:PycharmProjectsMoveyvenvlibsite-packagesdiscordextcommandscore.py", line 345, in prepare
yield from self._parse_arguments(ctx)
File "D:PycharmProjectsMoveyvenvlibsite-packagesdiscordextcommandscore.py", line 304, in _parse_arguments
transformed = yield from self.transform(ctx, param)
File "D:PycharmProjectsMoveyvenvlibsite-packagesdiscordextcommandscore.py", line 212, in transform
raise MissingRequiredArgument('{0.name} is a required argument that is missing.'.format(param))
discord.ext.commands.errors.MissingRequiredArgument: ctx is a required argument that is missing.

您需要将pass_context=True传递给@bot.command

@bot.command(pass_context=True)
@asyncio.coroutine
def info(ctx):
server = ctx.message.author.server
server_name = server.name
server_id = server.id
server_owner = server.owner.name
print("server name: {}"
"server id: {}"
"server owner: {}"
.format(server_name, server_id, server_owner))

最新更新