Add support for GIF files

This commit is contained in:
Dan 2018-05-11 11:56:27 +02:00
parent 31635327ca
commit 84f9c2145c
8 changed files with 102 additions and 3 deletions

View File

@ -494,6 +494,7 @@ def start():
f.write("\n 0xb0700015: \"pyrogram.client.types.ChatPhoto\",") f.write("\n 0xb0700015: \"pyrogram.client.types.ChatPhoto\",")
f.write("\n 0xb0700016: \"pyrogram.client.types.ChatMember\",") f.write("\n 0xb0700016: \"pyrogram.client.types.ChatMember\",")
f.write("\n 0xb0700017: \"pyrogram.client.types.Sticker\",") f.write("\n 0xb0700017: \"pyrogram.client.types.Sticker\",")
f.write("\n 0xb0700025: \"pyrogram.client.types.GIF\",")
f.write("\n 0xb0700018: \"pyrogram.client.types.reply_markup.ForceReply\",") f.write("\n 0xb0700018: \"pyrogram.client.types.reply_markup.ForceReply\",")
f.write("\n 0xb0700019: \"pyrogram.client.types.reply_markup.InlineKeyboardButton\",") f.write("\n 0xb0700019: \"pyrogram.client.types.reply_markup.InlineKeyboardButton\",")

View File

@ -0,0 +1,5 @@
GIF
===
.. autoclass:: pyrogram.GIF
:members:

View File

@ -12,6 +12,7 @@ Types
PhotoSize PhotoSize
Audio Audio
Document Document
GIF
Video Video
Voice Voice
VideoNote VideoNote

View File

@ -29,7 +29,7 @@ from .api.errors import Error
from .client.types import ( from .client.types import (
Audio, Chat, ChatMember, ChatPhoto, Contact, Document, InputMediaPhoto, Audio, Chat, ChatMember, ChatPhoto, Contact, Document, InputMediaPhoto,
InputMediaVideo, InputPhoneContact, Location, Message, MessageEntity, InputMediaVideo, InputPhoneContact, Location, Message, MessageEntity,
PhotoSize, Sticker, Update, User, UserProfilePhotos, Venue, Video, PhotoSize, Sticker, Update, User, UserProfilePhotos, Venue, GIF, Video,
VideoNote, Voice, CallbackQuery VideoNote, Voice, CallbackQuery
) )
from .client.types.reply_markup import ( from .client.types.reply_markup import (

View File

@ -277,6 +277,7 @@ def parse_messages(
venue = None venue = None
audio = None audio = None
voice = None voice = None
gif = None
video = None video = None
video_note = None video_note = None
sticker = None sticker = None
@ -403,7 +404,9 @@ def parse_messages(
date=doc.date date=doc.date
) )
elif types.DocumentAttributeAnimated in attributes: elif types.DocumentAttributeAnimated in attributes:
document = pyrogram_types.Document( video_attributes = attributes[types.DocumentAttributeVideo]
gif = pyrogram_types.GIF(
file_id=encode( file_id=encode(
pack( pack(
"<iiqq", "<iiqq",
@ -413,10 +416,13 @@ def parse_messages(
doc.access_hash doc.access_hash
) )
), ),
width=video_attributes.w,
height=video_attributes.h,
duration=video_attributes.duration,
thumb=parse_thumb(doc.thumb), thumb=parse_thumb(doc.thumb),
file_name=file_name,
mime_type=doc.mime_type, mime_type=doc.mime_type,
file_size=doc.size, file_size=doc.size,
file_name=file_name,
date=doc.date date=doc.date
) )
elif types.DocumentAttributeVideo in attributes: elif types.DocumentAttributeVideo in attributes:
@ -553,6 +559,7 @@ def parse_messages(
venue=venue, venue=venue,
audio=audio, audio=audio,
voice=voice, voice=voice,
gif=gif,
video=video, video=video,
video_note=video_note, video_note=video_note,
sticker=sticker, sticker=sticker,

View File

@ -23,6 +23,7 @@ from .chat_member import ChatMember
from .chat_photo import ChatPhoto from .chat_photo import ChatPhoto
from .contact import Contact from .contact import Contact
from .document import Document from .document import Document
from .gif import GIF
from .input_media_photo import InputMediaPhoto from .input_media_photo import InputMediaPhoto
from .input_media_video import InputMediaVideo from .input_media_video import InputMediaVideo
from .input_phone_contact import InputPhoneContact from .input_phone_contact import InputPhoneContact

View File

@ -0,0 +1,79 @@
# Pyrogram - Telegram MTProto API Client Library for Python
# Copyright (C) 2017-2018 Dan Tès <https://github.com/delivrance>
#
# This file is part of Pyrogram.
#
# Pyrogram is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published
# by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Pyrogram is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# 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 pyrogram.api.core import Object
class GIF(Object):
"""This object represents a GIF file.
Attributes:
ID: ``0xb0700025``
Args:
file_id (``str``):
Unique identifier for this file.
width (``int``):
GIF width as defined by sender.
height (``int``):
GIF height as defined by sender.
duration (``int``):
Duration of the GIF in seconds as defined by sender.
thumb (:obj:`PhotoSize <pyrogram.PhotoSize>`, *optional*):
GIF thumbnail.
file_name (``str``, *optional*):
GIF file name.
mime_type (``str``, *optional*):
Mime type of a file as defined by sender.
file_size (``int``, *optional*):
File size.
date (``int``, *optional*):
Date the GIF was sent in Unix time.
"""
ID = 0xb0700025
def __init__(
self,
file_id: str,
width: int,
height: int,
duration: int,
thumb=None,
file_name: str = None,
mime_type: str = None,
file_size: int = None,
date: int = None
):
self.file_id = file_id # string
self.thumb = thumb # flags.0?PhotoSize
self.file_name = file_name # flags.1?string
self.mime_type = mime_type # flags.2?string
self.file_size = file_size # flags.3?int
self.date = date # flags.4?int
self.width = width # int
self.height = height # int
self.duration = duration # int

View File

@ -94,6 +94,9 @@ class Message(Object):
sticker (:obj:`Sticker <pyrogram.Sticker>`, *optional*): sticker (:obj:`Sticker <pyrogram.Sticker>`, *optional*):
Message is a sticker, information about the sticker. Message is a sticker, information about the sticker.
gif (:obj:`Video <pyrogram.Video>`, *optional*):
Message is a GIF, information about the GIF.
video (:obj:`Video <pyrogram.Video>`, *optional*): video (:obj:`Video <pyrogram.Video>`, *optional*):
Message is a video, information about the video. Message is a video, information about the video.
@ -224,6 +227,7 @@ class Message(Object):
game=None, game=None,
photo=None, photo=None,
sticker=None, sticker=None,
gif=None,
video=None, video=None,
voice=None, voice=None,
video_note=None, video_note=None,
@ -274,6 +278,7 @@ class Message(Object):
self.game = game # flags.15?Game self.game = game # flags.15?Game
self.photo = photo # flags.16?Vector<PhotoSize> self.photo = photo # flags.16?Vector<PhotoSize>
self.sticker = sticker # flags.17?Sticker self.sticker = sticker # flags.17?Sticker
self.gif = gif
self.video = video # flags.18?Video self.video = video # flags.18?Video
self.voice = voice # flags.19?Voice self.voice = voice # flags.19?Voice
self.video_note = video_note # flags.20?VideoNote self.video_note = video_note # flags.20?VideoNote