Discord.py | Pillow в Embed
У меня есть код который работает с библиотекой Pillow. \
Задача кода: Пользователь должен написать команду после, так же в сообщении команды написать любой текст. После бот отправляет определенное изображение в котором и будет присутствовать заданный пользователем текст.
Проще говоря, это как сообщение от бота только с немного оформлением.
Так вот, мой код работает отлично, только я бы хотел чтобы он отправлялся в виде Embed, а не простого сообщения. Как я могу добавить созданный файл в Embed?
Дополнительно: если вам известно как сделать ограничение в символах, например в изображении может вмещаться только 30 символов, но так как этого ограничения самого то нет, то все символы просто будут выходить за грани изображения. А если добавить ограничение, и если пользователь захочет написать текст в котором более 30 символов, то бот отправит ему предупреждение. [Дополнительный вопрос не обязателен] Буду рад если поделитесь ответом.
1 Изображение (achievement.png)
2 Изображение (exit.png)
3 Изображение (дополнительно)
@Bot.command()
async def achievement(ctx, *, text):
text1 = text
achievement = Image.open("achievement.png")
colors = ["white"]
drawer = ImageDraw.Draw(achievement)
font = ImageFont.truetype("F77 Minecraft.ttf", 15)
for color in colors:
drawer.text((60, 35), text=text1, font=font, fill=color)
achievement.save("exit.png")
await ctx.send(file = discord.File("exit.png"))
Ответы (1 шт):
Для того чтобы отправить изображение в виде embed, замените строку
await ctx.send(file = discord.File("exit.png"))
На этот фрагмент кода:
file = discord.File("exit.png", filename="exit.png")
embed = discord.Embed(color = discord.Colour.gold())
embed.set_image(url="attachment://exit.png")
await ctx.send(file = file, embed = embed)
Результат: (у меня нет шрифта из MineCraft, поэтому Arial)
Если вы хотите добавить какие-то надписи, то в форме embed, помимо color можно указать значения title и description.
Пример:
embed = discord.Embed(title = 'Достижение', description = 'Получено новое достижение!', color = discord.Colour.gold())
Поменять цвет embed можно на любой другой, вот список цветов
Что насчет ограничения в 30 символов - узнать длину сообщения можно через встроенную функцию len()
Пример использования:
@Bot.command()
async def achievement(ctx, *, text):
text1 = text
if len(text1) >= 30:
# выводим сообщение об ошибке
await ctx.send(embed = discord.Embed(description = f'{ctx.author.mention}, длина текста не должна превышать **30**', colour = discord.Color.red()))
# используем return, чтобы завершить функцию
return
else:
# здесь ваш остальной код





