W1xced commited on
Commit
4a8701f
·
verified ·
1 Parent(s): 726df17

Upload 4 files

Browse files
Files changed (4) hide show
  1. Dockerfile +16 -0
  2. config.py +11 -0
  3. main.py +120 -0
  4. snippets.yaml +104 -0
Dockerfile ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM python:3.14-alpine
2
+
3
+ COPY requirements.txt requirements.txt
4
+ RUN pip install --no-cache-dir -r requirements.txt
5
+
6
+ WORKDIR /app
7
+ ENV DOCKER_ENV=true
8
+
9
+ RUN adduser -D botuser
10
+ COPY . /app
11
+ RUN chown -R botuser:botuser /app
12
+ USER botuser
13
+
14
+ EXPOSE 7860
15
+
16
+ CMD ["python", "main.py"]
config.py ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ from dotenv import load_dotenv
3
+
4
+ load_dotenv()
5
+
6
+ BOT_TOKEN = os.getenv("BOT_TOKEN")
7
+
8
+ if not BOT_TOKEN:
9
+ raise ValueError(
10
+ "One or more environment variables are not set. " "Please check your .env file."
11
+ )
main.py ADDED
@@ -0,0 +1,120 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # CollapseBot - Telegram Inline Bot
2
+ # Author: dest4590, w1xced
3
+ # Version: 1.1
4
+ # Description: Telegram Inline Bot for snippets
5
+
6
+ import asyncio
7
+ import logging
8
+ import yaml
9
+ import os
10
+ import subprocess
11
+ from aiogram import Bot, Dispatcher, types, F
12
+ from aiogram.types import InlineQueryResultArticle, InputTextMessageContent
13
+ from aiogram.filters import CommandStart
14
+ from config import BOT_TOKEN
15
+ from aiohttp import web
16
+
17
+ logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
18
+ logger = logging.getLogger(__name__)
19
+
20
+ async def health_check(request):
21
+ return web.Response(text="Bot is running!")
22
+
23
+ def load_snippets():
24
+ if not os.path.exists("snippets.yaml"):
25
+ logger.error("snippets.yaml not found!")
26
+ return {}
27
+ with open("snippets.yaml", "r", encoding="utf-8") as f:
28
+ try:
29
+ return yaml.safe_load(f) or {}
30
+ except yaml.YAMLError as e:
31
+ logger.error(f"Error parsing snippets.yaml: {e}")
32
+ return {}
33
+
34
+ snippets = load_snippets()
35
+
36
+ bot = Bot(token=BOT_TOKEN)
37
+ dp = Dispatcher()
38
+
39
+ @dp.message(CommandStart())
40
+ async def cmd_start(message: types.Message):
41
+ bot_info = await bot.get_me()
42
+ await message.answer(
43
+ f"Hello! I am an inline bot. Type @{bot_info.username} in any chat to see my snippets."
44
+ )
45
+
46
+ import re
47
+ import html
48
+
49
+ def safe_format(text):
50
+ text = html.escape(text)
51
+ text = re.sub(r'\*\*(.*?)\*\*', r'<b>\1</b>', text)
52
+ text = re.sub(r'\*(.*?)\*', r'<i>\1</i>', text)
53
+ return text
54
+
55
+ @dp.inline_query()
56
+ async def inline_query_handler(query: types.InlineQuery):
57
+ query_text = query.query.lower().strip()
58
+ results = []
59
+
60
+ for key, data in snippets.items():
61
+ title = data.get("title", key)
62
+ content = data.get("content", "")
63
+
64
+ if (
65
+ not query_text
66
+ or query_text in key.lower()
67
+ or query_text in title.lower()
68
+ or query_text in content.lower()
69
+ ):
70
+ description = content.split("\n")[0] if content else "No content"
71
+ if len(description) > 50:
72
+ description = description[:47] + "..."
73
+
74
+ formatted_content = safe_format(content)
75
+
76
+ results.append(
77
+ InlineQueryResultArticle(
78
+ id=key,
79
+ title=title,
80
+ description=description,
81
+ input_message_content=InputTextMessageContent(
82
+ message_text=formatted_content, parse_mode="HTML"
83
+ ),
84
+ )
85
+ )
86
+
87
+ await query.answer(results[:50], cache_time=1)
88
+
89
+ async def main():
90
+ bot_info = await bot.get_me()
91
+ logger.info(f"Starting bot @{bot_info.username}")
92
+
93
+ app = web.Application()
94
+ app.router.add_get("/", health_check)
95
+ runner = web.AppRunner(app)
96
+ await runner.setup()
97
+ site = web.TCPSite(runner, "0.0.0.0", 7860)
98
+ await site.start()
99
+
100
+ await dp.start_polling(bot)
101
+
102
+ if __name__ == "__main__":
103
+ import sys
104
+
105
+ if "--worker" in sys.argv or os.name != 'nt' or os.environ.get("DOCKER_ENV"):
106
+ try:
107
+ if os.name == 'nt':
108
+ os.system(f"title CollapseBot Logs")
109
+
110
+ asyncio.run(main())
111
+ except (KeyboardInterrupt, SystemExit):
112
+ logger.info("Bot stopped!")
113
+ else:
114
+ try:
115
+ subprocess.Popen(
116
+ [sys.executable, "manager.py"],
117
+ creationflags=subprocess.CREATE_NEW_CONSOLE
118
+ )
119
+ except Exception as e:
120
+ asyncio.run(main())
snippets.yaml ADDED
@@ -0,0 +1,104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ data-clear:
2
+ title: '🗂️ Очистка данных CollapseLoader'
3
+ content: |
4
+ **Шаги для очистки данных CollapseLoader:**
5
+
6
+ 1. **Закройте лоадер полностью**
7
+ 2. **Перейдите в папку:**
8
+ - Windows: `%appdata%\CollapseLoader\`
9
+
10
+ 3. **Удалите все файлы**
11
+
12
+ 4. **Перезапустите лоадер**
13
+
14
+ ⚠️ **Внимание:** Это удалит конфиги всех клиентов, и настройки лоадера.
15
+
16
+ crash-logs:
17
+ title: '📋 Как получить логи клиента'
18
+ content: |
19
+ 1. **Нажмите правой кнопкой мыши на клиент**
20
+ - Нажмите "Копировать логи"
21
+
22
+ installation:
23
+ title: '📥 Установка CollapseLoader'
24
+ content: |
25
+ **Пошаговая установка:**
26
+
27
+ 1. **Скачайте лоадер:**
28
+ - Официальный сайт: https://collapseloader.org
29
+
30
+ 2. **Первый запуск:**
31
+ - Лоадер выполнит первоначальную настройку
32
+
33
+ 3. **Готово!**
34
+ - Можете начинать использовать лоадер
35
+
36
+ 💡 **Совет:** Добавьте лоадер в исключения антивируса.
37
+
38
+ social-link:
39
+ title: ' 💬 Наши соцсети'
40
+ content: |
41
+ **Наши соцсети:**
42
+
43
+ - Telegram: https://t.me/collapseloader
44
+ - Telegram DevLogs: https://t.me/collapseloader_devlogs
45
+ - Discord: https://collapseloader.org/discord
46
+
47
+ technical-support:
48
+ title: '🔧 Техническая поддержка'
49
+ content: |
50
+ **Перед обращением в поддержку:**
51
+
52
+ **📋 Подготовьте информацию:**
53
+ - Версия CollapseLoader
54
+ - Логи ошибок
55
+
56
+ **🔍 Попробуйте сначала:**
57
+ 1. Перезапустить лоадер
58
+ 2. Очистить данные
59
+ 3. Проверить, не удалил ли антивирус файлы клиента
60
+
61
+ **💬 Где получить помощь:**
62
+ - <#1231330786481930347> - создание тикетов
63
+ - Поиск по серверу (частые вопросы)
64
+
65
+ **⚡ Быстрая помощь:**
66
+ - Приложите скриншоты
67
+ - Укажите что уже пробовали
68
+
69
+ clear-loader-files:
70
+ title: ' 🧹 Очистка файлов лоадера'
71
+ content: |
72
+ **Как очистить файлы лоадера:**
73
+
74
+ 1. Зайдите в настройки лоадера
75
+ 2. Нажмите на кнопку "Сбросить файлы лоадера"
76
+ 3. После сообщения об успешной очистке, попробуйте снова запустить клиент
77
+
78
+ not-loading:
79
+ title: '❗ Лоадер/Клиенты не загружается'
80
+ content: |
81
+ **Если лоадер не запускается (зависает в экране загрузки, пишет что сервера офлайн)**
82
+ 1. Попробуйте включить DPI Bypass в настройках лоадера, после этого перезапустите лоадер **от администратора**
83
+ 2. Проверьте, не блокирует ли ваш провайдер доступ к серверам лоадера: https://auth.collapseloader.org и https://cdn.collapseloader.org
84
+ 3. Попробуйте подключиться через VPN
85
+
86
+ client-download-stuck:
87
+ title: '⏳ Загрузка клиента зависла'
88
+ content: |
89
+ **Если загрузка клиента зависла на 0 процентов:**
90
+
91
+ 1. Откройте настройки лоадера
92
+ 2. Включите опцию DPI Bypass
93
+ 3. Перезапустите лоадер от имени администратора
94
+ 4. Попробуйте снова скачать клиент
95
+
96
+ Ti-ceryezno?:
97
+ title: ' 😭 Если пишет "Ти серьезно?" при попытке зайти в лоадер'
98
+ content: |
99
+ Если пишет "Ти серьезно?" при попытке зайти в лоадер
100
+
101
+ **Советую вот что сделать:**
102
+ 1. Закрой лоадер
103
+ 2. Удали лоадер
104
+ 3. Проверь сколько у тебя айкю