mirror of
https://github.com/TeamPGM/pyrogram.git
synced 2024-11-16 20:59:29 +00:00
Cache stickers
This commit is contained in:
parent
ac8258f451
commit
e9a362923f
@ -17,8 +17,8 @@
|
|||||||
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
|
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
import pyrogram
|
import pyrogram
|
||||||
from pyrogram.api import types, functions
|
from pyrogram.api import types
|
||||||
from pyrogram.api.errors import MessageIdsEmpty, StickersetInvalid
|
from pyrogram.api.errors import MessageIdsEmpty
|
||||||
from .contact import Contact
|
from .contact import Contact
|
||||||
from .location import Location
|
from .location import Location
|
||||||
from .message_entity import MessageEntity
|
from .message_entity import MessageEntity
|
||||||
@ -442,21 +442,12 @@ class Message(PyrogramType):
|
|||||||
else:
|
else:
|
||||||
video = pyrogram.Video.parse(client, doc, video_attributes, file_name)
|
video = pyrogram.Video.parse(client, doc, video_attributes, file_name)
|
||||||
elif types.DocumentAttributeSticker in attributes:
|
elif types.DocumentAttributeSticker in attributes:
|
||||||
image_size_attributes = attributes.get(types.DocumentAttributeImageSize, None)
|
sticker = pyrogram.Sticker.parse(
|
||||||
sticker_attribute = attributes[types.DocumentAttributeSticker]
|
client, doc,
|
||||||
|
attributes.get(types.DocumentAttributeImageSize, None),
|
||||||
if isinstance(sticker_attribute.stickerset, types.InputStickerSetID):
|
attributes[types.DocumentAttributeSticker],
|
||||||
try:
|
file_name
|
||||||
set_name = client.send(
|
)
|
||||||
functions.messages.GetStickerSet(sticker_attribute.stickerset)
|
|
||||||
).set.short_name
|
|
||||||
except StickersetInvalid:
|
|
||||||
set_name = None
|
|
||||||
else:
|
|
||||||
set_name = None
|
|
||||||
|
|
||||||
sticker = pyrogram.Sticker.parse(client, doc, image_size_attributes,
|
|
||||||
set_name, sticker_attribute, file_name)
|
|
||||||
else:
|
else:
|
||||||
document = pyrogram.Document.parse(client, doc, file_name)
|
document = pyrogram.Document.parse(client, doc, file_name)
|
||||||
elif isinstance(media, types.MessageMediaWebPage):
|
elif isinstance(media, types.MessageMediaWebPage):
|
||||||
@ -517,12 +508,6 @@ class Message(PyrogramType):
|
|||||||
raw=message
|
raw=message
|
||||||
)
|
)
|
||||||
|
|
||||||
if parsed_message.text:
|
|
||||||
parsed_message.text.init(parsed_message._client, parsed_message.entities or [])
|
|
||||||
|
|
||||||
if parsed_message.caption:
|
|
||||||
parsed_message.caption.init(parsed_message._client, parsed_message.caption_entities or [])
|
|
||||||
|
|
||||||
if message.reply_to_msg_id and replies:
|
if message.reply_to_msg_id and replies:
|
||||||
try:
|
try:
|
||||||
parsed_message.reply_to_message = client.get_messages(
|
parsed_message.reply_to_message = client.get_messages(
|
||||||
|
@ -16,9 +16,11 @@
|
|||||||
# 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 functools import lru_cache
|
||||||
from struct import pack
|
from struct import pack
|
||||||
|
|
||||||
from pyrogram.api import types
|
from pyrogram.api import types, functions
|
||||||
|
from pyrogram.api.errors import StickersetInvalid
|
||||||
from .photo_size import PhotoSize
|
from .photo_size import PhotoSize
|
||||||
from ..pyrogram_type import PyrogramType
|
from ..pyrogram_type import PyrogramType
|
||||||
from ...ext.utils import encode
|
from ...ext.utils import encode
|
||||||
@ -79,8 +81,28 @@ class Sticker(PyrogramType):
|
|||||||
self.mask_position = mask_position
|
self.mask_position = mask_position
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def parse(client, sticker: types.Document, image_size_attributes: types.DocumentAttributeImageSize, set_name: str,
|
@lru_cache(maxsize=256)
|
||||||
|
def get_sticker_set_name(send, input_sticker_set_id):
|
||||||
|
try:
|
||||||
|
return send(
|
||||||
|
functions.messages.GetStickerSet(
|
||||||
|
types.InputStickerSetID(*input_sticker_set_id)
|
||||||
|
)
|
||||||
|
).set.short_name
|
||||||
|
except StickersetInvalid:
|
||||||
|
return None
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def parse(client, sticker: types.Document, image_size_attributes: types.DocumentAttributeImageSize,
|
||||||
sticker_attributes: types.DocumentAttributeSticker, file_name: str) -> "Sticker":
|
sticker_attributes: types.DocumentAttributeSticker, file_name: str) -> "Sticker":
|
||||||
|
sticker_set = sticker_attributes.stickerset
|
||||||
|
|
||||||
|
if isinstance(sticker_set, types.InputStickerSetID):
|
||||||
|
input_sticker_set_id = (sticker_set.id, sticker_set.access_hash)
|
||||||
|
set_name = Sticker.get_sticker_set_name(client.send, input_sticker_set_id)
|
||||||
|
else:
|
||||||
|
set_name = None
|
||||||
|
|
||||||
return Sticker(
|
return Sticker(
|
||||||
file_id=encode(
|
file_id=encode(
|
||||||
pack(
|
pack(
|
||||||
|
Loading…
Reference in New Issue
Block a user