Add support for user mentions inside inline query results
This commit is contained in:
parent
182768a5d3
commit
2eb7ab2f6e
@ -97,7 +97,7 @@ class AnswerInlineQuery(Scaffold):
|
||||
return await self.send(
|
||||
raw.functions.messages.SetInlineBotResults(
|
||||
query_id=int(inline_query_id),
|
||||
results=[await r.write() for r in results],
|
||||
results=[await r.write(self) for r in results],
|
||||
cache_time=cache_time,
|
||||
gallery=is_gallery or None,
|
||||
private=is_personal or None,
|
||||
|
@ -54,8 +54,23 @@ class InlineKeyboardMarkup(Object):
|
||||
)
|
||||
|
||||
async def write(self, client: "pyrogram.Client"):
|
||||
return raw.types.ReplyInlineMarkup(
|
||||
rows=[raw.types.KeyboardButtonRow(
|
||||
buttons=[await j.write(client) for j in i]
|
||||
) for i in self.inline_keyboard]
|
||||
)
|
||||
rows = []
|
||||
|
||||
for r in self.inline_keyboard:
|
||||
buttons = []
|
||||
|
||||
for b in r:
|
||||
buttons.append(await b.write(client))
|
||||
|
||||
rows.append(raw.types.KeyboardButtonRow(buttons=buttons))
|
||||
|
||||
return raw.types.ReplyInlineMarkup(rows=rows)
|
||||
|
||||
# There seems to be a Python issues with nested async comprehensions.
|
||||
# See: https://bugs.python.org/issue33346
|
||||
#
|
||||
# return raw.types.ReplyInlineMarkup(
|
||||
# rows=[raw.types.KeyboardButtonRow(
|
||||
# buttons=[await j.write(client) for j in i]
|
||||
# ) for i in self.inline_keyboard]
|
||||
# )
|
||||
|
@ -18,6 +18,7 @@
|
||||
|
||||
from uuid import uuid4
|
||||
|
||||
import pyrogram
|
||||
from pyrogram import types
|
||||
from ..object import Object
|
||||
|
||||
@ -66,5 +67,5 @@ class InlineQueryResult(Object):
|
||||
self.input_message_content = input_message_content
|
||||
self.reply_markup = reply_markup
|
||||
|
||||
async def write(self):
|
||||
async def write(self, client: "pyrogram.Client"):
|
||||
pass
|
||||
|
@ -16,11 +16,10 @@
|
||||
# You should have received a copy of the GNU Lesser General Public License
|
||||
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from typing import Optional
|
||||
from typing import Optional, List
|
||||
|
||||
from pyrogram import raw
|
||||
from pyrogram import types
|
||||
from pyrogram.parser import Parser
|
||||
import pyrogram
|
||||
from pyrogram import raw, types, utils
|
||||
from .inline_query_result import InlineQueryResult
|
||||
|
||||
|
||||
@ -60,6 +59,9 @@ class InlineQueryResultAnimation(InlineQueryResult):
|
||||
Pass "html" to enable HTML-style parsing only.
|
||||
Pass None to completely disable style parsing.
|
||||
|
||||
caption_entities (List of :obj:`~pyrogram.types.MessageEntity`):
|
||||
List of special entities that appear in the caption, which can be specified instead of *parse_mode*.
|
||||
|
||||
reply_markup (:obj:`~pyrogram.types.InlineKeyboardMarkup`, *optional*):
|
||||
An InlineKeyboardMarkup object.
|
||||
|
||||
@ -76,6 +78,7 @@ class InlineQueryResultAnimation(InlineQueryResult):
|
||||
description: str = None,
|
||||
caption: str = "",
|
||||
parse_mode: Optional[str] = object,
|
||||
caption_entities: List["types.MessageEntity"] = None,
|
||||
reply_markup: "types.InlineKeyboardMarkup" = None,
|
||||
input_message_content: "types.InputMessageContent" = None
|
||||
):
|
||||
@ -87,10 +90,11 @@ class InlineQueryResultAnimation(InlineQueryResult):
|
||||
self.description = description
|
||||
self.caption = caption
|
||||
self.parse_mode = parse_mode
|
||||
self.caption_entities = caption_entities
|
||||
self.reply_markup = reply_markup
|
||||
self.input_message_content = input_message_content
|
||||
|
||||
async def write(self):
|
||||
async def write(self, client: "pyrogram.Client"):
|
||||
animation = raw.types.InputWebDocument(
|
||||
url=self.animation_url,
|
||||
size=0,
|
||||
@ -108,6 +112,10 @@ class InlineQueryResultAnimation(InlineQueryResult):
|
||||
attributes=[]
|
||||
)
|
||||
|
||||
message, entities = (await utils.parse_text_entities(
|
||||
client, self.caption, self.parse_mode, self.caption_entities
|
||||
)).values()
|
||||
|
||||
return raw.types.InputBotInlineResult(
|
||||
id=self.id,
|
||||
type=self.type,
|
||||
@ -116,11 +124,12 @@ class InlineQueryResultAnimation(InlineQueryResult):
|
||||
thumb=thumb,
|
||||
content=animation,
|
||||
send_message=(
|
||||
self.input_message_content.write(self.reply_markup)
|
||||
self.input_message_content.write(client, self.reply_markup)
|
||||
if self.input_message_content
|
||||
else raw.types.InputBotInlineMessageMediaAuto(
|
||||
reply_markup=self.reply_markup.write() if self.reply_markup else None,
|
||||
**await(Parser(None)).parse(self.caption, self.parse_mode)
|
||||
reply_markup=await self.reply_markup.write(client) if self.reply_markup else None,
|
||||
message=message,
|
||||
entities=entities
|
||||
)
|
||||
)
|
||||
)
|
||||
|
@ -16,6 +16,7 @@
|
||||
# You should have received a copy of the GNU Lesser General Public License
|
||||
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import pyrogram
|
||||
from pyrogram import raw
|
||||
from pyrogram import types
|
||||
|
||||
@ -66,11 +67,11 @@ class InlineQueryResultArticle(InlineQueryResult):
|
||||
self.description = description
|
||||
self.thumb_url = thumb_url
|
||||
|
||||
async def write(self):
|
||||
async def write(self, client: "pyrogram.Client"):
|
||||
return raw.types.InputBotInlineResult(
|
||||
id=self.id,
|
||||
type=self.type,
|
||||
send_message=await self.input_message_content.write(self.reply_markup),
|
||||
send_message=await self.input_message_content.write(client, self.reply_markup),
|
||||
title=self.title,
|
||||
description=self.description,
|
||||
url=self.url,
|
||||
|
@ -16,11 +16,10 @@
|
||||
# You should have received a copy of the GNU Lesser General Public License
|
||||
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from typing import Optional
|
||||
from typing import Optional, List
|
||||
|
||||
from pyrogram import raw
|
||||
from pyrogram import types
|
||||
from pyrogram.parser import Parser
|
||||
import pyrogram
|
||||
from pyrogram import raw, types, utils
|
||||
from .inline_query_result import InlineQueryResult
|
||||
|
||||
|
||||
@ -60,6 +59,9 @@ class InlineQueryResultPhoto(InlineQueryResult):
|
||||
Pass "html" to enable HTML-style parsing only.
|
||||
Pass None to completely disable style parsing.
|
||||
|
||||
caption_entities (List of :obj:`~pyrogram.types.MessageEntity`):
|
||||
List of special entities that appear in the caption, which can be specified instead of *parse_mode*.
|
||||
|
||||
reply_markup (:obj:`~pyrogram.types.InlineKeyboardMarkup`, *optional*):
|
||||
An InlineKeyboardMarkup object.
|
||||
|
||||
@ -76,6 +78,7 @@ class InlineQueryResultPhoto(InlineQueryResult):
|
||||
description: str = None,
|
||||
caption: str = "",
|
||||
parse_mode: Optional[str] = object,
|
||||
caption_entities: List["types.MessageEntity"] = None,
|
||||
reply_markup: "types.InlineKeyboardMarkup" = None,
|
||||
input_message_content: "types.InputMessageContent" = None
|
||||
):
|
||||
@ -87,10 +90,11 @@ class InlineQueryResultPhoto(InlineQueryResult):
|
||||
self.description = description
|
||||
self.caption = caption
|
||||
self.parse_mode = parse_mode
|
||||
self.caption_entities = caption_entities
|
||||
self.reply_markup = reply_markup
|
||||
self.input_message_content = input_message_content
|
||||
|
||||
async def write(self):
|
||||
async def write(self, client: "pyrogram.Client"):
|
||||
photo = raw.types.InputWebDocument(
|
||||
url=self.photo_url,
|
||||
size=0,
|
||||
@ -108,6 +112,10 @@ class InlineQueryResultPhoto(InlineQueryResult):
|
||||
attributes=[]
|
||||
)
|
||||
|
||||
message, entities = (await utils.parse_text_entities(
|
||||
client, self.caption, self.parse_mode, self.caption_entities
|
||||
)).values()
|
||||
|
||||
return raw.types.InputBotInlineResult(
|
||||
id=self.id,
|
||||
type=self.type,
|
||||
@ -116,11 +124,12 @@ class InlineQueryResultPhoto(InlineQueryResult):
|
||||
thumb=thumb,
|
||||
content=photo,
|
||||
send_message=(
|
||||
await self.input_message_content.write(self.reply_markup)
|
||||
await self.input_message_content.write(client, self.reply_markup)
|
||||
if self.input_message_content
|
||||
else raw.types.InputBotInlineMessageMediaAuto(
|
||||
reply_markup=self.reply_markup.write() if self.reply_markup else None,
|
||||
**await(Parser(None)).parse(self.caption, self.parse_mode)
|
||||
reply_markup=await self.reply_markup.write(client) if self.reply_markup else None,
|
||||
message=message,
|
||||
entities=entities
|
||||
)
|
||||
)
|
||||
)
|
||||
|
@ -16,6 +16,8 @@
|
||||
# You should have received a copy of the GNU Lesser General Public License
|
||||
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import pyrogram
|
||||
|
||||
from ..object import Object
|
||||
|
||||
"""- :obj:`~pyrogram.types.InputLocationMessageContent`
|
||||
@ -34,5 +36,5 @@ class InputMessageContent(Object):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
|
||||
def write(self, reply_markup):
|
||||
async def write(self, client: "pyrogram.Client", reply_markup):
|
||||
raise NotImplementedError
|
||||
|
@ -16,10 +16,10 @@
|
||||
# You should have received a copy of the GNU Lesser General Public License
|
||||
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from typing import Optional
|
||||
from typing import Optional, List
|
||||
|
||||
from pyrogram import raw
|
||||
from pyrogram.parser import Parser
|
||||
import pyrogram
|
||||
from pyrogram import raw, types, utils
|
||||
from .input_message_content import InputMessageContent
|
||||
|
||||
|
||||
@ -37,20 +37,35 @@ class InputTextMessageContent(InputMessageContent):
|
||||
Pass "html" to enable HTML-style parsing only.
|
||||
Pass None to completely disable style parsing.
|
||||
|
||||
entities (List of :obj:`~pyrogram.types.MessageEntity`):
|
||||
List of special entities that appear in message text, which can be specified instead of *parse_mode*.
|
||||
|
||||
disable_web_page_preview (``bool``, *optional*):
|
||||
Disables link previews for links in this message.
|
||||
"""
|
||||
|
||||
def __init__(self, message_text: str, parse_mode: Optional[str] = object, disable_web_page_preview: bool = None):
|
||||
def __init__(
|
||||
self,
|
||||
message_text: str,
|
||||
parse_mode: Optional[str] = object,
|
||||
entities: List["types.MessageEntity"] = None,
|
||||
disable_web_page_preview: bool = None
|
||||
):
|
||||
super().__init__()
|
||||
|
||||
self.message_text = message_text
|
||||
self.parse_mode = parse_mode
|
||||
self.entities = entities
|
||||
self.disable_web_page_preview = disable_web_page_preview
|
||||
|
||||
async def write(self, reply_markup):
|
||||
async def write(self, client: "pyrogram.Client", reply_markup):
|
||||
message, entities = (await utils.parse_text_entities(
|
||||
client, self.message_text, self.parse_mode, self.entities
|
||||
)).values()
|
||||
|
||||
return raw.types.InputBotInlineMessageText(
|
||||
no_webpage=self.disable_web_page_preview or None,
|
||||
reply_markup=reply_markup.write() if reply_markup else None,
|
||||
**await(Parser(None)).parse(self.message_text, self.parse_mode)
|
||||
reply_markup=await reply_markup.write(client) if reply_markup else None,
|
||||
message=message,
|
||||
entities=entities
|
||||
)
|
||||
|
Loading…
Reference in New Issue
Block a user