mirror of
				https://gitlab.com/octospacc/Snippets.git
				synced 2025-06-27 09:02:56 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			175 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			175 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| $tmeroot = 'https://t.me';
 | |
| $cdnroot = 'https://telegram.org'; //$tmeroot;
 | |
| $extracdnroot = '..'; //$cdnroot;
 | |
| 
 | |
| function safemkdir ( $path ) {
 | |
| 	if ( !is_dir($path) ) {
 | |
| 		return mkdir($path);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| function usernameorid ( $message ) {
 | |
| 	return ($message->from ? htmlspecialchars($message->from) : $message->from_id);
 | |
| }
 | |
| 
 | |
| function colorfromid ( $id ) {
 | |
| 	if ( ($id = (int)(substr( $id, -2 ) * 0.07)) === 7 ) {
 | |
| 		$id = 0;
 | |
| 	}
 | |
| 	return $id;
 | |
| }
 | |
| 
 | |
| function getreplytoid ( $message ) {
 | |
| 	return (property_exists( $message, 'reply_to_message_id' ) ? $message->reply_to_message_id : null);
 | |
| }
 | |
| 
 | |
| function renderquotemessage ( $chat, $message ) {
 | |
| 	global $tmeroot;
 | |
| ?><div class="tgme_widget_message_bubble tgme_widget_message_bubble_quoting"><div class="tgme_widget_message_author accent_color"><a href="<?php echo $tmeroot; ?>/<?php echo $chat->id; ?>/<?php echo $message->id; ?>/">↩️ (in reply to) <span class="tgme_widget_message_owner_name"><span dir="auto"><?php echo usernameorid($message); ?></span></span></a></div><div class="tgme_widget_message_text js-message_text" dir="auto"><?php echo htmlspecialchars($message->full_text); ?></div><div class="tgme_widget_message_footer js-message_footer"><div class="tgme_widget_message_info js-message_info"><span class="tgme_widget_message_meta"><a class="tgme_widget_message_date" href="<?php echo $tmeroot; ?>/<?php echo $chat->id; ?>/<?php echo $message->id; ?>/"><time datetime="<?php echo $message->date; ?>" class="datetime"><?php echo $message->date; ?></time></a></span></div></div></div><?php
 | |
| }
 | |
| 
 | |
| function rendermessage ( $chat, $message ) {
 | |
| 	global $tmeroot;
 | |
| ?><div class="tgme_widget_message text_not_supported_wrap js-widget_message" data-post="<?php echo $chat->id; ?>/<?php echo $message->id; ?>" data-user="<?php echo $message->from_id; ?>"><div class="tgme_widget_message_user"><a><i class="tgme_widget_message_user_photo bgcolor<?php echo colorfromid($message->from_id); ?>" data-content="<?php echo usernameorid($message)[0]; ?>"></i></a></div><div class="tgme_widget_message_bubble"><i class="tgme_widget_message_bubble_tail"><svg class="bubble_icon" width="9px" height="20px" viewBox="0 0 9 20"><g fill="none"><path class="background" fill="#ffffff" d="M8,1 L9,1 L9,20 L8,20 L8,18 C7.807,15.161 7.124,12.233 5.950,9.218 C5.046,6.893 3.504,4.733 1.325,2.738 L1.325,2.738 C0.917,2.365 0.89,1.732 1.263,1.325 C1.452,1.118 1.72,1 2,1 L8,1 Z"></path><path class="border_1x" fill="#d7e3ec" d="M9,1 L2,1 C1.72,1 1.452,1.118 1.263,1.325 C0.89,1.732 0.917,2.365 1.325,2.738 C3.504,4.733 5.046,6.893 5.95,9.218 C7.124,12.233 7.807,15.161 8,18 L8,20 L9,20 L9,1 Z M2,0 L9,0 L9,20 L7,20 L7,20 L7.002,18.068 C6.816,15.333 6.156,12.504 5.018,9.58 C4.172,7.406 2.72,5.371 0.649,3.475 C-0.165,2.729 -0.221,1.464 0.525,0.649 C0.904,0.236 1.439,0 2,0 Z"></path><path class="border_2x" d="M9,1 L2,1 C1.72,1 1.452,1.118 1.263,1.325 C0.89,1.732 0.917,2.365 1.325,2.738 C3.504,4.733 5.046,6.893 5.95,9.218 C7.124,12.233 7.807,15.161 8,18 L8,20 L9,20 L9,1 Z M2,0.5 L9,0.5 L9,20 L7.5,20 L7.5,20 L7.501,18.034 C7.312,15.247 6.64,12.369 5.484,9.399 C4.609,7.15 3.112,5.052 0.987,3.106 C0.376,2.547 0.334,1.598 0.894,0.987 C1.178,0.677 1.579,0.5 2,0.5 Z"></path><path class="border_3x" d="M9,1 L2,1 C1.72,1 1.452,1.118 1.263,1.325 C0.89,1.732 0.917,2.365 1.325,2.738 C3.504,4.733 5.046,6.893 5.95,9.218 C7.124,12.233 7.807,15.161 8,18 L8,20 L9,20 L9,1 Z M2,0.667 L9,0.667 L9,20 L7.667,20 L7.667,20 L7.668,18.023 C7.477,15.218 6.802,12.324 5.64,9.338 C4.755,7.064 3.243,4.946 1.1,2.983 C0.557,2.486 0.52,1.643 1.017,1.1 C1.269,0.824 1.626,0.667 2,0.667 Z"></path></g></svg></i><div class="tgme_widget_message_author accent_color"><span class="tgme_widget_message_owner_name"><span dir="auto"><?php echo usernameorid($message); ?></span></span></div><div class="tgme_widget_message_text js-message_text" dir="auto"><?php echo htmlspecialchars($message->full_text); ?></div><div class="tgme_widget_message_footer js-message_footer"><div class="tgme_widget_message_info js-message_info"><span class="tgme_widget_message_meta"><a class="tgme_widget_message_date" href="<?php echo $tmeroot; ?>/<?php echo $chat->id; ?>/<?php echo $message->id; ?>/"><time datetime="<?php echo $message->date; ?>" class="datetime"><?php echo $message->date; ?></time></a></span></div></div></div></div><?php
 | |
| }
 | |
| 
 | |
| function recursereplies ( $chat, $message ) {
 | |
| 	if ( array_key_exists( $message->id, $chat->threads ) ) {
 | |
| 		foreach ( $chat->threads[$message->id] as $childid ) {
 | |
| 		?><div class="tgme_widget_reply"><?php
 | |
| 			fwrite( STDERR, "> {$childid}\n" );
 | |
| 			$child = $chat->messages[$childid];
 | |
| 			rendermessage( $chat, $child );
 | |
| 			recursereplies( $chat, $child );
 | |
| 		?></div><?php
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| fclose(STDOUT);
 | |
| $output = (implode( '.', array_slice( explode( '.', $argv[1] ), 0, -1 ) ) . '-HTML' . DIRECTORY_SEPARATOR);
 | |
| $chat = json_decode(file_get_contents($argv[1]));
 | |
| safemkdir($output);
 | |
| 
 | |
| safemkdir("{$output}css");
 | |
| $STDOUT = fopen( ("{$output}css" . DIRECTORY_SEPARATOR . 'tgme-dump.css'), 'w' );
 | |
| ?>div.tgme_head {
 | |
| 	display: revert;
 | |
| 	white-space: nowrap;
 | |
| 	overflow-x: auto;
 | |
| }
 | |
| div.tgme_head > h1 {
 | |
| 	display: inline-block;
 | |
| 	margin: 8px;
 | |
| }
 | |
| div.tgme_widget_reply {
 | |
| 	padding-left: 1em;
 | |
| 	padding-right: 1em;
 | |
| }
 | |
| div.tgme_widget_reply > div.tgme_widget_message {
 | |
| 	padding-top: 2em;
 | |
| }
 | |
| div.tgme_page_widget > div.tgme_widget_replies {
 | |
| 	margin-top: 2em;
 | |
| 	border-top: 2px solid gray;
 | |
| }
 | |
| div.tgme_page_widget_actions_wrap {
 | |
| 	position: sticky;
 | |
| 	bottom: 2em;
 | |
| 	padding-top: 2em;
 | |
| }
 | |
| div.tgme_page_widget_actions_wrap span.tgme_action_button_label {
 | |
| 	display: initial;
 | |
| }
 | |
| div.tgme_widget_message_bubble.tgme_widget_message_bubble_quoting {
 | |
| 	border-radius: 10px 10px 10px 10px;
 | |
| 	margin-bottom: 2em;
 | |
| 	margin-left: 4em;
 | |
| 	margin-right: 4em;
 | |
| 	opacity: 80%;
 | |
| }
 | |
| div.tgme_widget_message_bubble.tgme_widget_message_bubble_quoting div.tgme_widget_message_text {
 | |
| 	text-overflow: ellipsis;
 | |
| 	white-space: nowrap;
 | |
| 	overflow: hidden;
 | |
| 	opacity: 60%;
 | |
| }<?php
 | |
| fclose($STDOUT);
 | |
| 
 | |
| safemkdir("{$output}js");
 | |
| $STDOUT = fopen( ("{$output}js" . DIRECTORY_SEPARATOR . 'tgme-init.js'), 'w' );
 | |
| ?>var tme_bg = document.getElementById('tgme_background');
 | |
| if (tme_bg) {
 | |
| 	TWallpaper.init(tme_bg);
 | |
| 	TWallpaper.animate(true);
 | |
| 	window.addEventListener('focus', TWallpaper.update);
 | |
| }
 | |
| document.body.classList.remove('no_transition');
 | |
| function toggleTheme (dark) {
 | |
| 	document.documentElement.classList.toggle('theme_dark', dark);
 | |
| 	window.Telegram && Telegram.setWidgetOptions({ dark: dark });
 | |
| }
 | |
| if (window.matchMedia) {
 | |
| 	var darkMedia = window.matchMedia('(prefers-color-scheme: dark)');
 | |
| 	toggleTheme(darkMedia.matches);
 | |
| 	darkMedia.addListener(function(e) { toggleTheme(e.matches); });
 | |
| }<?php
 | |
| fclose($STDOUT);
 | |
| 
 | |
| // prepare the message array, by enumerating threads and assigning keys as message id
 | |
| $firstmessageurl = '';
 | |
| $oldmessages = $chat->messages;
 | |
| $chat->messages = [];
 | |
| $chat->threads = [];
 | |
| foreach ( $oldmessages as $message ) {
 | |
| 	if ( $message->type === 'service' ) {
 | |
| 		continue;
 | |
| 	}
 | |
| 	if ( !$firstmessageurl ) {
 | |
| 		$firstmessageurl = "{$tmeroot}/{$chat->id}/{$message->id}/";
 | |
| 	}
 | |
| 	$chat->messages[$message->id] = $message;
 | |
| 	if ( $replytoid = getreplytoid($message) ) {
 | |
| 		if ( !array_key_exists( $replytoid, $chat->threads ) ) {
 | |
| 			$chat->threads[$replytoid] = [];
 | |
| 		}
 | |
| 		array_push( $chat->threads[$replytoid], $message->id );
 | |
| 	}
 | |
| }
 | |
| 
 | |
| $title = (htmlspecialchars($chat->name) . ' - Redirect');
 | |
| $STDOUT = fopen( "{$output}index.html", 'w' );
 | |
| ?><!DOCTYPE html><html><head>
 | |
| <meta charset="utf-8"/>
 | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
 | |
| <meta http-equiv="refresh" content="0; url='<?php echo $firstmessageurl; ?>'">
 | |
| <title><?php echo $title; ?></title>
 | |
| </head><body>
 | |
| <h1><?php echo $title; ?></h1>
 | |
| <a href="<?php echo $firstmessageurl; ?>"><?php echo $firstmessageurl; ?></a>
 | |
| </body></html><?php
 | |
| fclose($STDOUT);
 | |
| 
 | |
| $previousid = null;
 | |
| foreach ( $chat->messages as $message ) {
 | |
| 	$nextmessage = next($chat->messages);
 | |
| 	fwrite( STDERR, "{$message->id}\n" );
 | |
| 	safemkdir("{$output}{$message->id}");
 | |
| 	$STDOUT = fopen( ($output . $message->id . DIRECTORY_SEPARATOR . 'index.html'), 'w' );
 | |
| 	$title = (usernameorid($message) . " > " . htmlspecialchars($chat->name) . " (Thread {$message->date})");
 | |
| ?><!DOCTYPE html><html><head><meta charset="utf-8"><title><?php echo $title; ?></title><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta property="og:title" content="<?php echo $title; ?>"><meta property="og:site_name" content="Telegram"><meta property="og:description" content="<?php echo htmlspecialchars($message->full_text); ?>"><meta property="twitter:title" content="<?php echo $title; ?>"><meta name="twitter:card" content="summary"><meta name="twitter:description" content="<?php echo htmlspecialchars($message->full_text); ?>"><script>window.matchMedia&&window.matchMedia('(prefers-color-scheme: dark)').matches&&document.documentElement&&document.documentElement.classList&&document.documentElement.classList.add('theme_dark');</script><link rel="icon" type="image/svg+xml" href="<?php echo $cdnroot; ?>/img/website_icon.svg"><link rel="apple-touch-icon" sizes="180x180" href="<?php echo $cdnroot; ?>/img/apple-touch-icon.png"><link rel="icon" type="image/png" sizes="32x32" href="<?php echo $cdnroot; ?>/img/favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="<?php echo $cdnroot; ?>/img/favicon-16x16.png"><link rel="alternate icon" href="<?php echo $cdnroot; ?>/img/favicon.ico" type="image/x-icon"><link href="<?php echo $cdnroot; ?>/css/font-roboto.css" rel="stylesheet" type="text/css"><link href="<?php echo $cdnroot; ?>/css/bootstrap.min.css" rel="stylesheet"><link href="<?php echo $extracdnroot; ?>/css/tgme-dump.css" rel="stylesheet" type="text/css"><link href="<?php echo $cdnroot; ?>/css/telegram.css" rel="stylesheet" media="screen"><link href="<?php echo $cdnroot; ?>/css/widget-frame.css" rel="stylesheet" media="screen"></head><body><div class="tgme_background_wrap"><canvas id="tgme_background" class="tgme_background default" width="50" height="50" data-colors="dbddbb,6ba587,d5d88d,88b884"></canvas><div class="tgme_background_pattern default"></div></div><div class="tgme_page_wrap"><div class="tgme_head_wrap"><div class="tgme_head"><a href="<?php echo $cdnroot; ?>/" class="tgme_head_brand"><svg class="tgme_logo" height="34" viewBox="0 0 34 34" width="34" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><circle cx="17" cy="17" fill="var(--accent-btn-color)" r="17"></circle><path d="m7.06510669 16.9258959c5.22739451-2.1065178 8.71314291-3.4952633 10.45724521-4.1662364 4.9797665-1.9157646 6.0145193-2.2485535 6.6889567-2.2595423.1483363-.0024169.480005.0315855.6948461.192827.1814076.1361492.23132.3200675.2552048.4491519.0238847.1290844.0536269.4231419.0299841.65291-.2698553 2.6225356-1.4375148 8.986738-2.0315537 11.9240228-.2513602 1.2428753-.7499132 1.5088847-1.2290685 1.5496672-1.0413153.0886298-1.8284257-.4857912-2.8369905-1.0972863-1.5782048-.9568691-2.5327083-1.3984317-4.0646293-2.3321592-1.7703998-1.0790837-.212559-1.583655.7963867-2.5529189.2640459-.2536609 4.7753906-4.3097041 4.755976-4.431706-.0070494-.0442984-.1409018-.481649-.2457499-.5678447-.104848-.0861957-.2595946-.0567202-.3712641-.033278-.1582881.0332286-2.6794907 1.5745492-7.5636077 4.6239616-.715635.4545193-1.3638349.6759763-1.9445998.6643712-.64024672-.0127938-1.87182452-.334829-2.78737602-.6100966-1.12296117-.3376271-1.53748501-.4966332-1.45976769-1.0700283.04048-.2986597.32581586-.610598.8560076-.935815z" fill="#fff"></path></g></svg></a> <h1>Telegram: <a href="<?php echo $tmeroot; ?>/<?php echo $chat->id; ?>/"><?php echo htmlspecialchars($chat->name); ?></a></h1></div></div><div class="tgme_body_wrap"><div class="tgme_page tgme_page_post"><div class="tgme_page_widget_wrap" id="widget"><div class="tgme_page_widget"><?php
 | |
| 	if ( ($replytoid = getreplytoid($message)) && ($replytomessage = array_key_exists( $replytoid, $chat->messages )) ) {
 | |
| 		renderquotemessage( $chat, $chat->messages[$replytoid] );
 | |
| 	}
 | |
| 	rendermessage( $chat, $message );
 | |
| 	if ( array_key_exists( $message->id, $chat->threads ) ) {
 | |
| 	?><div class="tgme_widget_replies"><?php
 | |
| 		recursereplies( $chat, $message );
 | |
| 	?></div><?php
 | |
| 	}
 | |
| ?></div></div></div><div class="tgme_page_widget_actions_wrap" id="widget_actions_wrap"><div class="tgme_page_widget_actions" id="widget_actions"><div class="tgme_page_widget_actions_cont"><div class="tgme_page_widget_action_left" <?php echo (!$previousid ? 'style="visibility: hidden;"' : ''); ?>><div class="tgme_page_embed_btn"><a class="tgme_action_button_new" <?php echo ($previousid ? "href=\"{$tmeroot}/{$chat->id}/{$previousid}/\"" : ''); ?>><span class="tgme_action_button_label">⬅️ Previous</span></a></div></div><div class="tgme_page_widget_action_right" <?php echo (!$nextmessage ? 'style="visibility: hidden;"' : ''); ?>><div class="tgme_page_context_btn"><a class="tgme_action_button_new" <?php echo ($nextmessage ? "href=\"{$tmeroot}/{$chat->id}/{$nextmessage->id}/\"" : ''); ?>><span class="tgme_action_button_label">Next ➡️</span></a></div></div></div></div></div></div></div><script src="<?php echo $cdnroot; ?>/js/tgwallpaper.min.js"></script><script src="<?php echo $extracdnroot; ?>/js/tgme-init.js"></script></body></html><?php
 | |
| 	fclose($STDOUT);
 | |
| 	$previousid = $message->id;
 | |
| }
 |