Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Dont send message with inlinekeyboard pyrogram

I try to send InlineKeyboard but catch error TypeError: getattr(): attribute name must be string
CODE:

    async def send_afisha_to_channel(self,about: dict) -> None:
        async with self.app:
            await self.app.send_photo(
                chat_id='@filmas_tiktok',
                photo=about['img_link'],
                caption=MessagePaterns.FILM_AFISH_PATTERN(about),
                parse_mode='html',
                reply_markup=KeyBoards.get_link_kb_pyro(about['shorturl'])
                )

Class KeyBoards

class KeyBoards:
    @staticmethod
    def get_link_kb_pyro(url: str, text: str = 'Смотреть🎦') -> pyrokbmk:
        btn = pyrokbbut(text,url=url)
        kb = pyrokbmk(inline_keyboard=[btn])
        return kb

Error

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

Traceback (most recent call last):
  File "C:\Users\Kirill\PycharmProjects\test\venv\lib\site-packages\aiogram\dispatcher\dispatcher.py", line 415, in _process_polling_updates
    for responses in itertools.chain.from_iterable(await self.process_updates(updates, fast)):
  File "C:\Users\Kirill\PycharmProjects\test\venv\lib\site-packages\aiogram\dispatcher\dispatcher.py", line 235, in process_updates
    return await asyncio.gather(*tasks)
  File "C:\Users\Kirill\PycharmProjects\test\venv\lib\site-packages\aiogram\dispatcher\handler.py", line 116, in notify
    response = await handler_obj.handler(*args, **partial_data)
  File "C:\Users\Kirill\PycharmProjects\test\venv\lib\site-packages\aiogram\dispatcher\dispatcher.py", line 256, in process_update
    return await self.message_handlers.notify(update.message)
  File "C:\Users\Kirill\PycharmProjects\test\venv\lib\site-packages\aiogram\dispatcher\handler.py", line 116, in notify
    response = await handler_obj.handler(*args, **partial_data)
  File "c:\Users\Kirill\PycharmProjects\test\main.py", line 41, in admin_commands
    await pyroClient.send_afisha_to_channel(about=about)
  File "c:\Users\Kirill\PycharmProjects\test\contrib\utils.py", line 35, in send_afisha_to_channel
    await self.app.send_photo(
  File "C:\Users\Kirill\PycharmProjects\test\venv\lib\site-packages\pyrogram\methods\messages\send_photo.py", line 180, in send_photo
    reply_markup=await reply_markup.write(self) if reply_markup else None,
  File "C:\Users\Kirill\PycharmProjects\test\venv\lib\site-packages\pyrogram\types\bots_and_keyboards\inline_keyboard_markup.py", line 62, in write
    for b in r:
  File "C:\Users\Kirill\PycharmProjects\test\venv\lib\site-packages\pyrogram\types\object.py", line 94, in __getitem__
    return getattr(self, item)
TypeError: getattr(): attribute name must be string

A keyboard button include url to site and text of button.

>Solution :

If I read this part right:

btn = pyrokbbut(text,url=url)
kb = pyrokbmk(inline_keyboard=[btn])

you’re defining one button, and pass that as a list to the keyboard itself. Pyrogram and its InlineKeyboardMarkup require a list of lists, where the outer list is the rows, the inner list the buttons of each row.

You’ll want something that looks like this:

keyboard = [  # List of rows:
    [button, button],  # First Row
    [button],  # Second Row
]
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading