【问题标题】:How do I get a server object from a command without arguments discord.py如何从没有参数 discord.py 的命令中获取服务器对象
【发布时间】:2023-03-21 02:41:01
【问题描述】:

我正在尝试制作一个机器人,当我执行!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:\PycharmProjects\Movey\venv\lib\site-packages\discord\ext\commands\bot.py", line 846, in process_commands
    yield from command.invoke(ctx)
  File "D:\PycharmProjects\Movey\venv\lib\site-packages\discord\ext\commands\core.py", line 367, in invoke
    yield from self.prepare(ctx)
  File "D:\PycharmProjects\Movey\venv\lib\site-packages\discord\ext\commands\core.py", line 345, in prepare
    yield from self._parse_arguments(ctx)
  File "D:\PycharmProjects\Movey\venv\lib\site-packages\discord\ext\commands\core.py", line 304, in _parse_arguments
    transformed = yield from self.transform(ctx, param)
  File "D:\PycharmProjects\Movey\venv\lib\site-packages\discord\ext\commands\core.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.

【问题讨论】:

  • 你确定@asyncio.coroutine是必要的吗?
  • 因为机器人示例和 discord.py 文档都使用@asyncio.coroutine,所以我也会使用它。考虑到该命令可以同时在多台服务器上运行,我认为因此需要它。是的,这只是一个例子,我试图理解 api,但对于其他命令,肯定需要它
  • “忽略命令移动中的异常”,您没有在代码中发布。
  • 另外,您安装了 discord.py 的稳定版本,并且您正在阅读重写版本的文档。形成命令时需要设置 pass_context=True。
  • 我将如何安装 Discord.py 的重写版本而不是稳定版本?

标签: python python-3.x discord.py


【解决方案1】:

您需要将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))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-14
    • 2011-09-05
    • 2011-08-18
    • 2021-07-26
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    • 2019-03-21
    相关资源
    最近更新 更多