如何将discord.py help命令放入嵌入中?

时间:2020-09-27 20:16:58

标签: python discord discord.py

因此,我目前有一个运行discord.py的discord机器人,并且您知道,discord.py带有其自己的帮助命令(因此,我不必自己创建)。这非常有用,我的命令分为齿轮/类别。它确实有助于简化操作,因为现在我不必编写自己的帮助命令。

问题是,当我运行help命令时,它出现在一个巨大的代码块中,如下所示: enter image description here 我听到用户的一些抱怨,认为这并不完全具有视觉吸引力,而且随着我添加更多命令,它会填满整个屏幕。是否有简单的方法(无需编写我自己的帮助命令)将所有这些内容移至嵌入内容?也许复制此帮助命令的输出,然后将其移至嵌入?如果没有,那没关系,我将编写自己的帮助命令,但是我只是在尝试寻找一种简单的方法来完成此任务,而不会弄脏我的手。一如既往,谢谢您。

如果需要,这是我的代码示例:

// if data with one parameter, no problem to run the tests
// the data not only the constants at the compile time, so need to work TestFixtureSoource attribute.
type SimpleFixtureArgs =
    static member Source = [| (String.Empty, String.Empty); ("hello", "hello") |]

[<TestFixtureSource(typeof<SimpleFixtureArgs>, "Source")>]
type ``simple tests class``(text, text2) =
    [<Test>]
    member this.``simple test``() =
        let expexted = text
        let actual = text2
        Assert.AreEqual(expexted, actual)

4 个答案:

答案 0 :(得分:2)

您将必须使用Bot.help_command

覆盖默认的帮助命令。

这是我从MinimalHelpCommand继承的简单的嵌入实现

class MyHelpCommand(commands.MinimalHelpCommand):
    async def send_pages(self):
        destination = self.get_destination()
        e = discord.Embed(color=discord.Color.blurple(), description='')
        for page in self.paginator.pages:
            e.description += page
        await destination.send(embed=e)

client.help_command = MyHelpCommand()

答案 1 :(得分:1)

一个简单的方法是使用“PrettyHelp”python 模块:

  1. 您可以使用 pip 使用 pip install -U discord-pretty-help
  2. 安装它
  3. 然后导入它from pretty_help import DefaultMenu, PrettyHelp
  4. 然后设置菜单按钮并替换默认的帮助菜单:
menu = DefaultMenu('◀️', '▶️', '❌') # You can copy-paste any icons you want.
bot.help_command = PrettyHelp(navigation=menu, color=discord.Colour.green()) 
# The color can be whatever you want, including normal color codes, 
# I just like the discord green personally.

我认为这必须在主 bot 文件中完成,而不是在 cog 中完成,最终看起来像这样:screenshot

答案 2 :(得分:0)

您必须使用删除默认的帮助命令

commands.remove_command("help")

答案 3 :(得分:0)

如我之前的2个回答所述,您将必须将默认帮助命令设置为“无”。这是从创建机器人开始就完成的。
至于嵌入,您将不得不自己做一些工作。这是我的机器人的一个示例,但是请注意,这不一定是最佳实践-我不知道,但这对我有用。

# When you create your bot, add this in the arguments
bot = commands.Bot(prefix='.', help_command=None)

# My sample help command:
@bot.command()
async def help(ctx, args=None):
    help_embed = discord.Embed(title="My Bot's Help!")
    command_names_list = [x.name for x in bot.commands]

    # If there are no arguments, just list the commands:
    if not args:
        help_embed.add_field(
            name="List of supported commands:",
            value="\n".join([str(i+1)+". "+x.name for i,x in enumerate(bot.commands)]),
            inline=False
        )
        help_embed.add_field(
            name="Details",
            value="Type `.help <command name>` for more details about each command.",
            inline=False
        )

    # If the argument is a command, get the help text from that command:
    elif args in command_names_list:
        help_embed.add_field(
            name=args,
            value=bot.get_command(args).help
        )

    # If someone is just trolling:
    else:
        help_embed.add_field(
            name="Nope.",
            value="Don't think I got that command, boss!"
        )

    await ctx.send(embed=help_embed)

您可以从GitHub repository中查看完整的代码。