mirror of
https://github.com/LonamiWebs/Telethon.git
synced 2024-11-22 17:36:34 +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
|
||||
from datetime import datetime, date, timedelta
|
||||
|
||||
|
||||
class TLObject:
|
||||
class TLObject(abc.ABC):
|
||||
CONSTRUCTOR_ID = None
|
||||
SUBCLASS_OF_ID = None
|
||||
|
||||
|
@ -140,18 +141,21 @@ class TLObject:
|
|||
def stringify(self):
|
||||
return TLObject.pretty_format(self, indent=0)
|
||||
|
||||
@abc.abstractmethod
|
||||
def to_dict(self):
|
||||
raise NotImplementedError
|
||||
|
||||
@abc.abstractmethod
|
||||
def __bytes__(self):
|
||||
raise NotImplementedError
|
||||
|
||||
@classmethod
|
||||
@abc.abstractmethod
|
||||
def from_reader(cls, reader):
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
class TLRequest(TLObject):
|
||||
class TLRequest(abc.ABC, TLObject):
|
||||
"""
|
||||
Represents a content-related `TLObject` (a request that can be sent).
|
||||
"""
|
||||
|
|
Loading…
Reference in New Issue
Block a user