#python #discord #discord.py
#python #Discord #discord.py
Вопрос:
Итак, в настоящее время у меня работает бот discord с discord.py , и, как вы знаете, discord.py поставляется со своей собственной командой help (так что мне не нужно создавать свою собственную). Это очень полезно, и мои команды разделены на винтики / категории. Это действительно помогает с простотой, потому что теперь мне не нужно писать свою собственную команду help.
Проблема в том, что когда я запускаю команду help, она приходит ко мне в виде гигантского блока кода, вот так: я слышал некоторые жалобы от пользователей, что это не совсем визуально привлекательно, и когда я добавляю больше команд, это заполняет экран. Есть ли простой способ (без написания моей собственной команды справки) перенести все это во встраивание? Может быть, скопировать вывод этой команды справки и переместить его во встраивание? Если нет, все в порядке, я напишу свою собственную команду help, но я просто пытаюсь найти простой способ сделать это, не запачкав руки кодированием. Как всегда, заранее благодарю вас.
На случай, если это необходимо, вот пример из моего кода:
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:
Вам нужно будет переопределить команду help по умолчанию с помощью 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:
Простой способ сделать это — использовать модуль python «PrettyHelp»:
- Вы можете установить его с помощью 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.
Я считаю, что это должно быть сделано в основном файле бота, а не в винтике, и в итоге это выглядит так: скриншот
Ответ №3:
Как упоминалось в 2 ответах перед моим, вам нужно будет установить для команды справки по умолчанию значение None . Это делается с самого начала, когда вы создаете своего бота.
Что касается встраивания, вам придется проделать некоторую работу самостоятельно. Вот пример из моего бота, но, пожалуйста, обратите внимание, что это не обязательно лучшая практика — я не знаю, но у меня это сработало.
# 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.