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

Posted

技术标签:

【中文标题】如何将 discord.py 帮助命令放入嵌入中?【英文标题】:How do I put discord.py help command in an embed? 【发布时间】:2021-01-13 11:45:05 【问题描述】:

所以,我目前有一个使用 discord.py 运行的 discord 机器人,如您所知,discord.py 带有自己的帮助命令(所以我不必自己制作)。它非常有用,我将我的命令分成了 cogs/categories。它确实有助于简化,因为现在我不必编写自己的帮助命令。

问题是,当我运行帮助命令时,它出现在一个巨大的代码块中,如下所示: 我听到一些用户抱怨说这在视觉上并不吸引人,当我添加更多命令时,它会填满屏幕。是否有简单的方法(无需编写我自己的帮助命令)将所有这些移动到嵌入中?也许复制此帮助命令的输出,并将其移动到嵌入中?如果没有,没关系,我会编写自己的帮助命令,但我只是想寻找一种简单的方法来做到这一点,而不会弄脏我的代码。与往常一样,提前感谢您。

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

import discord
from discord.ext import commands, tasks

TOKEN = "INSERT TOKEN HERE"
client = commands.Bot(command_prefix="wurf ", case_insensitive=True)

#Utility Category
class Utility(commands.Cog):
    def __init__(self, client):
        self.client = client
        
    @commands.command(
        help="Shows the ping/latency of the bot in miliseconds.",
        brief="Shows ping."
    )
    async def ping(self, ctx):
        if round(client.latency * 1000) <= 50:
            embed=discord.Embed(title="PING", description=f":ping_pong: Pingpingpingpingping! The ping is **round(client.latency *1000)** milliseconds!", color=0x44ff44)
        elif round(client.latency * 1000) <= 100:
            embed=discord.Embed(title="PING", description=f":ping_pong: Pingpingpingpingping! The ping is **round(client.latency *1000)** milliseconds!", color=0xffd000)
        elif round(client.latency * 1000) <= 200:
            embed=discord.Embed(title="PING", description=f":ping_pong: Pingpingpingpingping! The ping is **round(client.latency *1000)** milliseconds!", color=0xff6600)
        else:
            embed=discord.Embed(title="PING", description=f":ping_pong: Pingpingpingpingping! The ping is **round(client.latency *1000)** milliseconds!", color=0x990000)
        await ctx.send(embed=embed)
client.add_cog(Utility(client))
client.run(TOKEN)

【问题讨论】:

【参考方案1】:

你必须用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()

【讨论】:

【参考方案2】:

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

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

# 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看到完整的代码。

【讨论】:

【参考方案3】:

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

    您可以使用 pip 使用pip install -U discord-pretty-help 安装它 然后导入from pretty_help import DefaultMenu, PrettyHelp 然后你设置菜单按钮并替换默认的帮助菜单:
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

【讨论】:

以上是关于如何将 discord.py 帮助命令放入嵌入中?的主要内容,如果未能解决你的问题,请参考以下文章

在 discord.py 中显示设置前缀的命令(重写)

使用 discord.py 解析嵌入不和谐的 json 数据

Discord.py 嵌入未发送

使用 Discord py 使用 Discord 按钮编辑嵌入描述

Coinflip 嵌入命令 Discord.py?

Discord.py 如何从不和谐消息中读取 int 并将其作为变量发送到嵌入中