@@ -422,7 +422,7 @@ async def _parse(
422422 if isinstance (action , raw .types .MessageActionChatAddUser ):
423423 new_chat_members = [types .User ._parse (client , users [i ]) for i in action .users ]
424424 elif isinstance (action , raw .types .MessageActionChatJoinedByLink ):
425- new_chat_members = [types .User ._parse (client , users [message .from_id ])]
425+ new_chat_members = [types .User ._parse (client , users [utils . get_raw_peer_id ( message .from_id ) ])]
426426 elif isinstance (action , raw .types .MessageActionChatDeleteUser ):
427427 left_chat_member = types .User ._parse (client , users [action .user_id ])
428428 elif isinstance (action , raw .types .MessageActionChatEditTitle ):
@@ -444,7 +444,7 @@ async def _parse(
444444 message_id = message .id ,
445445 date = message .date ,
446446 chat = types .Chat ._parse (client , message , users , chats ),
447- from_user = types .User ._parse (client , users .get (message .from_id , None )),
447+ from_user = types .User ._parse (client , users .get (utils . get_raw_peer_id ( message .from_id ) , None )),
448448 service = True ,
449449 new_chat_members = new_chat_members ,
450450 left_chat_member = left_chat_member ,
@@ -472,7 +472,7 @@ async def _parse(
472472 if isinstance (action , raw .types .MessageActionGameScore ):
473473 parsed_message .game_high_score = types .GameHighScore ._parse_action (client , message , users )
474474
475- if message .reply_to_msg_id and replies :
475+ if message .reply_to and replies :
476476 try :
477477 parsed_message .reply_to_message = await client .get_messages (
478478 parsed_message .chat .id ,
@@ -501,13 +501,17 @@ async def _parse(
501501 forward_date = forward_header .date
502502
503503 if forward_header .from_id :
504- forward_from = types .User ._parse (client , users [forward_header .from_id ])
504+ raw_peer_id = utils .get_raw_peer_id (forward_header .from_id )
505+ peer_id = utils .get_peer_id (forward_header .from_id )
506+
507+ if peer_id > 0 :
508+ forward_from = types .User ._parse (client , users [raw_peer_id ])
509+ else :
510+ forward_from_chat = types .Chat ._parse_channel_chat (client , chats [raw_peer_id ])
511+ forward_from_message_id = forward_header .channel_post
512+ forward_signature = forward_header .post_author
505513 elif forward_header .from_name :
506514 forward_sender_name = forward_header .from_name
507- else :
508- forward_from_chat = types .Chat ._parse_channel_chat (client , chats [forward_header .channel_id ])
509- forward_from_message_id = forward_header .channel_post
510- forward_signature = forward_header .post_author
511515
512516 photo = None
513517 location = None
@@ -608,7 +612,7 @@ async def _parse(
608612 message_id = message .id ,
609613 date = message .date ,
610614 chat = types .Chat ._parse (client , message , users , chats ),
611- from_user = types .User ._parse (client , users .get (message .from_id , None )),
615+ from_user = types .User ._parse (client , users .get (utils . get_raw_peer_id ( message .from_id ) , None )),
612616 text = (
613617 Str (message .message ).init (entities ) or None
614618 if media is None or web_page is not None
@@ -664,7 +668,7 @@ async def _parse(
664668 client = client
665669 )
666670
667- if message .reply_to_msg_id and replies :
671+ if message .reply_to and replies :
668672 try :
669673 parsed_message .reply_to_message = await client .get_messages (
670674 parsed_message .chat .id ,
0 commit comments