X Tutup
The Wayback Machine - https://web.archive.org/web/20201210054303/https://github.com/pyrogram/pyrogram/issues/428
Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Mentions failed in InputTextMessageContent #428

Open
sviat9440 opened this issue Jun 21, 2020 · 4 comments
Open

Mentions failed in InputTextMessageContent #428

sviat9440 opened this issue Jun 21, 2020 · 4 comments

Comments

@sviat9440
Copy link

@sviat9440 sviat9440 commented Jun 21, 2020

Checklist

  • I am sure the error is coming from Pyrogram's code and not elsewhere.
  • I have searched in the issue tracker for similar bug reports, including closed ones.
  • I ran pip3 install -U https://github.com/pyrogram/pyrogram/archive/develop.zip and reproduced the issue using the latest development version.

Description

When i try to answer for inline_query with text mentions, i get this error:

AttributeError: 'int' object has no attribute 'write'

Steps to Reproduce

        inline_query.answer([
            pyrogram.InlineQueryResultArticle(
                'test',
                pyrogram.InputTextMessageContent(
                    <a href="tg://user?id=38845557">test</a>,
                    'html',
                ),
                '1',
            )
        ])

Traceback

'int' object has no attribute 'write'
Traceback (most recent call last):
  File "C:\Users\sviat\AppData\Local\pypoetry\Cache\virtualenvs\dlrussia-bot-fHuGJ00--py3.7\lib\site-packages\pyrogram\client\ext\dispatcher.py", line 205, in update_worker
    handler.callback(self.client, *args)
  File "C:\Users\sviat\IdeaProjects\dlrussia_bot\bot\handlers\inline_query.py", line 37, in _on_inline_query
    ) for i in range(len(profiles))
  File "C:\Users\sviat\AppData\Local\pypoetry\Cache\virtualenvs\dlrussia-bot-fHuGJ00--py3.7\lib\site-packages\pyrogram\client\types\inline_mode\inline_query.py", line 162, in answer
    switch_pm_parameter=switch_pm_parameter
  File "C:\Users\sviat\AppData\Local\pypoetry\Cache\virtualenvs\dlrussia-bot-fHuGJ00--py3.7\lib\site-packages\pyrogram\client\methods\bots\answer_inline_query.py", line 107, in answer_inline_query
    ) if switch_pm_text else None
  File "C:\Users\sviat\AppData\Local\pypoetry\Cache\virtualenvs\dlrussia-bot-fHuGJ00--py3.7\lib\site-packages\pyrogram\client\client.py", line 1403, in send
    r = self.session.send(data, retries, timeout, self.sleep_threshold)
  File "C:\Users\sviat\AppData\Local\pypoetry\Cache\virtualenvs\dlrussia-bot-fHuGJ00--py3.7\lib\site-packages\pyrogram\session\session.py", line 456, in send
    return self._send(data, timeout=timeout)
  File "C:\Users\sviat\AppData\Local\pypoetry\Cache\virtualenvs\dlrussia-bot-fHuGJ00--py3.7\lib\site-packages\pyrogram\session\session.py", line 403, in _send
    message = self.msg_factory(data)
  File "C:\Users\sviat\AppData\Local\pypoetry\Cache\virtualenvs\dlrussia-bot-fHuGJ00--py3.7\lib\site-packages\pyrogram\session\internals\msg_factory.py", line 38, in __call__
    len(body)
  File "C:\Users\sviat\AppData\Local\pypoetry\Cache\virtualenvs\dlrussia-bot-fHuGJ00--py3.7\lib\site-packages\pyrogram\api\core\tl_object.py", line 76, in __len__
    return len(self.write())
  File "C:\Users\sviat\AppData\Local\pypoetry\Cache\virtualenvs\dlrussia-bot-fHuGJ00--py3.7\lib\site-packages\pyrogram\api\functions\messages\set_inline_bot_results.py", line 88, in write
    b.write(Vector(self.results))
  File "C:\Users\sviat\AppData\Local\pypoetry\Cache\virtualenvs\dlrussia-bot-fHuGJ00--py3.7\lib\site-packages\pyrogram\api\core\primitives\vector.py", line 53, in __new__
    for i in value
  File "C:\Users\sviat\AppData\Local\pypoetry\Cache\virtualenvs\dlrussia-bot-fHuGJ00--py3.7\lib\site-packages\pyrogram\api\core\primitives\vector.py", line 53, in <listcomp>
    for i in value
  File "C:\Users\sviat\AppData\Local\pypoetry\Cache\virtualenvs\dlrussia-bot-fHuGJ00--py3.7\lib\site-packages\pyrogram\api\types\input_bot_inline_result.py", line 107, in write
    b.write(self.send_message.write())
  File "C:\Users\sviat\AppData\Local\pypoetry\Cache\virtualenvs\dlrussia-bot-fHuGJ00--py3.7\lib\site-packages\pyrogram\api\types\input_bot_inline_message_text.py", line 75, in write
    b.write(Vector(self.entities))
  File "C:\Users\sviat\AppData\Local\pypoetry\Cache\virtualenvs\dlrussia-bot-fHuGJ00--py3.7\lib\site-packages\pyrogram\api\core\primitives\vector.py", line 53, in __new__
    for i in value
  File "C:\Users\sviat\AppData\Local\pypoetry\Cache\virtualenvs\dlrussia-bot-fHuGJ00--py3.7\lib\site-packages\pyrogram\api\core\primitives\vector.py", line 53, in <listcomp>
    for i in value
  File "C:\Users\sviat\AppData\Local\pypoetry\Cache\virtualenvs\dlrussia-bot-fHuGJ00--py3.7\lib\site-packages\pyrogram\api\types\input_message_entity_mention_name.py", line 69, in write
    b.write(self.user_id.write())
AttributeError: 'int' object has no attribute 'write'
@sviat9440
Copy link
Author

@sviat9440 sviat9440 commented Jun 21, 2020

This temporary solved this issue:

class InputTextMessageContent(pyrogram.InputMessageContent):
    def __init__(
            self,
            message_text: str,
            parse_mode: Union[str, None] = object,
            disable_web_page_preview: bool = None,
            client: "pyrogram.BaseClient" = None,
    ):
        super().__init__()

        self.message_text = message_text
        self.parse_mode = parse_mode
        self.disable_web_page_preview = disable_web_page_preview
        self.client = client

    def write(self, reply_markup):
        return types.InputBotInlineMessageText(
            no_webpage=self.disable_web_page_preview or None,
            reply_markup=reply_markup.write() if reply_markup else None,
            **(Parser(self.client)).parse(self.message_text, self.parse_mode)
        )
@delivrance
Copy link
Member

@delivrance delivrance commented Jul 3, 2020

@sviat9440 Hi, that of course solves the problem, but the main issue is that now you need to pass a client reference to InputTextMessageContent, which is something I wanted to avoid.

@sviat9440
Copy link
Author

@sviat9440 sviat9440 commented Jul 15, 2020

I understand of course. But I have no other choice yet.

@nocturn9x
Copy link

@nocturn9x nocturn9x commented Nov 25, 2020

Just a small update on this: the provided example does not work as-is with pyrogram 1.0.x. Since this does not appear to be fixed yet I'll include here an updated patch that works with the latest stable release

from typing import Union
from pyrogram import Client
from pyrogram.parser import Parser
from pyrogram.raw.types import InputBotInlineMessageText


class InputTextMessageContent(InputMessageContent):
    """
    see https://github.com/pyrogram/pyrogram/issues/428
    """

    def __init__(
            self,
            message_text: str,
            parse_mode: Union[str, None] = object,
            disable_web_page_preview: bool = None,
            client: Client = None,
    ):
        super().__init__()

        self.message_text = message_text
        self.parse_mode = parse_mode
        self.disable_web_page_preview = disable_web_page_preview
        self.client = client

    async def write(self, reply_markup):
        parser = Parser(self.client)
        return InputBotInlineMessageText(
            no_webpage=self.disable_web_page_preview or None,
            reply_markup=reply_markup.write() if reply_markup else None,
            **(await parser.parse(self.message_text, self.parse_mode)
               )
        )

I've added the imports as well so that one does not need to dig into pyrogram's source code to figure out where to import everything like I had to do

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
3 participants
You can’t perform that action at this time.
X Tutup