1+ <?php
2+
3+ define ('LOGIN_PASSWORD ' , "admin@123 " );
4+
5+ if (!file_exists ("source.php " )){
6+ file_put_contents ("source.php " , (base64_decode ("PD9waHAKCmZ1bmN0aW9uIHJlYWRDb25maWcoJGZvbGRlck5hbWUpIHsKICAgICRjb25maWdGaWxlID0gIiRmb2xkZXJOYW1lL2NvbmZpZy5qc29uIjsKICAgIGlmIChmaWxlX2V4aXN0cygkY29uZmlnRmlsZSkpIHsKICAgICAgICAkY29uZmlnSnNvbiA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRjb25maWdGaWxlKTsKICAgICAgICByZXR1cm4ganNvbl9kZWNvZGUoJGNvbmZpZ0pzb24sIHRydWUpOwogICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9Cn0KCmZ1bmN0aW9uIHNlbmRNZXNzYWdlKCR0b2tlbiwgJGNoYXRJZCwgJG1lc3NhZ2UpIHsKICAgICR1cmwgPSAiaHR0cHM6Ly9hcGkudGVsZWdyYW0ub3JnL2JvdCR0b2tlbi9zZW5kTWVzc2FnZSI7CiAgICAkZGF0YSA9IGFycmF5KAogICAgICAgICdjaGF0X2lkJyA9PiAkY2hhdElkLAogICAgICAgICd0ZXh0JyA9PiAkbWVzc2FnZSwKICAgICAgICAncGFyc2VfbW9kZScgPT4gJ0hUTUwnCiAgICApOwoKICAgICRvcHRpb25zID0gYXJyYXkoCiAgICAgICAgJ2h0dHAnID0+IGFycmF5KAogICAgICAgICAgICAnbWV0aG9kJyAgPT4gJ1BPU1QnLAogICAgICAgICAgICAnaGVhZGVyJyAgPT4gJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJywKICAgICAgICAgICAgJ2NvbnRlbnQnID0+IGh0dHBfYnVpbGRfcXVlcnkoJGRhdGEpCiAgICAgICAgKQogICAgKTsKCiAgICAkY29udGV4dCAgPSBzdHJlYW1fY29udGV4dF9jcmVhdGUoJG9wdGlvbnMpOwogICAgJHJlc3VsdCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCR1cmwsIGZhbHNlLCAkY29udGV4dCk7CgogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCmZ1bmN0aW9uIHNldFdlYmhvb2soJHRva2VuLCAkd2ViaG9va1VybCkgewogICAgJHVybCA9ICJodHRwczovL2FwaS50ZWxlZ3JhbS5vcmcvYm90JHRva2VuL3NldFdlYmhvb2s/dXJsPSR3ZWJob29rVXJsIjsKICAgICRyZXN1bHQgPSBmaWxlX2dldF9jb250ZW50cygkdXJsKTsKICAgIHJldHVybiAkcmVzdWx0Owp9CgppZiAoaXNzZXQoJF9HRVRbJ2NvbmZpZyddKSkgewoKICAgICRmb2xkZXJOYW1lID0gZGlybmFtZSgkX1NFUlZFUlsnU0NSSVBUX0ZJTEVOQU1FJ10pOyAKICAgICRjb25maWcgPSByZWFkQ29uZmlnKCRmb2xkZXJOYW1lKTsKICAgIGlmICgkY29uZmlnKSB7CiAgICAgICAgJHRva2VuID0gJGNvbmZpZ1sndG9rZW4nXTsKICAgICAgICAkd2ViaG9va1VybCA9ICdodHRwczovLycgLiAkX1NFUlZFUlsnSFRUUF9IT1NUJ10gLiAkX1NFUlZFUlsnUkVRVUVTVF9VUkknXTsgCiAgICAgICAgJHJlc3BvbnNlID0gc2V0V2ViaG9vaygkdG9rZW4sICR3ZWJob29rVXJsKTsKICAgICAgICBlY2hvICLQkdC+0YIg0YPRgdC/0LXRiNC90L4g0LDQutGC0LjQstC40YDQvtCy0LDQvSEgPGEgaHJlZj0nLi4vJz4mbGFycjsg0J3QsNC30LDQtDwvYT4gPGhyPiAkcmVzcG9uc2VcbiI7CiAgICB9IGVsc2UgewogICAgICAgIGVjaG8gItCa0L7QvdGE0LjQsyDQvdC1INC90LDQudC00LXQvS5cbiI7CiAgICB9Cn0gCmlmIChpc3NldCgkX0dFVFsnYm90J10pKSB7CgogICAgJGZvbGRlck5hbWUgPSBkaXJuYW1lKCRfU0VSVkVSWydTQ1JJUFRfRklMRU5BTUUnXSk7IAogICAgJGNvbmZpZyA9IHJlYWRDb25maWcoJGZvbGRlck5hbWUpOwogICAgaWYgKCRjb25maWcpIHsKICAgICAgICAkdG9rZW4gPSAkY29uZmlnWyd0b2tlbiddOwogICAgICAgICRtZXNzYWdlID0gJGNvbmZpZ1snbWVzc2FnZSddOwogICAgICAgICR1cGRhdGUgPSBqc29uX2RlY29kZShmaWxlX2dldF9jb250ZW50cygncGhwOi8vaW5wdXQnKSwgdHJ1ZSk7CiAgICAgICAgJGNoYXRJZCA9ICR1cGRhdGVbJ21lc3NhZ2UnXVsnY2hhdCddWydpZCddOwogICAgICAgIHNlbmRNZXNzYWdlKCR0b2tlbiwgJGNoYXRJZCwgJG1lc3NhZ2UpOwogICAgfSBlbHNlIHsKICAgICAgICBlY2hvICJDb25maWcgZmlsZSBub3QgZm91bmQuXG4iOwogICAgfQp9Cj8+ " )));
7+ }
8+
9+ function createFolder () {
10+ $ timestamp = time ();
11+ $ md5 = substr (md5 ($ timestamp ), 0 , 6 );
12+ $ folderName = "./ $ md5 " ;
13+
14+ if (!file_exists ($ folderName )) {
15+ mkdir ($ folderName );
16+ return $ folderName ;
17+ } else {
18+ return false ;
19+ }
20+ }
21+
22+ function createConfig ($ folderName , $ message , $ token ) {
23+ $ configData = array (
24+ 'message ' => $ message ,
25+ 'token ' => $ token
26+ );
27+
28+ $ configJson = json_encode ($ configData , JSON_PRETTY_PRINT );
29+
30+ file_put_contents ("$ folderName/config.json " , $ configJson );
31+ }
32+
33+ function copySourceFile ($ folderName ) {
34+ copy ('source.php ' , "$ folderName/index.php " );
35+ }
36+
37+ function scanFolders ($ directory ) {
38+ $ folders = array ();
39+ $ files = scandir ($ directory );
40+ foreach ($ files as $ file ) {
41+ $ filePath = $ directory . '/ ' . $ file ;
42+ if (is_dir ($ filePath ) && $ file != '. ' && $ file != '.. ' ) {
43+ $ folders [] = $ file ;
44+ }
45+ }
46+ return $ folders ;
47+ }
48+
49+ function parseJson ($ folderName ) {
50+ $ configFile = "$ folderName/config.json " ;
51+ if (file_exists ($ configFile )) {
52+ $ configJson = file_get_contents ($ configFile );
53+ return json_decode ($ configJson , true );
54+ } else {
55+ return false ;
56+ }
57+ }
58+
59+ function deleteBot ($ folderName ) {
60+ $ configFile = "$ folderName/config.json " ;
61+ if (file_exists ($ configFile )) {
62+ unlink ($ configFile );
63+ }
64+
65+ $ files = glob ("$ folderName/* " );
66+ foreach ($ files as $ file ) {
67+ if (is_file ($ file )) {
68+ unlink ($ file );
69+ }
70+ }
71+
72+ rmdir ($ folderName );
73+ }
74+
75+ if ($ _SERVER ["REQUEST_METHOD " ] == "POST " ) {
76+ $ action = $ _POST ['action ' ] ?? '' ;
77+
78+ if ($ action === 'deploy ' ) {
79+
80+ if ($ _POST ['pw ' ] != LOGIN_PASSWORD ){
81+ die ('Неверный пароль! ' );
82+ }
83+
84+ $ message = str_ireplace (PHP_EOL , "<br> " , $ _POST ['message ' ]) ?? '' ;
85+ $ token = $ _POST ['token ' ] ?? '' ;
86+
87+ $ folderName = createFolder ();
88+ if ($ folderName ) {
89+ createConfig ($ folderName , $ message , $ token );
90+ copySourceFile ($ folderName );
91+ $ message = "Бот успешно развёрнут. Нажми ОК чтобы активировать. " ;
92+ echo "<script>window.location.href = './ $ folderName/?config=1';</script> " ;
93+ } else {
94+ $ message = "Ошибка: Folder with the same name already exists. " ;
95+ }
96+ } elseif ($ action === 'delete ' ) {
97+
98+ $ botToDelete = $ _POST ['botToDelete ' ] ?? '' ;
99+ if ($ botToDelete ) {
100+ deleteBot ($ botToDelete );
101+ $ message = "Бот ' $ botToDelete' удалён. " ;
102+ } else {
103+ $ message = "Бот не найден. " ;
104+ }
105+ }
106+ }
107+
108+ ?>
109+
110+ <!DOCTYPE html>
111+ <html lang="en">
112+ <head>
113+ <meta charset="UTF-8">
114+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
115+ <title>Telegram Bot Management</title>
116+ <link href="data:image/x-icon;base64,AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAA////ANnPxQAA6x8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIiIiIiIiIiIiAAAAAAAAIiARERERERECIBEREREREQIgERERERERAiAAAAAAAAACIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIgAAIiIiAAAiARAiIiIBECIDMCIiIgMwIgMwIiIiAzAiAAAiIiIAACIiIiIiIiIiIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" rel="icon" type="image/x-icon">
117+ <style>
118+ .bots{
119+ display: flex;
120+ max-width: 100%;
121+ flex-direction: row;
122+ flex-wrap: wrap;
123+ justify-content: flex-start;
124+ }
125+ .bot {
126+ background: aliceblue;
127+ width: 440px;
128+ box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);
129+ border: 1px solid;
130+ padding: 5px;
131+ margin: 3px;
132+ }
133+ </style>
134+ </head>
135+ <body>
136+ <h1>Дашборд ботов</h1>
137+ <hr>
138+ <h2>Развернуть нового бота</h2>
139+ <form method="POST">
140+ <input type="hidden" name="action" value="deploy">
141+ <label for="token">Токен бота:</label><br>
142+ <input type="text" id="token" style="width:400px" placeholder="1234567890:ABCdef123XXXXXXX" name="token"><br><br>
143+ <label for="message">Сообщение в HTML (<a href="https://t.me/HTMLconverter_bot" target="_blank">сконвертировать сообщение в Telegram на HTML можно тут</a>):</label><br>
144+ <textarea type="text" id="message" name="message" style="width:80%; height:300px"></textarea><br><br>
145+ <input type="password" id="pw" style="width:400px" placeholder="Пароль" name="pw"><br>
146+ <input type="submit" value="Развернуть!">
147+ </form>
148+
149+ <hr>
150+ <h2>Развернутые боты</h2>
151+ <?php
152+ $ botsDirectory = './ ' ;
153+ $ deployedBots = scanFolders ($ botsDirectory );
154+
155+ if (!empty ($ deployedBots )) {
156+ echo "<div class='bots'> " ;
157+ foreach ($ deployedBots as $ bot ) {
158+ $ tmp = json_decode (file_get_contents ($ bot . "/config.json " ),1 );
159+ echo "<div class='bot'><h3> $ bot</h3><p><b>Токен:</b> $ {tmp['token ' ]}</p><p><b>Сообщение:</b><br><div style='background: white'> $ {tmp['message ' ]}</div></p><form method='POST'><input type='hidden' name='action' value='delete'><input type='hidden' name='botToDelete' value=' $ bot'><input type='submit' value='Удалить'></form></div> " ;
160+ }
161+ echo "</div> " ;
162+ } else {
163+ echo "<p>Ботов нет.</p> " ;
164+ }
165+ ?>
166+
167+ <?php if (isset ($ message )): ?>
168+ <script>alert(`<?php echo $ message ; ?> `);</script>
169+ <?php endif ; ?>
170+ </body>
171+ </html>
0 commit comments