Много перечитала статей и форумов, но не могу найти взаимосвязь между другими аттрибутами. Не понимаю, о каком атрибуте/методе идёт речь и в какой строчке. Да, дословно, что у обьекта Бот нет аттрибута, но что с этим делать — не знаю
Целью было засунуть форму+отправляющую кнопку в отдельный файлик и вызывать его в основном файле, но не получается
Полный текст ошибки:
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")
Либо я совсем неправильно понимаю работу когов и другим классов вместе