nastexe
@nastexe

Куда указывает ошибка AttributeError: 'Bot' object has no attribute 'row' (Pycord)?

Много перечитала статей и форумов, но не могу найти взаимосвязь между другими аттрибутами. Не понимаю, о каком атрибуте/методе идёт речь и в какой строчке. Да, дословно, что у обьекта Бот нет аттрибута, но что с этим делать — не знаю
Целью было засунуть форму+отправляющую кнопку в отдельный файлик и вызывать его в основном файле, но не получается
Полный текст ошибки:
Traceback (most recent call last):
File "D:\bot\.venv\Lib\site-packages\discord\cog.py", line 790, in _load_from_module_spec
setup(self)
File "d:\bot\second.py", line 78, in setup
bot.add_cog(MediaCog(bot))
^^^^^^^^^^^^^
File "d:\bot\second.py", line 18, in __init__
super().__init__(*args, **kwargs, title="Подача запроса")
File "D:\bot\.venv\Lib\site-packages\discord\ui\modal.py", line 64, in __init__
self._weights = _ModalWeights(self._children)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\bot\.venv\Lib\site-packages\discord\ui\modal.py", line 275, in __init__
children = sorted(children, key=key)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\bot\.venv\Lib\site-packages\discord\ui\modal.py", line 274, in
key = lambda i: sys.maxsize if i.row is None else i.row
^^^^^
AttributeError: 'Bot' object has no attribute 'row'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "d:\bot\bot4.py", line 116, in
bot.load_extension("second")
File "D:\bot\.venv\Lib\site-packages\discord\cog.py", line 912, in load_extension
self._load_from_module_spec(spec, name)
File "D:\bot\.venv\Lib\site-packages\discord\cog.py", line 795, in _load_from_module_spec
raise errors.ExtensionFailed(key, e) from e
discord.errors.ExtensionFailed: Extension 'second' raised an error: AttributeError: 'Bot' object has no attribute 'row'


Если код поместить в основной файл и запускать его напрямую, то всё работает. Дело именно в коге и его запуске через основной файл.

import discord
from discord.ext import commands
from discord.ui import button, View, Modal, InputText

class MediaCog(Modal, discord.Cog):

    def __init__(self, bot):
        self.bot: commands.Bot = bot

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs, title="Подача запроса")

        self.add_item(InputText(
            label="Никнейм:",
            placeholder="Напишите ваше имя",
            max_length=32
       ))

        self.add_item(InputText(
            label="имя персонажа:",
            placeholder="Напишите имя персонажа",
            max_length=32
        ))

        self.add_item(InputText(
            style=discord.InputTextStyle.long,
            label="Описание:",
            placeholder="Описание",
        ))
   
   #пишет данные и отправляет эмбед в другой канал с указанным айди
    async def callback(self, Interaction: discord.Interaction):
        media_nick = self.children[0].value
        media_char = self.children[1].value
        media_desc = self.children[2].value
        
        med_embed=discord.Embed(
            color=0xe81c5a
        )
        med_embed.add_field(name='Никнейм',value=media_nick, inline=False)
        med_embed.set_author(name=Interaction.user.name, icon_url=Interaction.user.avatar)
        med_embed.add_field(name='Игровое имя:', value=media_char, inline=False)
        med_embed.add_field(name='Описание :',value=media_desc,inline=False)

        ID = Interaction.user.mention

        channel_id=1228328485852938281
        channel = self.bot.get_channel(channel_id)
        await channel.send(f"<@311477568278626304>, юзер {ID} отправил запрос",embed=med_embed)
        await Interaction.response.send_message('Данные отправлены',ephemeral=True)

class MyView(discord.Cog,View):#Кнопка
   
    def __init__(self):
        super().__init__(timeout=None)

    @button(label="Запрос «Media Team»",custom_id="button_modal1", style=discord.ButtonStyle.blurple)
    async def callback(self, button: discord.ui.Button, interaction: discord.Interaction):
        await interaction.response.send_modal(MediaCog())

@discord.command() #команда отправки кнопки+эмбед
async def button_modal(ctx: discord.ApplicationContext):
    embed= discord.Embed(
        color=0xe81c5a
    )
    embed.add_field(name="", value="<:2MZ5OoXrgeA:1228267381416001548> Нажмите на кнопку под сообщением для выбора действия.",inline=False)
    embed.add_field(name="", value="Внимание!",inline=False)
    await ctx.channel.send("## Выбор необходимого действия:", embed=embed,view=MyView())

def setup(bot: discord.Bot):
    bot.add_cog(MediaCog(bot))
    bot.add_cog(MyView())
    bot.add_application_command(button_modal)


В мейн файле строчка "призыва" кога: bot.load_extension("second")

Либо я совсем неправильно понимаю работу когов и другим классов вместе
  • Вопрос задан
  • 41 просмотр
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Да, ты чего-то не понимаешь. Почему у тебя не вызвал вопросов вот этот код?
def __init__(self, bot):  # раз конструктор
    self.bot: commands.Bot = bot

def __init__(self, *args, **kwargs):  # два конструктор ?!?!?!
    super().__init__(*args, **kwargs, title="Подача запроса")
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы