mirror of
				https://github.com/LonamiWebs/Telethon.git
				synced 2025-10-31 07:57:38 +03:00 
			
		
		
		
	Create a common message base class
This commit is contained in:
		
							parent
							
								
									5df46f9ed8
								
							
						
					
					
						commit
						a3ac6d1645
					
				
							
								
								
									
										149
									
								
								telethon/tl/custom/messagebase.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										149
									
								
								telethon/tl/custom/messagebase.py
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,149 @@ | ||||||
|  | import abc | ||||||
|  | from ..tlobject import TLObject | ||||||
|  | 
 | ||||||
|  | # TODO Figure out a way to have the generator error on missing fields | ||||||
|  | # Maybe parsing the init function alone if that's possible. | ||||||
|  | class MessageBase(abc.ABC, TLObject): | ||||||
|  |     """ | ||||||
|  |     This custom class aggregates both :tl:`Message` and | ||||||
|  |     :tl:`MessageService` to ease accessing their members. | ||||||
|  | 
 | ||||||
|  |     Members: | ||||||
|  |         id (`int`): | ||||||
|  |             The ID of this message. This field is *always* present. | ||||||
|  |             Any other member is optional and may be ``None``. | ||||||
|  | 
 | ||||||
|  |         out (`bool`): | ||||||
|  |             Whether the message is outgoing (i.e. you sent it from | ||||||
|  |             another session) or incoming (i.e. someone else sent it). | ||||||
|  | 
 | ||||||
|  |             Note that messages in your own chat are always incoming, | ||||||
|  |             but this member will be ``True`` if you send a message | ||||||
|  |             to your own chat. Messages you forward to your chat are | ||||||
|  |             *not* considered outgoing, just like official clients | ||||||
|  |             display them. | ||||||
|  | 
 | ||||||
|  |         mentioned (`bool`): | ||||||
|  |             Whether you were mentioned in this message or not. | ||||||
|  |             Note that replies to your own messages also count | ||||||
|  |             as mentions. | ||||||
|  | 
 | ||||||
|  |         media_unread (`bool`): | ||||||
|  |             Whether you have read the media in this message | ||||||
|  |             or not, e.g. listened to the voice note media. | ||||||
|  | 
 | ||||||
|  |         silent (`bool`): | ||||||
|  |             Whether this message should notify or not, | ||||||
|  |             used in channels. | ||||||
|  | 
 | ||||||
|  |         post (`bool`): | ||||||
|  |             Whether this message is a post in a broadcast | ||||||
|  |             channel or not. | ||||||
|  | 
 | ||||||
|  |         to_id (:tl:`Peer`): | ||||||
|  |             The peer to which this message was sent, which is either | ||||||
|  |             :tl:`PeerUser`, :tl:`PeerChat` or :tl:`PeerChannel`. This | ||||||
|  |             will always be present except for empty messages. | ||||||
|  | 
 | ||||||
|  |         date (`datetime`): | ||||||
|  |             The UTC+0 `datetime` object indicating when this message | ||||||
|  |             was sent. This will always be present except for empty | ||||||
|  |             messages. | ||||||
|  | 
 | ||||||
|  |         message (`str`): | ||||||
|  |             The string text of the message for :tl:`Message` instances, | ||||||
|  |             which will be ``None`` for other types of messages. | ||||||
|  | 
 | ||||||
|  |         action (:tl:`MessageAction`): | ||||||
|  |             The message action object of the message for :tl:`MessageService` | ||||||
|  |             instances, which will be ``None`` for other types of messages. | ||||||
|  | 
 | ||||||
|  |         from_id (`int`): | ||||||
|  |             The ID of the user who sent this message. This will be | ||||||
|  |             ``None`` if the message was sent in a broadcast channel. | ||||||
|  | 
 | ||||||
|  |         reply_to_msg_id (`int`): | ||||||
|  |             The ID to which this message is replying to, if any. | ||||||
|  | 
 | ||||||
|  |         fwd_from (:tl:`MessageFwdHeader`): | ||||||
|  |             The original forward header if this message is a forward. | ||||||
|  |             You should probably use the `forward` property instead. | ||||||
|  | 
 | ||||||
|  |         via_bot_id (`int`): | ||||||
|  |             The ID of the bot used to send this message | ||||||
|  |             through its inline mode (e.g. "via @like"). | ||||||
|  | 
 | ||||||
|  |         media (:tl:`MessageMedia`): | ||||||
|  |             The media sent with this message if any (such as | ||||||
|  |             photos, videos, documents, gifs, stickers, etc.). | ||||||
|  | 
 | ||||||
|  |             You may want to access the `photo`, `document` | ||||||
|  |             etc. properties instead. | ||||||
|  | 
 | ||||||
|  |         reply_markup (:tl:`ReplyMarkup`): | ||||||
|  |             The reply markup for this message (which was sent | ||||||
|  |             either via a bot or by a bot). You probably want | ||||||
|  |             to access `buttons` instead. | ||||||
|  | 
 | ||||||
|  |         entities (List[:tl:`MessageEntity`]): | ||||||
|  |             The list of markup entities in this message, | ||||||
|  |             such as bold, italics, code, hyperlinks, etc. | ||||||
|  | 
 | ||||||
|  |         views (`int`): | ||||||
|  |             The number of views this message from a broadcast | ||||||
|  |             channel has. This is also present in forwards. | ||||||
|  | 
 | ||||||
|  |         edit_date (`datetime`): | ||||||
|  |             The date when this message was last edited. | ||||||
|  | 
 | ||||||
|  |         post_author (`str`): | ||||||
|  |             The display name of the message sender to | ||||||
|  |             show in messages sent to broadcast channels. | ||||||
|  | 
 | ||||||
|  |         grouped_id (`int`): | ||||||
|  |             If this message belongs to a group of messages | ||||||
|  |             (photo albums or video albums), all of them will | ||||||
|  |             have the same value here. | ||||||
|  |     """ | ||||||
|  |     def __init__( | ||||||
|  |             # Common to all | ||||||
|  |             self, id, | ||||||
|  | 
 | ||||||
|  |             # Common to Message and MessageService (mandatory) | ||||||
|  |             to_id=None, date=None, | ||||||
|  | 
 | ||||||
|  |             # Common to Message and MessageService (flags) | ||||||
|  |             out=None, mentioned=None, media_unread=None, silent=None, | ||||||
|  |             post=None, from_id=None, reply_to_msg_id=None, | ||||||
|  | 
 | ||||||
|  |             # For Message (mandatory) | ||||||
|  |             message=None, | ||||||
|  | 
 | ||||||
|  |             # For Message (flags) | ||||||
|  |             fwd_from=None, via_bot_id=None, media=None, reply_markup=None, | ||||||
|  |             entities=None, views=None, edit_date=None, post_author=None, | ||||||
|  |             grouped_id=None, | ||||||
|  | 
 | ||||||
|  |             # For MessageAction (mandatory) | ||||||
|  |             action=None): | ||||||
|  |         self.id = id | ||||||
|  |         self.to_id = to_id | ||||||
|  |         self.date = date | ||||||
|  |         self.out = out | ||||||
|  |         self.mentioned = mentioned | ||||||
|  |         self.media_unread = media_unread | ||||||
|  |         self.silent = silent | ||||||
|  |         self.post = post | ||||||
|  |         self.from_id = from_id | ||||||
|  |         self.reply_to_msg_id = reply_to_msg_id | ||||||
|  |         self.message = message | ||||||
|  |         self.fwd_from = fwd_from | ||||||
|  |         self.via_bot_id = via_bot_id | ||||||
|  |         self.media = media | ||||||
|  |         self.reply_markup = reply_markup | ||||||
|  |         self.entities = entities | ||||||
|  |         self.views = views | ||||||
|  |         self.edit_date = edit_date | ||||||
|  |         self.post_author = post_author | ||||||
|  |         self.grouped_id = grouped_id | ||||||
|  |         self.action = action | ||||||
|  | @ -1,8 +1,9 @@ | ||||||
|  | import abc | ||||||
| import struct | import struct | ||||||
| from datetime import datetime, date, timedelta | from datetime import datetime, date, timedelta | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class TLObject: | class TLObject(abc.ABC): | ||||||
|     CONSTRUCTOR_ID = None |     CONSTRUCTOR_ID = None | ||||||
|     SUBCLASS_OF_ID = None |     SUBCLASS_OF_ID = None | ||||||
| 
 | 
 | ||||||
|  | @ -140,18 +141,21 @@ class TLObject: | ||||||
|     def stringify(self): |     def stringify(self): | ||||||
|         return TLObject.pretty_format(self, indent=0) |         return TLObject.pretty_format(self, indent=0) | ||||||
| 
 | 
 | ||||||
|  |     @abc.abstractmethod | ||||||
|     def to_dict(self): |     def to_dict(self): | ||||||
|         raise NotImplementedError |         raise NotImplementedError | ||||||
| 
 | 
 | ||||||
|  |     @abc.abstractmethod | ||||||
|     def __bytes__(self): |     def __bytes__(self): | ||||||
|         raise NotImplementedError |         raise NotImplementedError | ||||||
| 
 | 
 | ||||||
|     @classmethod |     @classmethod | ||||||
|  |     @abc.abstractmethod | ||||||
|     def from_reader(cls, reader): |     def from_reader(cls, reader): | ||||||
|         raise NotImplementedError |         raise NotImplementedError | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class TLRequest(TLObject): | class TLRequest(abc.ABC, TLObject): | ||||||
|     """ |     """ | ||||||
|     Represents a content-related `TLObject` (a request that can be sent). |     Represents a content-related `TLObject` (a request that can be sent). | ||||||
|     """ |     """ | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user