Skip to content

Commit 4dcf52f

Browse files
committed
Initial commit
1 parent 1755756 commit 4dcf52f

File tree

3 files changed

+203
-2
lines changed

3 files changed

+203
-2
lines changed

README.md

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,32 @@
1-
# welcome-bot-deployer
2-
WelcomeBotDeployer - скрипт по быстрому развороту ботов-приветствий в Telegram
1+
2+
# WelcomeBotDeployer
3+
4+
<img src="wallpaper.jpg" style="width: 100%; height: 150px; object-fit: cover;">
5+
6+
Этот скрипт предназначен для автоматического развертывания и настройки Telegram-ботов, который приветствует новых пользователей. С помощью этого скрипта вы сможете легко и быстро настроить бота-приветствие без лишних усилий.
7+
8+
### Основные функции
9+
10+
- **Автоматическая настройка**: Скрипт автоматически создает необходимые файлы и конфигурации для работы бота.
11+
- **Отправка сообщений**: Бот отправляет приветственные сообщения новым пользователям в чате.
12+
- **Легкая интеграция**: Просто настройте ваш токен, и бот готов к работе.
13+
14+
### Системные требования
15+
16+
Любой веб-хостинг/веб-сервер с поддержкой PHP 7.4+
17+
18+
### Установка
19+
20+
1. Скачиваем файл `index.php` и кладем на веб-сервер с установленным PHP 7.4+ с незаметным названием _(Например: `domain.com/b/`)_
21+
22+
2. Заходим в редактор кода и меняем `admin@123` на другой пароль
23+
24+
3. Заходим на скрипт с браузера и начинаем настройку ботов по инструкции
25+
26+
### Поддержка
27+
28+
Если у вас возникли вопросы или проблемы, не стесняйтесь <a href="https://t.me/ontech_support">связываться с нами в Telegram</a>. Всегда будем рады помочь! :)
29+
30+
---
31+
32+
Сделано с ❤️ командой <ON TECH>

index.php

Lines changed: 171 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,171 @@
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>

wallpaper.jpg

228 KB
Loading

0 commit comments

Comments
 (0)