mirror of
https://github.com/pyrogram/pyrogram
synced 2025-08-28 21:07:59 +00:00
Make parse_messages accept a list of messages
This commit is contained in:
parent
65c67aaf57
commit
a1c3e40800
@ -138,14 +138,7 @@ class Dispatcher:
|
|||||||
self.dispatch(update, users=users, chats=chats, is_raw=True)
|
self.dispatch(update, users=users, chats=chats, is_raw=True)
|
||||||
|
|
||||||
if isinstance(update, Dispatcher.MESSAGE_UPDATES):
|
if isinstance(update, Dispatcher.MESSAGE_UPDATES):
|
||||||
if isinstance(update.message, types.Message):
|
message = utils.parse_messages(
|
||||||
parser = utils.parse_message
|
|
||||||
elif isinstance(update.message, types.MessageService):
|
|
||||||
parser = utils.parse_message_service
|
|
||||||
else:
|
|
||||||
continue
|
|
||||||
|
|
||||||
message = parser(
|
|
||||||
self.client,
|
self.client,
|
||||||
update.message,
|
update.message,
|
||||||
users,
|
users,
|
||||||
|
@ -218,437 +218,431 @@ def encode(s: bytes) -> str:
|
|||||||
|
|
||||||
|
|
||||||
# TODO: Reorganize code, maybe split parts as well
|
# TODO: Reorganize code, maybe split parts as well
|
||||||
def parse_message(
|
def parse_messages(
|
||||||
client,
|
client,
|
||||||
message: types.Message,
|
messages: list or types.Message or types.MessageService or types.MessageEmpty,
|
||||||
users: dict,
|
users: dict,
|
||||||
chats: dict,
|
chats: dict,
|
||||||
replies: int = 1
|
replies: int = 1
|
||||||
) -> pyrogram_types.Message:
|
) -> pyrogram_types.Message:
|
||||||
entities = parse_entities(message.entities, users)
|
is_list = isinstance(messages, list)
|
||||||
|
messages = messages if is_list else [messages]
|
||||||
|
parsed_messages = []
|
||||||
|
|
||||||
forward_from = None
|
for message in messages:
|
||||||
forward_from_chat = None
|
if isinstance(message, types.Message):
|
||||||
forward_from_message_id = None
|
entities = parse_entities(message.entities, users)
|
||||||
forward_signature = None
|
|
||||||
forward_date = None
|
|
||||||
|
|
||||||
forward_header = message.fwd_from # type: types.MessageFwdHeader
|
forward_from = None
|
||||||
|
forward_from_chat = None
|
||||||
|
forward_from_message_id = None
|
||||||
|
forward_signature = None
|
||||||
|
forward_date = None
|
||||||
|
|
||||||
if forward_header:
|
forward_header = message.fwd_from # type: types.MessageFwdHeader
|
||||||
forward_date = forward_header.date
|
|
||||||
|
|
||||||
if forward_header.from_id:
|
if forward_header:
|
||||||
forward_from = parse_user(users[forward_header.from_id])
|
forward_date = forward_header.date
|
||||||
else:
|
|
||||||
forward_from_chat = parse_channel_chat(chats[forward_header.channel_id])
|
|
||||||
forward_from_message_id = forward_header.channel_post
|
|
||||||
forward_signature = forward_header.post_author
|
|
||||||
|
|
||||||
photo = None
|
if forward_header.from_id:
|
||||||
location = None
|
forward_from = parse_user(users[forward_header.from_id])
|
||||||
contact = None
|
else:
|
||||||
venue = None
|
forward_from_chat = parse_channel_chat(chats[forward_header.channel_id])
|
||||||
audio = None
|
forward_from_message_id = forward_header.channel_post
|
||||||
voice = None
|
forward_signature = forward_header.post_author
|
||||||
video = None
|
|
||||||
video_note = None
|
|
||||||
sticker = None
|
|
||||||
document = None
|
|
||||||
|
|
||||||
media = message.media
|
photo = None
|
||||||
|
location = None
|
||||||
|
contact = None
|
||||||
|
venue = None
|
||||||
|
audio = None
|
||||||
|
voice = None
|
||||||
|
video = None
|
||||||
|
video_note = None
|
||||||
|
sticker = None
|
||||||
|
document = None
|
||||||
|
|
||||||
if media:
|
media = message.media
|
||||||
if isinstance(media, types.MessageMediaPhoto):
|
|
||||||
photo = media.photo
|
|
||||||
|
|
||||||
if isinstance(photo, types.Photo):
|
if media:
|
||||||
sizes = photo.sizes
|
if isinstance(media, types.MessageMediaPhoto):
|
||||||
photo_sizes = []
|
photo = media.photo
|
||||||
|
|
||||||
for size in sizes:
|
if isinstance(photo, types.Photo):
|
||||||
if isinstance(size, (types.PhotoSize, types.PhotoCachedSize)):
|
sizes = photo.sizes
|
||||||
loc = size.location
|
photo_sizes = []
|
||||||
|
|
||||||
if isinstance(size, types.PhotoSize):
|
for size in sizes:
|
||||||
file_size = size.size
|
if isinstance(size, (types.PhotoSize, types.PhotoCachedSize)):
|
||||||
else:
|
loc = size.location
|
||||||
file_size = len(size.bytes)
|
|
||||||
|
|
||||||
if isinstance(loc, types.FileLocation):
|
if isinstance(size, types.PhotoSize):
|
||||||
photo_size = pyrogram_types.PhotoSize(
|
file_size = size.size
|
||||||
|
else:
|
||||||
|
file_size = len(size.bytes)
|
||||||
|
|
||||||
|
if isinstance(loc, types.FileLocation):
|
||||||
|
photo_size = pyrogram_types.PhotoSize(
|
||||||
|
file_id=encode(
|
||||||
|
pack(
|
||||||
|
"<iiqqqqi",
|
||||||
|
2,
|
||||||
|
loc.dc_id,
|
||||||
|
photo.id,
|
||||||
|
photo.access_hash,
|
||||||
|
loc.volume_id,
|
||||||
|
loc.secret,
|
||||||
|
loc.local_id
|
||||||
|
)
|
||||||
|
),
|
||||||
|
width=size.w,
|
||||||
|
height=size.h,
|
||||||
|
file_size=file_size,
|
||||||
|
date=photo.date
|
||||||
|
)
|
||||||
|
|
||||||
|
photo_sizes.append(photo_size)
|
||||||
|
|
||||||
|
photo = photo_sizes
|
||||||
|
elif isinstance(media, types.MessageMediaGeo):
|
||||||
|
geo_point = media.geo
|
||||||
|
|
||||||
|
if isinstance(geo_point, types.GeoPoint):
|
||||||
|
location = pyrogram_types.Location(
|
||||||
|
longitude=geo_point.long,
|
||||||
|
latitude=geo_point.lat
|
||||||
|
)
|
||||||
|
elif isinstance(media, types.MessageMediaContact):
|
||||||
|
contact = pyrogram_types.Contact(
|
||||||
|
phone_number=media.phone_number,
|
||||||
|
first_name=media.first_name,
|
||||||
|
last_name=media.last_name or None,
|
||||||
|
user_id=media.user_id or None
|
||||||
|
)
|
||||||
|
elif isinstance(media, types.MessageMediaVenue):
|
||||||
|
venue = pyrogram_types.Venue(
|
||||||
|
location=pyrogram_types.Location(
|
||||||
|
longitude=media.geo.long,
|
||||||
|
latitude=media.geo.lat
|
||||||
|
),
|
||||||
|
title=media.title,
|
||||||
|
address=media.address,
|
||||||
|
foursquare_id=media.venue_id or None
|
||||||
|
)
|
||||||
|
elif isinstance(media, types.MessageMediaDocument):
|
||||||
|
doc = media.document
|
||||||
|
|
||||||
|
if isinstance(doc, types.Document):
|
||||||
|
attributes = {type(i): i for i in doc.attributes}
|
||||||
|
|
||||||
|
file_name = getattr(
|
||||||
|
attributes.get(
|
||||||
|
types.DocumentAttributeFilename, None
|
||||||
|
), "file_name", None
|
||||||
|
)
|
||||||
|
|
||||||
|
if types.DocumentAttributeAudio in attributes:
|
||||||
|
audio_attributes = attributes[types.DocumentAttributeAudio]
|
||||||
|
|
||||||
|
if audio_attributes.voice:
|
||||||
|
voice = pyrogram_types.Voice(
|
||||||
|
file_id=encode(
|
||||||
|
pack(
|
||||||
|
"<iiqq",
|
||||||
|
3,
|
||||||
|
doc.dc_id,
|
||||||
|
doc.id,
|
||||||
|
doc.access_hash
|
||||||
|
)
|
||||||
|
),
|
||||||
|
duration=audio_attributes.duration,
|
||||||
|
mime_type=doc.mime_type,
|
||||||
|
file_size=doc.size,
|
||||||
|
thumb=parse_thumb(doc.thumb),
|
||||||
|
file_name=file_name,
|
||||||
|
date=doc.date
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
audio = pyrogram_types.Audio(
|
||||||
|
file_id=encode(
|
||||||
|
pack(
|
||||||
|
"<iiqq",
|
||||||
|
9,
|
||||||
|
doc.dc_id,
|
||||||
|
doc.id,
|
||||||
|
doc.access_hash
|
||||||
|
)
|
||||||
|
),
|
||||||
|
duration=audio_attributes.duration,
|
||||||
|
performer=audio_attributes.performer,
|
||||||
|
title=audio_attributes.title,
|
||||||
|
mime_type=doc.mime_type,
|
||||||
|
file_size=doc.size,
|
||||||
|
thumb=parse_thumb(doc.thumb),
|
||||||
|
file_name=file_name,
|
||||||
|
date=doc.date
|
||||||
|
)
|
||||||
|
elif types.DocumentAttributeAnimated in attributes:
|
||||||
|
document = pyrogram_types.Document(
|
||||||
file_id=encode(
|
file_id=encode(
|
||||||
pack(
|
pack(
|
||||||
"<iiqqqqi",
|
"<iiqq",
|
||||||
2,
|
10,
|
||||||
loc.dc_id,
|
doc.dc_id,
|
||||||
photo.id,
|
doc.id,
|
||||||
photo.access_hash,
|
doc.access_hash
|
||||||
loc.volume_id,
|
|
||||||
loc.secret,
|
|
||||||
loc.local_id
|
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
width=size.w,
|
thumb=parse_thumb(doc.thumb),
|
||||||
height=size.h,
|
file_name=file_name,
|
||||||
file_size=file_size,
|
mime_type=doc.mime_type,
|
||||||
date=photo.date
|
file_size=doc.size,
|
||||||
|
date=doc.date
|
||||||
)
|
)
|
||||||
|
elif types.DocumentAttributeVideo in attributes:
|
||||||
|
video_attributes = attributes[types.DocumentAttributeVideo]
|
||||||
|
|
||||||
photo_sizes.append(photo_size)
|
if video_attributes.round_message:
|
||||||
|
video_note = pyrogram_types.VideoNote(
|
||||||
photo = photo_sizes
|
file_id=encode(
|
||||||
elif isinstance(media, types.MessageMediaGeo):
|
pack(
|
||||||
geo_point = media.geo
|
"<iiqq",
|
||||||
|
13,
|
||||||
if isinstance(geo_point, types.GeoPoint):
|
doc.dc_id,
|
||||||
location = pyrogram_types.Location(
|
doc.id,
|
||||||
longitude=geo_point.long,
|
doc.access_hash
|
||||||
latitude=geo_point.lat
|
)
|
||||||
)
|
),
|
||||||
elif isinstance(media, types.MessageMediaContact):
|
length=video_attributes.w,
|
||||||
contact = pyrogram_types.Contact(
|
duration=video_attributes.duration,
|
||||||
phone_number=media.phone_number,
|
thumb=parse_thumb(doc.thumb),
|
||||||
first_name=media.first_name,
|
file_size=doc.size,
|
||||||
last_name=media.last_name or None,
|
file_name=file_name,
|
||||||
user_id=media.user_id or None
|
mime_type=doc.mime_type,
|
||||||
)
|
date=doc.date
|
||||||
elif isinstance(media, types.MessageMediaVenue):
|
|
||||||
venue = pyrogram_types.Venue(
|
|
||||||
location=pyrogram_types.Location(
|
|
||||||
longitude=media.geo.long,
|
|
||||||
latitude=media.geo.lat
|
|
||||||
),
|
|
||||||
title=media.title,
|
|
||||||
address=media.address,
|
|
||||||
foursquare_id=media.venue_id or None
|
|
||||||
)
|
|
||||||
elif isinstance(media, types.MessageMediaDocument):
|
|
||||||
doc = media.document
|
|
||||||
|
|
||||||
if isinstance(doc, types.Document):
|
|
||||||
attributes = {type(i): i for i in doc.attributes}
|
|
||||||
|
|
||||||
file_name = getattr(
|
|
||||||
attributes.get(
|
|
||||||
types.DocumentAttributeFilename, None
|
|
||||||
), "file_name", None
|
|
||||||
)
|
|
||||||
|
|
||||||
if types.DocumentAttributeAudio in attributes:
|
|
||||||
audio_attributes = attributes[types.DocumentAttributeAudio]
|
|
||||||
|
|
||||||
if audio_attributes.voice:
|
|
||||||
voice = pyrogram_types.Voice(
|
|
||||||
file_id=encode(
|
|
||||||
pack(
|
|
||||||
"<iiqq",
|
|
||||||
3,
|
|
||||||
doc.dc_id,
|
|
||||||
doc.id,
|
|
||||||
doc.access_hash
|
|
||||||
)
|
)
|
||||||
),
|
else:
|
||||||
duration=audio_attributes.duration,
|
video = pyrogram_types.Video(
|
||||||
mime_type=doc.mime_type,
|
file_id=encode(
|
||||||
file_size=doc.size,
|
pack(
|
||||||
thumb=parse_thumb(doc.thumb),
|
"<iiqq",
|
||||||
file_name=file_name,
|
4,
|
||||||
date=doc.date
|
doc.dc_id,
|
||||||
)
|
doc.id,
|
||||||
else:
|
doc.access_hash
|
||||||
audio = pyrogram_types.Audio(
|
)
|
||||||
file_id=encode(
|
),
|
||||||
pack(
|
width=video_attributes.w,
|
||||||
"<iiqq",
|
height=video_attributes.h,
|
||||||
9,
|
duration=video_attributes.duration,
|
||||||
doc.dc_id,
|
thumb=parse_thumb(doc.thumb),
|
||||||
doc.id,
|
mime_type=doc.mime_type,
|
||||||
doc.access_hash
|
file_size=doc.size,
|
||||||
|
file_name=file_name,
|
||||||
|
date=doc.date
|
||||||
)
|
)
|
||||||
),
|
elif types.DocumentAttributeSticker in attributes:
|
||||||
duration=audio_attributes.duration,
|
image_size_attributes = attributes.get(types.DocumentAttributeImageSize, None)
|
||||||
performer=audio_attributes.performer,
|
sticker_attribute = attributes[types.DocumentAttributeSticker]
|
||||||
title=audio_attributes.title,
|
|
||||||
mime_type=doc.mime_type,
|
if isinstance(sticker_attribute.stickerset, types.InputStickerSetID):
|
||||||
file_size=doc.size,
|
try:
|
||||||
thumb=parse_thumb(doc.thumb),
|
set_name = client.send(
|
||||||
file_name=file_name,
|
functions.messages.GetStickerSet(sticker_attribute.stickerset)
|
||||||
date=doc.date
|
).set.short_name
|
||||||
)
|
except StickersetInvalid:
|
||||||
elif types.DocumentAttributeAnimated in attributes:
|
set_name = None
|
||||||
document = pyrogram_types.Document(
|
else:
|
||||||
file_id=encode(
|
set_name = None
|
||||||
pack(
|
|
||||||
"<iiqq",
|
sticker = pyrogram_types.Sticker(
|
||||||
10,
|
file_id=encode(
|
||||||
doc.dc_id,
|
pack(
|
||||||
doc.id,
|
"<iiqq",
|
||||||
doc.access_hash
|
8,
|
||||||
|
doc.dc_id,
|
||||||
|
doc.id,
|
||||||
|
doc.access_hash
|
||||||
|
)
|
||||||
|
),
|
||||||
|
width=image_size_attributes.w if image_size_attributes else 0,
|
||||||
|
height=image_size_attributes.h if image_size_attributes else 0,
|
||||||
|
thumb=parse_thumb(doc.thumb),
|
||||||
|
# TODO: mask_position
|
||||||
|
set_name=set_name,
|
||||||
|
emoji=sticker_attribute.alt or None,
|
||||||
|
file_size=doc.size,
|
||||||
|
mime_type=doc.mime_type,
|
||||||
|
file_name=file_name,
|
||||||
|
date=doc.date
|
||||||
)
|
)
|
||||||
),
|
else:
|
||||||
thumb=parse_thumb(doc.thumb),
|
document = pyrogram_types.Document(
|
||||||
file_name=file_name,
|
file_id=encode(
|
||||||
mime_type=doc.mime_type,
|
pack(
|
||||||
file_size=doc.size,
|
"<iiqq",
|
||||||
date=doc.date
|
5,
|
||||||
)
|
doc.dc_id,
|
||||||
elif types.DocumentAttributeVideo in attributes:
|
doc.id,
|
||||||
video_attributes = attributes[types.DocumentAttributeVideo]
|
doc.access_hash
|
||||||
|
)
|
||||||
if video_attributes.round_message:
|
),
|
||||||
video_note = pyrogram_types.VideoNote(
|
thumb=parse_thumb(doc.thumb),
|
||||||
file_id=encode(
|
file_name=file_name,
|
||||||
pack(
|
mime_type=doc.mime_type,
|
||||||
"<iiqq",
|
file_size=doc.size,
|
||||||
13,
|
date=doc.date
|
||||||
doc.dc_id,
|
|
||||||
doc.id,
|
|
||||||
doc.access_hash
|
|
||||||
)
|
|
||||||
),
|
|
||||||
length=video_attributes.w,
|
|
||||||
duration=video_attributes.duration,
|
|
||||||
thumb=parse_thumb(doc.thumb),
|
|
||||||
file_size=doc.size,
|
|
||||||
file_name=file_name,
|
|
||||||
mime_type=doc.mime_type,
|
|
||||||
date=doc.date
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
video = pyrogram_types.Video(
|
|
||||||
file_id=encode(
|
|
||||||
pack(
|
|
||||||
"<iiqq",
|
|
||||||
4,
|
|
||||||
doc.dc_id,
|
|
||||||
doc.id,
|
|
||||||
doc.access_hash
|
|
||||||
)
|
|
||||||
),
|
|
||||||
width=video_attributes.w,
|
|
||||||
height=video_attributes.h,
|
|
||||||
duration=video_attributes.duration,
|
|
||||||
thumb=parse_thumb(doc.thumb),
|
|
||||||
mime_type=doc.mime_type,
|
|
||||||
file_size=doc.size,
|
|
||||||
file_name=file_name,
|
|
||||||
date=doc.date
|
|
||||||
)
|
|
||||||
elif types.DocumentAttributeSticker in attributes:
|
|
||||||
image_size_attributes = attributes.get(types.DocumentAttributeImageSize, None)
|
|
||||||
sticker_attribute = attributes[types.DocumentAttributeSticker]
|
|
||||||
|
|
||||||
if isinstance(sticker_attribute.stickerset, types.InputStickerSetID):
|
|
||||||
try:
|
|
||||||
set_name = client.send(
|
|
||||||
functions.messages.GetStickerSet(sticker_attribute.stickerset)
|
|
||||||
).set.short_name
|
|
||||||
except StickersetInvalid:
|
|
||||||
set_name = None
|
|
||||||
else:
|
|
||||||
set_name = None
|
|
||||||
|
|
||||||
sticker = pyrogram_types.Sticker(
|
|
||||||
file_id=encode(
|
|
||||||
pack(
|
|
||||||
"<iiqq",
|
|
||||||
8,
|
|
||||||
doc.dc_id,
|
|
||||||
doc.id,
|
|
||||||
doc.access_hash
|
|
||||||
)
|
)
|
||||||
),
|
|
||||||
width=image_size_attributes.w if image_size_attributes else 0,
|
|
||||||
height=image_size_attributes.h if image_size_attributes else 0,
|
|
||||||
thumb=parse_thumb(doc.thumb),
|
|
||||||
# TODO: mask_position
|
|
||||||
set_name=set_name,
|
|
||||||
emoji=sticker_attribute.alt or None,
|
|
||||||
file_size=doc.size,
|
|
||||||
mime_type=doc.mime_type,
|
|
||||||
file_name=file_name,
|
|
||||||
date=doc.date
|
|
||||||
)
|
|
||||||
else:
|
else:
|
||||||
document = pyrogram_types.Document(
|
media = None
|
||||||
file_id=encode(
|
|
||||||
pack(
|
|
||||||
"<iiqq",
|
|
||||||
5,
|
|
||||||
doc.dc_id,
|
|
||||||
doc.id,
|
|
||||||
doc.access_hash
|
|
||||||
)
|
|
||||||
),
|
|
||||||
thumb=parse_thumb(doc.thumb),
|
|
||||||
file_name=file_name,
|
|
||||||
mime_type=doc.mime_type,
|
|
||||||
file_size=doc.size,
|
|
||||||
date=doc.date
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
media = None
|
|
||||||
|
|
||||||
reply_markup = message.reply_markup
|
reply_markup = message.reply_markup
|
||||||
|
|
||||||
if reply_markup:
|
if reply_markup:
|
||||||
if isinstance(reply_markup, types.ReplyKeyboardForceReply):
|
if isinstance(reply_markup, types.ReplyKeyboardForceReply):
|
||||||
reply_markup = pyrogram_types.ForceReply.read(reply_markup)
|
reply_markup = pyrogram_types.ForceReply.read(reply_markup)
|
||||||
elif isinstance(reply_markup, types.ReplyKeyboardMarkup):
|
elif isinstance(reply_markup, types.ReplyKeyboardMarkup):
|
||||||
reply_markup = pyrogram_types.ReplyKeyboardMarkup.read(reply_markup)
|
reply_markup = pyrogram_types.ReplyKeyboardMarkup.read(reply_markup)
|
||||||
elif isinstance(reply_markup, types.ReplyInlineMarkup):
|
elif isinstance(reply_markup, types.ReplyInlineMarkup):
|
||||||
reply_markup = pyrogram_types.InlineKeyboardMarkup.read(reply_markup)
|
reply_markup = pyrogram_types.InlineKeyboardMarkup.read(reply_markup)
|
||||||
elif isinstance(reply_markup, types.ReplyKeyboardHide):
|
elif isinstance(reply_markup, types.ReplyKeyboardHide):
|
||||||
reply_markup = pyrogram_types.ReplyKeyboardRemove.read(reply_markup)
|
reply_markup = pyrogram_types.ReplyKeyboardRemove.read(reply_markup)
|
||||||
else:
|
else:
|
||||||
reply_markup = None
|
reply_markup = None
|
||||||
|
|
||||||
m = pyrogram_types.Message(
|
m = pyrogram_types.Message(
|
||||||
message_id=message.id,
|
message_id=message.id,
|
||||||
date=message.date,
|
date=message.date,
|
||||||
chat=parse_chat(message, users, chats),
|
chat=parse_chat(message, users, chats),
|
||||||
from_user=parse_user(users.get(message.from_id, None)),
|
from_user=parse_user(users.get(message.from_id, None)),
|
||||||
text=message.message or None if media is None else None,
|
text=message.message or None if media is None else None,
|
||||||
caption=message.message or None if media is not None else None,
|
caption=message.message or None if media is not None else None,
|
||||||
entities=entities or None if media is None else None,
|
entities=entities or None if media is None else None,
|
||||||
caption_entities=entities or None if media is not None else None,
|
caption_entities=entities or None if media is not None else None,
|
||||||
author_signature=message.post_author,
|
author_signature=message.post_author,
|
||||||
forward_from=forward_from,
|
forward_from=forward_from,
|
||||||
forward_from_chat=forward_from_chat,
|
forward_from_chat=forward_from_chat,
|
||||||
forward_from_message_id=forward_from_message_id,
|
forward_from_message_id=forward_from_message_id,
|
||||||
forward_signature=forward_signature,
|
forward_signature=forward_signature,
|
||||||
forward_date=forward_date,
|
forward_date=forward_date,
|
||||||
edit_date=message.edit_date,
|
edit_date=message.edit_date,
|
||||||
media_group_id=message.grouped_id,
|
media_group_id=message.grouped_id,
|
||||||
photo=photo,
|
photo=photo,
|
||||||
location=location,
|
location=location,
|
||||||
contact=contact,
|
contact=contact,
|
||||||
venue=venue,
|
venue=venue,
|
||||||
audio=audio,
|
audio=audio,
|
||||||
voice=voice,
|
voice=voice,
|
||||||
video=video,
|
video=video,
|
||||||
video_note=video_note,
|
video_note=video_note,
|
||||||
sticker=sticker,
|
sticker=sticker,
|
||||||
document=document,
|
document=document,
|
||||||
views=message.views,
|
views=message.views,
|
||||||
via_bot=parse_user(users.get(message.via_bot_id, None)),
|
via_bot=parse_user(users.get(message.via_bot_id, None)),
|
||||||
outgoing=message.out,
|
outgoing=message.out,
|
||||||
client=proxy(client),
|
client=proxy(client),
|
||||||
reply_markup=reply_markup
|
reply_markup=reply_markup
|
||||||
)
|
)
|
||||||
|
|
||||||
if message.reply_to_msg_id and replies:
|
if message.reply_to_msg_id and replies:
|
||||||
m.reply_to_message = client.get_messages(m.chat.id, message.reply_to_msg_id, replies=replies - 1)
|
m.reply_to_message = client.get_messages(m.chat.id, message.reply_to_msg_id, replies=replies - 1)
|
||||||
|
elif isinstance(message, types.MessageService):
|
||||||
|
action = message.action
|
||||||
|
|
||||||
return m
|
new_chat_members = None
|
||||||
|
left_chat_member = None
|
||||||
|
new_chat_title = None
|
||||||
|
delete_chat_photo = None
|
||||||
|
migrate_to_chat_id = None
|
||||||
|
migrate_from_chat_id = None
|
||||||
|
group_chat_created = None
|
||||||
|
channel_chat_created = None
|
||||||
|
new_chat_photo = None
|
||||||
|
|
||||||
|
if isinstance(action, types.MessageActionChatAddUser):
|
||||||
|
new_chat_members = [parse_user(users[i]) for i in action.users]
|
||||||
|
elif isinstance(action, types.MessageActionChatJoinedByLink):
|
||||||
|
new_chat_members = [parse_user(users[message.from_id])]
|
||||||
|
elif isinstance(action, types.MessageActionChatDeleteUser):
|
||||||
|
left_chat_member = parse_user(users[action.user_id])
|
||||||
|
elif isinstance(action, types.MessageActionChatEditTitle):
|
||||||
|
new_chat_title = action.title
|
||||||
|
elif isinstance(action, types.MessageActionChatDeletePhoto):
|
||||||
|
delete_chat_photo = True
|
||||||
|
elif isinstance(action, types.MessageActionChatMigrateTo):
|
||||||
|
migrate_to_chat_id = action.channel_id
|
||||||
|
elif isinstance(action, types.MessageActionChannelMigrateFrom):
|
||||||
|
migrate_from_chat_id = action.chat_id
|
||||||
|
elif isinstance(action, types.MessageActionChatCreate):
|
||||||
|
group_chat_created = True
|
||||||
|
elif isinstance(action, types.MessageActionChannelCreate):
|
||||||
|
channel_chat_created = True
|
||||||
|
elif isinstance(action, types.MessageActionChatEditPhoto):
|
||||||
|
photo = action.photo
|
||||||
|
|
||||||
def parse_message_service(
|
if isinstance(photo, types.Photo):
|
||||||
client,
|
sizes = photo.sizes
|
||||||
message: types.MessageService,
|
photo_sizes = []
|
||||||
users: dict,
|
|
||||||
chats: dict
|
|
||||||
) -> pyrogram_types.Message:
|
|
||||||
action = message.action
|
|
||||||
|
|
||||||
new_chat_members = None
|
for size in sizes:
|
||||||
left_chat_member = None
|
if isinstance(size, (types.PhotoSize, types.PhotoCachedSize)):
|
||||||
new_chat_title = None
|
loc = size.location
|
||||||
delete_chat_photo = None
|
|
||||||
migrate_to_chat_id = None
|
|
||||||
migrate_from_chat_id = None
|
|
||||||
group_chat_created = None
|
|
||||||
channel_chat_created = None
|
|
||||||
new_chat_photo = None
|
|
||||||
|
|
||||||
if isinstance(action, types.MessageActionChatAddUser):
|
if isinstance(size, types.PhotoSize):
|
||||||
new_chat_members = [parse_user(users[i]) for i in action.users]
|
file_size = size.size
|
||||||
elif isinstance(action, types.MessageActionChatJoinedByLink):
|
else:
|
||||||
new_chat_members = [parse_user(users[message.from_id])]
|
file_size = len(size.bytes)
|
||||||
elif isinstance(action, types.MessageActionChatDeleteUser):
|
|
||||||
left_chat_member = parse_user(users[action.user_id])
|
|
||||||
elif isinstance(action, types.MessageActionChatEditTitle):
|
|
||||||
new_chat_title = action.title
|
|
||||||
elif isinstance(action, types.MessageActionChatDeletePhoto):
|
|
||||||
delete_chat_photo = True
|
|
||||||
elif isinstance(action, types.MessageActionChatMigrateTo):
|
|
||||||
migrate_to_chat_id = action.channel_id
|
|
||||||
elif isinstance(action, types.MessageActionChannelMigrateFrom):
|
|
||||||
migrate_from_chat_id = action.chat_id
|
|
||||||
elif isinstance(action, types.MessageActionChatCreate):
|
|
||||||
group_chat_created = True
|
|
||||||
elif isinstance(action, types.MessageActionChannelCreate):
|
|
||||||
channel_chat_created = True
|
|
||||||
elif isinstance(action, types.MessageActionChatEditPhoto):
|
|
||||||
photo = action.photo
|
|
||||||
|
|
||||||
if isinstance(photo, types.Photo):
|
if isinstance(loc, types.FileLocation):
|
||||||
sizes = photo.sizes
|
photo_size = pyrogram_types.PhotoSize(
|
||||||
photo_sizes = []
|
file_id=encode(
|
||||||
|
pack(
|
||||||
for size in sizes:
|
"<iiqqqqi",
|
||||||
if isinstance(size, (types.PhotoSize, types.PhotoCachedSize)):
|
2,
|
||||||
loc = size.location
|
loc.dc_id,
|
||||||
|
photo.id,
|
||||||
if isinstance(size, types.PhotoSize):
|
photo.access_hash,
|
||||||
file_size = size.size
|
loc.volume_id,
|
||||||
else:
|
loc.secret,
|
||||||
file_size = len(size.bytes)
|
loc.local_id
|
||||||
|
)
|
||||||
if isinstance(loc, types.FileLocation):
|
),
|
||||||
photo_size = pyrogram_types.PhotoSize(
|
width=size.w,
|
||||||
file_id=encode(
|
height=size.h,
|
||||||
pack(
|
file_size=file_size,
|
||||||
"<iiqqqqi",
|
date=photo.date
|
||||||
2,
|
|
||||||
loc.dc_id,
|
|
||||||
photo.id,
|
|
||||||
photo.access_hash,
|
|
||||||
loc.volume_id,
|
|
||||||
loc.secret,
|
|
||||||
loc.local_id
|
|
||||||
)
|
)
|
||||||
),
|
|
||||||
width=size.w,
|
|
||||||
height=size.h,
|
|
||||||
file_size=file_size,
|
|
||||||
date=photo.date
|
|
||||||
)
|
|
||||||
|
|
||||||
photo_sizes.append(photo_size)
|
photo_sizes.append(photo_size)
|
||||||
|
|
||||||
new_chat_photo = photo_sizes
|
new_chat_photo = photo_sizes
|
||||||
|
|
||||||
m = pyrogram_types.Message(
|
m = pyrogram_types.Message(
|
||||||
message_id=message.id,
|
message_id=message.id,
|
||||||
date=message.date,
|
date=message.date,
|
||||||
chat=parse_chat(message, users, chats),
|
chat=parse_chat(message, users, chats),
|
||||||
from_user=parse_user(users.get(message.from_id, None)),
|
from_user=parse_user(users.get(message.from_id, None)),
|
||||||
new_chat_members=new_chat_members,
|
new_chat_members=new_chat_members,
|
||||||
left_chat_member=left_chat_member,
|
left_chat_member=left_chat_member,
|
||||||
new_chat_title=new_chat_title,
|
new_chat_title=new_chat_title,
|
||||||
new_chat_photo=new_chat_photo,
|
new_chat_photo=new_chat_photo,
|
||||||
delete_chat_photo=delete_chat_photo,
|
delete_chat_photo=delete_chat_photo,
|
||||||
migrate_to_chat_id=int("-100" + str(migrate_to_chat_id)) if migrate_to_chat_id else None,
|
migrate_to_chat_id=int("-100" + str(migrate_to_chat_id)) if migrate_to_chat_id else None,
|
||||||
migrate_from_chat_id=-migrate_from_chat_id if migrate_from_chat_id else None,
|
migrate_from_chat_id=-migrate_from_chat_id if migrate_from_chat_id else None,
|
||||||
group_chat_created=group_chat_created,
|
group_chat_created=group_chat_created,
|
||||||
channel_chat_created=channel_chat_created,
|
channel_chat_created=channel_chat_created,
|
||||||
client=proxy(client)
|
client=proxy(client)
|
||||||
# TODO: supergroup_chat_created
|
# TODO: supergroup_chat_created
|
||||||
)
|
)
|
||||||
|
|
||||||
if isinstance(action, types.MessageActionPinMessage):
|
if isinstance(action, types.MessageActionPinMessage):
|
||||||
m.pinned_message = client.get_messages(m.chat.id, message.reply_to_msg_id, replies=0)
|
m.pinned_message = client.get_messages(m.chat.id, message.reply_to_msg_id, replies=0)
|
||||||
|
else:
|
||||||
|
m = pyrogram_types.Message(message_id=message.id, client=proxy(client))
|
||||||
|
|
||||||
return m
|
parsed_messages.append(m)
|
||||||
|
|
||||||
|
return parsed_messages if is_list else parsed_messages[0]
|
||||||
def parse_message_empty(
|
|
||||||
client,
|
|
||||||
message: types.MessageEmpty
|
|
||||||
) -> pyrogram_types.Message:
|
|
||||||
return pyrogram_types.Message(message_id=message.id, client=proxy(client))
|
|
||||||
|
|
||||||
|
|
||||||
def get_peer_id(input_peer) -> int:
|
def get_peer_id(input_peer) -> int:
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
# 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 import functions, types
|
from pyrogram.api import functions, types
|
||||||
from ....ext import BaseClient, utils
|
from ...ext import BaseClient, utils
|
||||||
|
|
||||||
|
|
||||||
class ForwardMessages(BaseClient):
|
class ForwardMessages(BaseClient):
|
||||||
@ -79,7 +79,10 @@ class ForwardMessages(BaseClient):
|
|||||||
for i in r.updates:
|
for i in r.updates:
|
||||||
if isinstance(i, (types.UpdateNewMessage, types.UpdateNewChannelMessage)):
|
if isinstance(i, (types.UpdateNewMessage, types.UpdateNewChannelMessage)):
|
||||||
messages.append(
|
messages.append(
|
||||||
utils.parse_message(self, i.message, users, chats)
|
utils.parse_messages(
|
||||||
|
self, i.message,
|
||||||
|
users, chats
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
return messages if is_iterable else messages[0]
|
return messages if is_iterable else messages[0]
|
||||||
|
@ -23,13 +23,35 @@ from ...ext import BaseClient, utils
|
|||||||
class GetHistory(BaseClient):
|
class GetHistory(BaseClient):
|
||||||
def get_history(self,
|
def get_history(self,
|
||||||
chat_id: int or str,
|
chat_id: int or str,
|
||||||
offset: int,
|
offset: int = 0,
|
||||||
limit: int,
|
limit: int = 100,
|
||||||
offset_id: int = 0,
|
offset_id: int = 0,
|
||||||
offset_date: int = 0,
|
offset_date: int = 0):
|
||||||
max_id: int = 0,
|
"""Use this method to retrieve the history of a chat.
|
||||||
min_id: int = 0):
|
|
||||||
# TODO: Documentation
|
You can get up to 100 messages at once.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
chat_id (``int`` | ``str``):
|
||||||
|
Unique identifier (int) or username (str) of the target chat.
|
||||||
|
For your personal cloud (Saved Messages) you can simply use "me" or "self".
|
||||||
|
For a contact that exists in your Telegram address book you can use his phone number (str).
|
||||||
|
For a private channel/supergroup you can use its *t.me/joinchat/* link.
|
||||||
|
|
||||||
|
offset (``int``, *optional*)
|
||||||
|
Sequential number of the first message to be returned.
|
||||||
|
Defaults to 0 (most recent message).
|
||||||
|
|
||||||
|
limit (``int``, *optional*):
|
||||||
|
Limits the number of messages to be retrieved.
|
||||||
|
By default, the first 100 messages are returned.
|
||||||
|
|
||||||
|
offset_id (``int``, *optional*):
|
||||||
|
Pass a message identifier as offset to retrieve only older messages starting from that message.
|
||||||
|
|
||||||
|
offset_date (``int``, *optional*):
|
||||||
|
Pass a date in Unix time as offset to retrieve only older messages starting from that date.
|
||||||
|
"""
|
||||||
|
|
||||||
r = self.send(
|
r = self.send(
|
||||||
functions.messages.GetHistory(
|
functions.messages.GetHistory(
|
||||||
@ -38,8 +60,8 @@ class GetHistory(BaseClient):
|
|||||||
offset_date=offset_date,
|
offset_date=offset_date,
|
||||||
add_offset=offset,
|
add_offset=offset,
|
||||||
limit=limit,
|
limit=limit,
|
||||||
max_id=max_id,
|
max_id=0,
|
||||||
min_id=min_id,
|
min_id=0,
|
||||||
hash=0
|
hash=0
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@ -47,26 +69,22 @@ class GetHistory(BaseClient):
|
|||||||
users = {i.id: i for i in r.users}
|
users = {i.id: i for i in r.users}
|
||||||
chats = {i.id: i for i in r.chats}
|
chats = {i.id: i for i in r.chats}
|
||||||
|
|
||||||
messages = []
|
reply_to_messages = {i.reply_to_msg_id: None for i in r.messages if i.reply_to_msg_id}
|
||||||
|
|
||||||
for i in r.messages:
|
if reply_to_messages:
|
||||||
if isinstance(i, types.Message):
|
temp = self.get_messages(chat_id, reply_to_messages.keys(), replies=0)
|
||||||
messages.append(
|
|
||||||
utils.parse_message(
|
assert len(temp) == len(reply_to_messages)
|
||||||
self, i, users, chats
|
|
||||||
)
|
for i in range(len(temp)):
|
||||||
)
|
reply_to_messages[temp[i].message_id] = temp[i]
|
||||||
elif isinstance(i, types.MessageService):
|
|
||||||
messages.append(
|
messages = utils.parse_messages(self, r.messages, users, chats, replies=0)
|
||||||
utils.parse_message_service(
|
|
||||||
self, i, users, chats
|
assert len(messages) == len(r.messages)
|
||||||
)
|
|
||||||
)
|
for i in range(len(messages)):
|
||||||
else:
|
if r.messages[i].reply_to_msg_id:
|
||||||
messages.append(
|
messages[i].reply_to_message = reply_to_messages[r.messages[i].reply_to_msg_id]
|
||||||
utils.parse_message_empty(
|
|
||||||
self, i
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
return messages
|
return messages
|
||||||
|
@ -68,30 +68,11 @@ class GetMessages(BaseClient):
|
|||||||
|
|
||||||
r = self.send(rpc)
|
r = self.send(rpc)
|
||||||
|
|
||||||
users = {i.id: i for i in r.users}
|
messages = utils.parse_messages(
|
||||||
chats = {i.id: i for i in r.chats}
|
self, r.messages,
|
||||||
|
{i.id: i for i in r.users},
|
||||||
messages = []
|
{i.id: i for i in r.chats},
|
||||||
|
replies=replies
|
||||||
for i in r.messages:
|
)
|
||||||
if isinstance(i, types.Message):
|
|
||||||
messages.append(
|
|
||||||
utils.parse_message(
|
|
||||||
self, i, users, chats,
|
|
||||||
replies=replies
|
|
||||||
)
|
|
||||||
)
|
|
||||||
elif isinstance(i, types.MessageService):
|
|
||||||
messages.append(
|
|
||||||
utils.parse_message_service(
|
|
||||||
self, i, users, chats
|
|
||||||
)
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
messages.append(
|
|
||||||
utils.parse_message_empty(
|
|
||||||
self, i
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
return messages if is_iterable else messages[0]
|
return messages if is_iterable else messages[0]
|
||||||
|
@ -176,7 +176,8 @@ class SendAudio(BaseClient):
|
|||||||
else:
|
else:
|
||||||
for i in r.updates:
|
for i in r.updates:
|
||||||
if isinstance(i, (types.UpdateNewMessage, types.UpdateNewChannelMessage)):
|
if isinstance(i, (types.UpdateNewMessage, types.UpdateNewChannelMessage)):
|
||||||
users = {i.id: i for i in r.users}
|
return utils.parse_messages(
|
||||||
chats = {i.id: i for i in r.chats}
|
self, i.message,
|
||||||
|
{i.id: i for i in r.users},
|
||||||
return utils.parse_message(self, i.message, users, chats)
|
{i.id: i for i in r.chats}
|
||||||
|
)
|
||||||
|
@ -82,7 +82,8 @@ class SendContact(BaseClient):
|
|||||||
|
|
||||||
for i in r.updates:
|
for i in r.updates:
|
||||||
if isinstance(i, (types.UpdateNewMessage, types.UpdateNewChannelMessage)):
|
if isinstance(i, (types.UpdateNewMessage, types.UpdateNewChannelMessage)):
|
||||||
users = {i.id: i for i in r.users}
|
return utils.parse_messages(
|
||||||
chats = {i.id: i for i in r.chats}
|
self, i.message,
|
||||||
|
{i.id: i for i in r.users},
|
||||||
return utils.parse_message(self, i.message, users, chats)
|
{i.id: i for i in r.chats}
|
||||||
|
)
|
||||||
|
@ -157,7 +157,8 @@ class SendDocument(BaseClient):
|
|||||||
else:
|
else:
|
||||||
for i in r.updates:
|
for i in r.updates:
|
||||||
if isinstance(i, (types.UpdateNewMessage, types.UpdateNewChannelMessage)):
|
if isinstance(i, (types.UpdateNewMessage, types.UpdateNewChannelMessage)):
|
||||||
users = {i.id: i for i in r.users}
|
return utils.parse_messages(
|
||||||
chats = {i.id: i for i in r.chats}
|
self, i.message,
|
||||||
|
{i.id: i for i in r.users},
|
||||||
return utils.parse_message(self, i.message, users, chats)
|
{i.id: i for i in r.chats}
|
||||||
|
)
|
||||||
|
@ -79,7 +79,8 @@ class SendLocation(BaseClient):
|
|||||||
|
|
||||||
for i in r.updates:
|
for i in r.updates:
|
||||||
if isinstance(i, (types.UpdateNewMessage, types.UpdateNewChannelMessage)):
|
if isinstance(i, (types.UpdateNewMessage, types.UpdateNewChannelMessage)):
|
||||||
users = {i.id: i for i in r.users}
|
return utils.parse_messages(
|
||||||
chats = {i.id: i for i in r.chats}
|
self, i.message,
|
||||||
|
{i.id: i for i in r.users},
|
||||||
return utils.parse_message(self, i.message, users, chats)
|
{i.id: i for i in r.chats}
|
||||||
|
)
|
||||||
|
@ -161,7 +161,8 @@ class SendPhoto(BaseClient):
|
|||||||
else:
|
else:
|
||||||
for i in r.updates:
|
for i in r.updates:
|
||||||
if isinstance(i, (types.UpdateNewMessage, types.UpdateNewChannelMessage)):
|
if isinstance(i, (types.UpdateNewMessage, types.UpdateNewChannelMessage)):
|
||||||
users = {i.id: i for i in r.users}
|
return utils.parse_messages(
|
||||||
chats = {i.id: i for i in r.chats}
|
self, i.message,
|
||||||
|
{i.id: i for i in r.users},
|
||||||
return utils.parse_message(self, i.message, users, chats)
|
{i.id: i for i in r.chats}
|
||||||
|
)
|
||||||
|
@ -145,7 +145,8 @@ class SendSticker(BaseClient):
|
|||||||
else:
|
else:
|
||||||
for i in r.updates:
|
for i in r.updates:
|
||||||
if isinstance(i, (types.UpdateNewMessage, types.UpdateNewChannelMessage)):
|
if isinstance(i, (types.UpdateNewMessage, types.UpdateNewChannelMessage)):
|
||||||
users = {i.id: i for i in r.users}
|
return utils.parse_messages(
|
||||||
chats = {i.id: i for i in r.chats}
|
self, i.message,
|
||||||
|
{i.id: i for i in r.users},
|
||||||
return utils.parse_message(self, i.message, users, chats)
|
{i.id: i for i in r.chats}
|
||||||
|
)
|
||||||
|
@ -96,7 +96,8 @@ class SendVenue(BaseClient):
|
|||||||
|
|
||||||
for i in r.updates:
|
for i in r.updates:
|
||||||
if isinstance(i, (types.UpdateNewMessage, types.UpdateNewChannelMessage)):
|
if isinstance(i, (types.UpdateNewMessage, types.UpdateNewChannelMessage)):
|
||||||
users = {i.id: i for i in r.users}
|
return utils.parse_messages(
|
||||||
chats = {i.id: i for i in r.chats}
|
self, i.message,
|
||||||
|
{i.id: i for i in r.users},
|
||||||
return utils.parse_message(self, i.message, users, chats)
|
{i.id: i for i in r.chats}
|
||||||
|
)
|
||||||
|
@ -187,7 +187,8 @@ class SendVideo(BaseClient):
|
|||||||
else:
|
else:
|
||||||
for i in r.updates:
|
for i in r.updates:
|
||||||
if isinstance(i, (types.UpdateNewMessage, types.UpdateNewChannelMessage)):
|
if isinstance(i, (types.UpdateNewMessage, types.UpdateNewChannelMessage)):
|
||||||
users = {i.id: i for i in r.users}
|
return utils.parse_messages(
|
||||||
chats = {i.id: i for i in r.chats}
|
self, i.message,
|
||||||
|
{i.id: i for i in r.users},
|
||||||
return utils.parse_message(self, i.message, users, chats)
|
{i.id: i for i in r.chats}
|
||||||
|
)
|
||||||
|
@ -155,7 +155,8 @@ class SendVideoNote(BaseClient):
|
|||||||
else:
|
else:
|
||||||
for i in r.updates:
|
for i in r.updates:
|
||||||
if isinstance(i, (types.UpdateNewMessage, types.UpdateNewChannelMessage)):
|
if isinstance(i, (types.UpdateNewMessage, types.UpdateNewChannelMessage)):
|
||||||
users = {i.id: i for i in r.users}
|
return utils.parse_messages(
|
||||||
chats = {i.id: i for i in r.chats}
|
self, i.message,
|
||||||
|
{i.id: i for i in r.users},
|
||||||
return utils.parse_message(self, i.message, users, chats)
|
{i.id: i for i in r.chats}
|
||||||
|
)
|
||||||
|
@ -164,7 +164,8 @@ class SendVoice(BaseClient):
|
|||||||
else:
|
else:
|
||||||
for i in r.updates:
|
for i in r.updates:
|
||||||
if isinstance(i, (types.UpdateNewMessage, types.UpdateNewChannelMessage)):
|
if isinstance(i, (types.UpdateNewMessage, types.UpdateNewChannelMessage)):
|
||||||
users = {i.id: i for i in r.users}
|
return utils.parse_messages(
|
||||||
chats = {i.id: i for i in r.chats}
|
self, i.message,
|
||||||
|
{i.id: i for i in r.users},
|
||||||
return utils.parse_message(self, i.message, users, chats)
|
{i.id: i for i in r.chats}
|
||||||
|
)
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
from pyrogram.api import functions, types
|
from pyrogram.api import functions, types
|
||||||
from pyrogram.client import types as pyrogram_types
|
from pyrogram.client import types as pyrogram_types
|
||||||
from ....ext import utils, BaseClient
|
from ...ext import utils, BaseClient
|
||||||
|
|
||||||
|
|
||||||
class SendMessage(BaseClient):
|
class SendMessage(BaseClient):
|
||||||
@ -91,7 +91,8 @@ class SendMessage(BaseClient):
|
|||||||
|
|
||||||
for i in r.updates:
|
for i in r.updates:
|
||||||
if isinstance(i, (types.UpdateNewMessage, types.UpdateNewChannelMessage)):
|
if isinstance(i, (types.UpdateNewMessage, types.UpdateNewChannelMessage)):
|
||||||
users = {i.id: i for i in r.users}
|
return utils.parse_messages(
|
||||||
chats = {i.id: i for i in r.chats}
|
self, i.message,
|
||||||
|
{i.id: i for i in r.users},
|
||||||
return utils.parse_message(self, i.message, users, chats)
|
{i.id: i for i in r.chats}
|
||||||
|
)
|
||||||
|
@ -69,7 +69,8 @@ class EditMessageCaption(BaseClient):
|
|||||||
|
|
||||||
for i in r.updates:
|
for i in r.updates:
|
||||||
if isinstance(i, (types.UpdateEditMessage, types.UpdateEditChannelMessage)):
|
if isinstance(i, (types.UpdateEditMessage, types.UpdateEditChannelMessage)):
|
||||||
users = {i.id: i for i in r.users}
|
return utils.parse_messages(
|
||||||
chats = {i.id: i for i in r.chats}
|
self, i.message,
|
||||||
|
{i.id: i for i in r.users},
|
||||||
return utils.parse_message(self, i.message, users, chats)
|
{i.id: i for i in r.chats}
|
||||||
|
)
|
||||||
|
@ -58,7 +58,8 @@ class EditMessageReplyMarkup(BaseClient):
|
|||||||
|
|
||||||
for i in r.updates:
|
for i in r.updates:
|
||||||
if isinstance(i, (types.UpdateEditMessage, types.UpdateEditChannelMessage)):
|
if isinstance(i, (types.UpdateEditMessage, types.UpdateEditChannelMessage)):
|
||||||
users = {i.id: i for i in r.users}
|
return utils.parse_messages(
|
||||||
chats = {i.id: i for i in r.chats}
|
self, i.message,
|
||||||
|
{i.id: i for i in r.users},
|
||||||
return utils.parse_message(self, i.message, users, chats)
|
{i.id: i for i in r.chats}
|
||||||
|
)
|
||||||
|
@ -74,7 +74,8 @@ class EditMessageText(BaseClient):
|
|||||||
|
|
||||||
for i in r.updates:
|
for i in r.updates:
|
||||||
if isinstance(i, (types.UpdateEditMessage, types.UpdateEditChannelMessage)):
|
if isinstance(i, (types.UpdateEditMessage, types.UpdateEditChannelMessage)):
|
||||||
users = {i.id: i for i in r.users}
|
return utils.parse_messages(
|
||||||
chats = {i.id: i for i in r.chats}
|
self, i.message,
|
||||||
|
{i.id: i for i in r.users},
|
||||||
return utils.parse_message(self, i.message, users, chats)
|
{i.id: i for i in r.chats}
|
||||||
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user