📜  discord.py 获取可用命令列表 - Python (1)

📅  最后修改于: 2023-12-03 14:40:45.295000             🧑  作者: Mango

以discord.py获取可用命令列表

简介

Discord.py是一个用于编写Discord机器人的Python库。它可以让您轻松地编写自动响应消息、管理服务器和频道等任务的Python脚本。

在本文中,我们将讨论如何使用discord.py获取可用命令列表,并以markdown格式返回。

获取可用命令列表

要获取可用命令列表,我们需要获取已加载的插件列表,然后从中提取命令。

以下是如何实现此操作的代码:

from discord.ext import commands
import inspect

bot = commands.Bot(command_prefix='!')

# 获取已加载的插件列表
plugins = bot.extensions.values()

# 循环遍历插件列表并提取命令
command_list = []
for plugin in plugins:
    for command in plugin.commands:
        signature = inspect.signature(command.callback)
        parameters = [str(x) for x in signature.parameters.values() if str(x) != 'self']
        parameter_string = ' '.join(parameters)
        syntax = f"!{command.name} {parameter_string}"
        description = command.help or 'No description available.'
        command_list.append((syntax, description))

# 格式化和返回markdown格式的命令列表
output = ['Command | Description', '--- | ---']
for command in command_list:
    output.append(f"`{command[0]}` | {command[1]}")
markdown = '\n'.join(output)
返回markdown格式的命令列表

上面的代码将提取所有已加载的插件中的所有命令,并将其格式化为markdown表格的形式。现在,我们可以使用以下代码将其返回:

print(f"```markdown\n{markdown}\n```")

或者,可以将它嵌入到一个函数中:

def get_command_list(bot):
    plugins = bot.extensions.values()

    command_list = []
    for plugin in plugins:
        for command in plugin.commands:
            signature = inspect.signature(command.callback)
            parameters = [str(x) for x in signature.parameters.values() if str(x) != 'self']
            parameter_string = ' '.join(parameters)
            syntax = f"!{command.name} {parameter_string}"
            description = command.help or 'No description available.'
            command_list.append((syntax, description))

    output = ['Command | Description', '--- | ---']
    for command in command_list:
        output.append(f"`{command[0]}` | {command[1]}")
    markdown = '\n'.join(output)

    return f"```markdown\n{markdown}\n```"

现在,我们可以将get_command_list函数传递给我们的discord客户端对象并调用它,以获取markdown格式的命令列表:

command_list = get_command_list(bot)
print(command_list)
结论

在本文中,我们介绍了如何使用discord.py获取可用命令列表,并将其格式化为markdown表格的形式。这个功能可以帮助您更方便地了解和编写您的Discord机器人的命令列表。