From 5fdb361487f58fba9bd475dc060ace204dc2723d Mon Sep 17 00:00:00 2001
From: Dan <14043624+delivrance@users.noreply.github.com>
Date: Wed, 12 May 2021 09:11:52 +0200
Subject: [PATCH] Fixes for InlineQueryResult{Audio,Video}
---
.../inline_mode/inline_query_result_audio.py | 35 ++++----
.../inline_mode/inline_query_result_video.py | 80 ++++++++++++-------
2 files changed, 66 insertions(+), 49 deletions(-)
diff --git a/pyrogram/types/inline_mode/inline_query_result_audio.py b/pyrogram/types/inline_mode/inline_query_result_audio.py
index 48f88271..46e9a360 100644
--- a/pyrogram/types/inline_mode/inline_query_result_audio.py
+++ b/pyrogram/types/inline_mode/inline_query_result_audio.py
@@ -16,11 +16,10 @@
# You should have received a copy of the GNU Lesser General Public License
# along with Pyrogram. If not, see .
-from typing import Union
+from typing import Union, List
-from pyrogram import raw
-from pyrogram import types
-from pyrogram.parser import Parser
+import pyrogram
+from pyrogram import raw, types, utils
from pyrogram.types import InlineQueryResult
@@ -69,17 +68,17 @@ class InlineQueryResultAudio(InlineQueryResult):
"""
def __init__(
- self,
- audio_url: str,
- title: str,
- id: str = None,
- performer: str = "",
- audio_duration: int = 0,
- caption: str = "",
- parse_mode: Union[str, None] = object,
- caption_entities: List["types.MessageEntity"] = None,
- reply_markup: "types.InlineKeyboardMarkup" = None,
- input_message_content: "types.InputMessageContent" = None
+ self,
+ audio_url: str,
+ title: str,
+ id: str = None,
+ performer: str = "",
+ audio_duration: int = 0,
+ caption: str = "",
+ parse_mode: Union[str, None] = object,
+ caption_entities: List["types.MessageEntity"] = None,
+ reply_markup: "types.InlineKeyboardMarkup" = None,
+ input_message_content: "types.InputMessageContent" = None
):
super().__init__("audio", id, input_message_content, reply_markup)
@@ -91,7 +90,7 @@ class InlineQueryResultAudio(InlineQueryResult):
self.parse_mode = parse_mode
self.caption_entities = caption_entities
- async def write(self):
+ async def write(self, client: "pyrogram.Client"):
audio = raw.types.InputWebDocument(
url=self.audio_url,
size=0,
@@ -100,9 +99,9 @@ class InlineQueryResultAudio(InlineQueryResult):
duration=self.audio_duration,
title=self.title,
performer=self.performer
- )],
+ )]
)
-
+
message, entities = (await utils.parse_text_entities(
client, self.caption, self.parse_mode, self.caption_entities
)).values()
diff --git a/pyrogram/types/inline_mode/inline_query_result_video.py b/pyrogram/types/inline_mode/inline_query_result_video.py
index 8375fd89..ca0ffda2 100644
--- a/pyrogram/types/inline_mode/inline_query_result_video.py
+++ b/pyrogram/types/inline_mode/inline_query_result_video.py
@@ -16,18 +16,17 @@
# You should have received a copy of the GNU Lesser General Public License
# along with Pyrogram. If not, see .
-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
class InlineQueryResultVideo(InlineQueryResult):
- """Link to a video.
+ """Link to a page containing an embedded video player or a video file.
- By default, this video will be sent by the user with optional caption.
+ By default, this video file will be sent by the user with an optional caption.
Alternatively, you can use *input_message_content* to send a message with the specified content instead of the
video.
@@ -38,21 +37,31 @@ class InlineQueryResultVideo(InlineQueryResult):
thumb_url (``str``):
URL of the thumbnail (jpeg only) for the video.
+ title (``str``):
+ Title for the result.
+
id (``str``, *optional*):
Unique identifier for this result, 1-64 bytes.
Defaults to a randomly generated UUID4.
- title (``str``, *optional*):
- Title for the result.
+ mime_type (``str``):
+ Mime type of the content of video url, "text/html" or "video/mp4".
+ Defaults to "video/mp4".
- mime_type (``str``, *optional*):
- Mime type of the content of video url, “text/html” or “video/mp4”.
+ video_width (``int``):
+ Video width.
+
+ video_height (``int``):
+ Video height.
+
+ video_duration (``int``):
+ Video duration in seconds.
description (``str``, *optional*):
Short description of the result.
caption (``str``, *optional*):
- Caption of the video to be sent, 0-1024 characters.
+ Caption of the photo to be sent, 0-1024 characters.
parse_mode (``str``, *optional*):
By default, texts are parsed using both Markdown and HTML styles.
@@ -61,8 +70,11 @@ class InlineQueryResultVideo(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.
+ Inline keyboard attached to the message
input_message_content (:obj:`~pyrogram.types.InputMessageContent`):
Content of the message to be sent instead of the video. This field is required if InlineQueryResultVideo is
@@ -73,42 +85,43 @@ class InlineQueryResultVideo(InlineQueryResult):
self,
video_url: str,
thumb_url: str,
+ title: str,
id: str = None,
- title: str = None,
- mime_type: str = None,
+ mime_type: str = "video/mp4",
+ video_width: int = 0,
+ video_height: int = 0,
+ video_duration: int = 0,
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
):
super().__init__("video", id, input_message_content, reply_markup)
self.video_url = video_url
-
self.thumb_url = thumb_url
self.title = title
-
- if mime_type != "text/html" and mime_type != "video/mp4":
- raise ValueError("Invalid mime type")
-
- self.mime_type = mime_type
+ self.video_width = video_width
+ self.video_height = video_height
+ self.video_duration = video_duration
self.description = description
self.caption = caption
self.parse_mode = parse_mode
- self.reply_markup = reply_markup
+ self.caption_entities = caption_entities
+ self.mime_type = mime_type
- if mime_type == "text/html" and input_message_content is None:
- raise ValueError("input_message_content is required for videos with `text/html` mime type")
-
- self.input_message_content = input_message_content
-
- async def write(self):
+ async def write(self, client: "pyrogram.Client"):
video = raw.types.InputWebDocument(
url=self.video_url,
size=0,
mime_type=self.mime_type,
- attributes=[]
+ attributes=[raw.types.DocumentAttributeVideo(
+ duration=self.video_duration,
+ w=self.video_width,
+ h=self.video_height
+ )]
)
thumb = raw.types.InputWebDocument(
@@ -118,6 +131,10 @@ class InlineQueryResultVideo(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,
@@ -126,11 +143,12 @@ class InlineQueryResultVideo(InlineQueryResult):
thumb=thumb,
content=video,
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
)
)
)