mirror of
https://github.com/TeamPGM/pyrogram.git
synced 2024-11-17 21:22:40 +00:00
Implement InlineQueryResultCachedAudio
This commit is contained in:
parent
797a0df087
commit
c94c79edac
@ -32,7 +32,7 @@ from .client.types import (
|
|||||||
Location, Message, MessageEntity, Dialog, Dialogs, Photo, PhotoSize, Sticker, Update, User,
|
Location, Message, MessageEntity, Dialog, Dialogs, Photo, PhotoSize, Sticker, Update, User,
|
||||||
UserProfilePhotos, Venue, Animation, Video, VideoNote, Voice, CallbackQuery, Messages, ForceReply,
|
UserProfilePhotos, Venue, Animation, Video, VideoNote, Voice, CallbackQuery, Messages, ForceReply,
|
||||||
InlineKeyboardButton, InlineKeyboardMarkup, KeyboardButton, ReplyKeyboardMarkup, ReplyKeyboardRemove,
|
InlineKeyboardButton, InlineKeyboardMarkup, KeyboardButton, ReplyKeyboardMarkup, ReplyKeyboardRemove,
|
||||||
InlineQuery, InlineQueryResultArticle, InlineQueryResultPhoto, InputTextMessageContent
|
InlineQuery, InlineQueryResultArticle, InlineQueryResultPhoto, InputTextMessageContent, InlineQueryResultCachedAudio
|
||||||
)
|
)
|
||||||
from .client import (
|
from .client import (
|
||||||
Client, ChatAction, ParseMode, Emoji,
|
Client, ChatAction, ParseMode, Emoji,
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
from .bots import (
|
from .bots import (
|
||||||
CallbackQuery, ForceReply, InlineKeyboardButton, InlineKeyboardMarkup,
|
CallbackQuery, ForceReply, InlineKeyboardButton, InlineKeyboardMarkup,
|
||||||
KeyboardButton, ReplyKeyboardMarkup, ReplyKeyboardRemove, InlineQuery,
|
KeyboardButton, ReplyKeyboardMarkup, ReplyKeyboardRemove, InlineQuery,
|
||||||
InlineQueryResultArticle, InlineQueryResultPhoto
|
InlineQueryResultArticle, InlineQueryResultPhoto, InlineQueryResultCachedAudio
|
||||||
)
|
)
|
||||||
from .bots import (
|
from .bots import (
|
||||||
ForceReply, InlineKeyboardButton, InlineKeyboardMarkup,
|
ForceReply, InlineKeyboardButton, InlineKeyboardMarkup,
|
||||||
|
@ -16,45 +16,87 @@
|
|||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public License
|
||||||
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
|
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
from pyrogram.api.core import Object
|
import binascii
|
||||||
|
import struct
|
||||||
|
|
||||||
|
from pyrogram.api import types
|
||||||
|
from pyrogram.api.errors import FileIdInvalid
|
||||||
|
from pyrogram.client.ext import utils, BaseClient
|
||||||
|
from pyrogram.client.style import HTML, Markdown
|
||||||
|
|
||||||
|
|
||||||
class InlineQueryResultCachedAudio(Object):
|
class InlineQueryResultCachedAudio:
|
||||||
"""Represents a link to an mp3 audio file stored on the Telegram servers. By default, this audio file will be sent by the user. Alternatively, you can use input_message_content to send a message with the specified content instead of the audio.
|
"""Represents a link to an audio file stored on the Telegram servers.
|
||||||
|
By default, this audio file will be sent by the user. Alternatively, you can use *input_message_content* to send a
|
||||||
Attributes:
|
message with the specified content instead of the audio.
|
||||||
ID: ``0xb0700018``
|
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
type (``str``):
|
|
||||||
Type of the result, must be audio.
|
|
||||||
|
|
||||||
id (``str``):
|
id (``str``):
|
||||||
Unique identifier for this result, 1-64 bytes.
|
Unique identifier for this result, 1-64 bytes.
|
||||||
|
|
||||||
audio_file_id (``str``):
|
audio_file_id (``str``):
|
||||||
A valid file identifier for the audio file.
|
A valid file identifier for the audio file.
|
||||||
|
|
||||||
caption (``str``, optional):
|
caption (``str``, *optional*):
|
||||||
Caption, 0-200 characters.
|
Caption, 0-200 characters.
|
||||||
|
|
||||||
parse_mode (``str``, optional):
|
parse_mode (``str``, *optional*):
|
||||||
Send Markdown or HTML, if you want Telegram apps to show bold, italic, fixed-width text or inline URLs in the media caption.
|
Send Markdown or HTML, if you want Telegram apps to show bold, italic, fixed-width text or inline URLs in
|
||||||
|
the media caption.
|
||||||
|
|
||||||
reply_markup (:obj:`InlineKeyboardMarkup <pyrogram.types.InlineKeyboardMarkup>`, optional):
|
reply_markup (:obj:`InlineKeyboardMarkup <pyrogram.types.InlineKeyboardMarkup>`, *optional*):
|
||||||
Inline keyboard attached to the message.
|
Inline keyboard attached to the message.
|
||||||
|
|
||||||
input_message_content (:obj:`InputMessageContent <pyrogram.types.InputMessageContent>`, optional):
|
input_message_content (:obj:`InputMessageContent <pyrogram.types.InputMessageContent>`, *optional*):
|
||||||
Content of the message to be sent instead of the audio.
|
Content of the message to be sent instead of the audio.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
ID = 0xb0700018
|
|
||||||
|
|
||||||
def __init__(self, type: str, id: str, audio_file_id: str, caption: str = None, parse_mode: str = None, reply_markup=None, input_message_content=None):
|
def __init__(
|
||||||
self.type = type # string
|
self,
|
||||||
self.id = id # string
|
id: str,
|
||||||
self.audio_file_id = audio_file_id # string
|
audio_file_id: str,
|
||||||
self.caption = caption # flags.0?string
|
caption: str = "",
|
||||||
self.parse_mode = parse_mode # flags.1?string
|
parse_mode: str = "",
|
||||||
self.reply_markup = reply_markup # flags.2?InlineKeyboardMarkup
|
reply_markup=None,
|
||||||
self.input_message_content = input_message_content # flags.3?InputMessageContent
|
input_message_content=None
|
||||||
|
):
|
||||||
|
self.id = id
|
||||||
|
self.audio_file_id = audio_file_id
|
||||||
|
self.caption = caption
|
||||||
|
self.parse_mode = parse_mode
|
||||||
|
self.reply_markup = reply_markup
|
||||||
|
self.input_message_content = input_message_content
|
||||||
|
|
||||||
|
self.style = HTML() if parse_mode.lower() == "html" else Markdown()
|
||||||
|
|
||||||
|
def write(self):
|
||||||
|
try:
|
||||||
|
decoded = utils.decode(self.audio_file_id)
|
||||||
|
fmt = "<iiqqqqi" if len(decoded) > 24 else "<iiqq"
|
||||||
|
unpacked = struct.unpack(fmt, decoded)
|
||||||
|
except (AssertionError, binascii.Error, struct.error):
|
||||||
|
raise FileIdInvalid from None
|
||||||
|
else:
|
||||||
|
if unpacked[0] != 9:
|
||||||
|
media_type = BaseClient.MEDIA_TYPE_ID.get(unpacked[0], None)
|
||||||
|
|
||||||
|
if media_type:
|
||||||
|
raise FileIdInvalid("The file_id belongs to a {}".format(media_type))
|
||||||
|
else:
|
||||||
|
raise FileIdInvalid("Unknown media type: {}".format(unpacked[0]))
|
||||||
|
|
||||||
|
audio = types.InputDocument(
|
||||||
|
id=unpacked[2],
|
||||||
|
access_hash=unpacked[3]
|
||||||
|
)
|
||||||
|
|
||||||
|
return types.InputBotInlineResultDocument(
|
||||||
|
id=self.id,
|
||||||
|
type="audio",
|
||||||
|
document=audio,
|
||||||
|
send_message=types.InputBotInlineMessageMediaAuto(
|
||||||
|
reply_markup=self.reply_markup.write() if self.reply_markup else None,
|
||||||
|
**self.style.parse(self.caption)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
Loading…
Reference in New Issue
Block a user