Создайте определенный диссонанс встраивания с классом

#python #python-3.x #discord.py #embed

#питон #python-3.x #discord.py #Внедрить

Вопрос:

Я хочу создать встраивание discord с помощью класса с именем embed, потому что строки встраивания занимают много места в моем коде, и я хочу его оптимизировать. Спасибо, что прочитали меня. Мой файл discord

 @bot.command() async def test(ctx): # Commande de test pour vérifier que le bot est bien en Etat de répondre   '''Commande inutile pour le moment'''  embed_test = embed.EMBED("title", "description", "!nom_fonction",   "https://www.supersoluce.com/sites/default/files/styles/picto_soluce/interrogation.png")  embed_test.create()  embed_test.add_field("Test1", "Value1")  embed_test.add_field("Test2", "Value2")  await ctx.send(embed=embed_test)  

Мой embed.py файл

 from urllib.parse import urlsplit, parse_qs import discord  class EMBED:  def __init__(self, title, description, nom_fonction=None, logo=None, color=0x1f6e9e):  self.embed_title = title  self.embed_description = description  self.embed_nom_fonction = nom_fonction  self.embed_logo = logo  self.embed_color = color  self.embed = discord.Embed(title= self.embed_title, url= "https://myges.fr", description= self.embed_description, color= self.embed_color)   def create(self):  self.embed.set_author(name=f"ESGI | {self.embed_nom_fonction}", icon_url= self.embed_logo)  self.embed.set_thumbnail(url="https://www.sciences-u-lyon.fr/images/2020/03/myges.png")  self.embed.set_footer(text="Made by DAVE")    def add_field(self, name, value, inline=True):  self.embed.add_field(name=name, value=value, inline=inline)  

Сообщение об ошибке:

 Ignoring exception in on_command_error Traceback (most recent call last):  File "C:Python310libsite-packagesdiscordextcommandscore.py", line 85, in wrapped  ret = await coro(*args, **kwargs)  File "c:UsersrmassietDesktopESGI botESGI_BOT_DISCORDmain.py", line 70, in test  await ctx.send(embed=embed_test)  File "C:Python310libsite-packagesdiscordabc.py", line 1017, in send  embed = embed.to_dict() AttributeError: 'EMBED' object has no attribute 'to_dict'  The above exception was the direct cause of the following exception:  Traceback (most recent call last):  File "C:Python310libsite-packagesdiscordclient.py", line 343, in _run_event  await coro(*args, **kwargs)  File "c:UsersrmassietDesktopESGI botESGI_BOT_DISCORDmain.py", line 113, in on_command_error  raise error  File "C:Python310libsite-packagesdiscordextcommandsbot.py", line 939, in invoke  await ctx.command.invoke(ctx)  File "C:Python310libsite-packagesdiscordextcommandscore.py", line 863, in invoke  await injected(*ctx.args, **ctx.kwargs)  File "C:Python310libsite-packagesdiscordextcommandscore.py", line 94, in wrapped  raise CommandInvokeError(exc) from exc discord.ext.commands.errors.CommandInvokeError: Command raised an exception: AttributeError: 'EMBED' object has no attribute 'to_dict'  

Ответ №1:

Внутренне discord.py отправляет встраивание в виде данных JSON (представленных как a dict в python). Вы можете создать свой собственный to_dict метод для устранения этой проблемы

 class EMBED:  ...   def to_dict(self):  return self.embed.to_dict()