@@ -29,6 +29,8 @@ public function __construct(\stdClass $telegramResponse, Client $client, string
2929
3030 private function parseMessages (): self {
3131 if ($ messages = $ this ->telegramResponse ->messages ?? []) {
32+ $ messages = array_merge ($ this ->telegramResponse ->sponsored_messages ?? [], $ messages );
33+
3234 $ groupedMessages = [];
3335 foreach ($ messages as $ key => $ message ) {
3436 if (
@@ -43,7 +45,7 @@ private function parseMessages(): self {
4345 if ($ description || $ this ->hasMedia ($ message )) {
4446 $ info = $ this ->getMediaInfo ($ message );
4547 $ parsedMessage = [
46- 'url ' => $ this ->getMessageUrl ($ message-> id ),
48+ 'url ' => $ this ->getMessageUrl ($ message ),
4749 'title ' => null ,
4850 'description ' => $ description ,
4951 'media ' => [$ info ],
@@ -84,7 +86,7 @@ private function parseMessages(): self {
8486
8587 $ parsedMessage = $ this ->setTitle ($ parsedMessage , $ message );
8688
87- $ this ->list [$ message -> id ] = $ parsedMessage ;
89+ $ this ->list [] = $ parsedMessage ;
8890 }
8991 }
9092 }
@@ -102,35 +104,52 @@ private function setTitle(array $parsedMessage, \stdClass $message): array {
102104 $ parsedMessage ['title ' ] = $ matches ['sentence ' ] ?? null ;
103105 $ parsedMessage ['title ' ] = trim ($ parsedMessage ['title ' ]);
104106
105- if ($ parsedMessage ['title ' ]) {
106- return $ parsedMessage ;
107- }
108-
109- //Get first 100 symbols from description
110- $ parsedMessage ['title ' ] = mb_strimwidth ($ descriptionText , 0 , 100 , ' [...] ' );
111- return $ parsedMessage ;
112107 }
113108
114109 if (!empty ($ message ->media )) {
115110 $ mime = $ message ->media ->document ->mime_type ?? '' ;
116111 if (strpos ($ mime , 'video ' ) !== false ) {
117- $ parsedMessage ['title ' ] = '[Video] ' ;
112+ $ parsedMessage ['title ' ] = '[Video] ' . $ parsedMessage [ ' title ' ] ;
118113 } elseif ($ message ->media ->_ === 'messageMediaPhoto ' ) {
119- $ parsedMessage ['title ' ] = '[Photo] ' ;
114+ $ parsedMessage ['title ' ] = '[Photo] ' . $ parsedMessage [ ' title ' ] ;
120115 } else {
121- $ parsedMessage ['title ' ] = '[Media] ' ;
116+ $ parsedMessage ['title ' ] = '[Media] ' . $ parsedMessage [ ' title ' ] ;
122117 }
123118 }
124119
120+ if ($ message ->_ === 'sponsoredMessage ' ) {
121+ $ parsedMessage ['title ' ] = '[Sponsored] ' . $ parsedMessage ['title ' ];
122+ }
123+
124+ $ parsedMessage ['title ' ] = trim ($ parsedMessage ['title ' ]);
125+
126+ //Get first 100 symbols from description
127+ if (mb_strlen ($ parsedMessage ['title ' ]) > 100 ) {
128+ $ parsedMessage ['title ' ] = mb_strimwidth ($ descriptionText , 0 , 100 , ' [...] ' );
129+ }
130+
125131 return $ parsedMessage ;
126132 }
127133
128134 /**
129- * @param string $messageId
130- * @return string|null
135+ * @param object $message
136+ * @return string
131137 */
132- private function getMessageUrl ($ messageId = '' ) {
133- return $ this ->channelUrl . $ messageId ;
138+ private function getMessageUrl (object $ message ): string {
139+ if ($ message ->_ === 'sponsoredMessage ' ) {
140+ $ postId = !empty ($ message ->channel_post ) ? '/ ' . $ message ->channel_post : '' ;
141+ $ startParam = !empty ($ message ->start_param ) ? '/?start= ' . $ message ->start_param : '' ;
142+ $ peer = $ message ->peer ->bot_api_id ;
143+ foreach ($ message ->peer as $ property ) {
144+ if (property_exists ($ property , 'username ' )) {
145+ $ peer = $ property ->username ;
146+ break ;
147+ }
148+ }
149+ return self ::TELEGRAM_URL . $ peer . $ postId . $ startParam ;
150+ } else {
151+ return $ this ->channelUrl . $ message ->id ;
152+ }
134153 }
135154
136155 private function getMediaInfo ($ message ): ?\stdClass {
0 commit comments