discord бот на python для вывода информации на баннер сервера gif изображения
Вы уже наверное сами прекрасно знаете, что можно отобразить текст с какой-либо информацией поверх баннера сервера дискорд, скорее всего видели такое на хорошо оформленных серверах. Вопрос состоит вот в чем, возможно ли отображать текст поверх гиф фона баннера, а не статичного изображения? Подобного сам я не видел, но и присутствовал я на небольшом количестве серверов. Если нужно, то вот мой код кога:
class ServerBanner(commands.Cog):
def __init__(self, bot: commands.Bot):
self.bot = bot
logger.success('Ког ServerBanner был успешно подключен к боту')
self.update_banner.start()
def cog_unload(self):
self.update_banner.cancel()
@tasks.loop(minutes=1)
async def update_banner(self):
guild = self.bot.get_guild(guild_id)
if not guild:
logger.error("Guild not found.")
return
member_count = guild.member_count
voice_members_count = sum(len(channel.members) for channel in guild.voice_channels)
banner_text = f"Участники: {member_count}\nВ голосовых: {voice_members_count}"
try:
banner_image = self.create_banner_image(banner_text)
except Exception as e:
logger.error(f"Ошибка при создании изображения: {e}")
return
try:
await guild.edit(banner=banner_image)
logger.info(f"Баннер сервера обновлен: {banner_text}")
except Exception as e:
logger.error(f"Ошибка при обновлении баннера: {e}")
def create_banner_image(self, text):
image_path = os.path.join("background.jpg")
if not os.path.exists(image_path):
raise FileNotFoundError(f"Файл {image_path} не найден.")
img = Image.open(image_path)
d = ImageDraw.Draw(img)
font = ImageFont.truetype("arial.ttf", 70)
lines = text.split('\n')
y_text = 450
for line in lines:
bbox = d.textbbox((0, 0), line, font=font)
width, height = bbox[2] - bbox[0], bbox[3] - bbox[1]
d.text((50, y_text), line, font=font, fill=(255, 255, 255))
y_text += height + 10
img_byte_arr = io.BytesIO()
img.save(img_byte_arr, format='PNG')
img_byte_arr = img_byte_arr.getvalue()
return img_byte_arr
@update_banner.before_loop
async def before_update_banner(self):
await self.bot.wait_until_ready()
await asyncio.sleep(60)
def setup(bot):
bot.add_cog(ServerBanner(bot))
P.s Я пытался сам, но у меня ничего не выходит. Как выяснилось, Pillow не поддерживает вставку гифки на изображение фона баннера, поэтому я попробовал сделать это через библиотеку moviepy, но у меня совсем ничего не получилось, из чего я могу сделать вывод, что либо я не смог написать работающий код на этой библиотеке, либо просто нельзя установить фон баннера .gif и отображать поверх него текст и так устроен Discord.