Compare commits
3 Commits
26b6df77ef
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| ce2860aec9 | |||
| 0aaf285d54 | |||
| ffdd7fc1fc |
@@ -121,7 +121,7 @@ FAQ_ANSWERS = {
|
|||||||
"• ВКонтакте: https://vk.com/ikpro\n"
|
"• ВКонтакте: https://vk.com/ikpro\n"
|
||||||
"• VK Live (трансляции): https://live.vkvideo.ru/ikp\n"
|
"• VK Live (трансляции): https://live.vkvideo.ru/ikp\n"
|
||||||
"• Telegram: https://t.me/ikp_team\n"
|
"• Telegram: https://t.me/ikp_team\n"
|
||||||
"• Discord: https://discord.gg/z92mAw7KEe"
|
"• Lolka: https://vk.com/away.php?to=https%3A%2F%2Flolka.gg%2FlNfM3F9DD&utf=1"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+18
-3
@@ -66,17 +66,32 @@ class DatabaseManager:
|
|||||||
"1": {
|
"1": {
|
||||||
"name": "Counter-Strike 2 🔫",
|
"name": "Counter-Strike 2 🔫",
|
||||||
"price": "от 870 ₽ / занятие",
|
"price": "от 870 ₽ / занятие",
|
||||||
"description": "Тренировки по CS2: aim, раскидки гранат, командная тактика. Разовое занятие 870 ₽, абонементы от 2 790 ₽."
|
"description": "CS2: aim, раскидки, тактика. Разовое 870 ₽, абонементы от 2 790 ₽."
|
||||||
},
|
},
|
||||||
"2": {
|
"2": {
|
||||||
"name": "Dota 2 🎮",
|
"name": "Dota 2 🎮",
|
||||||
"price": "от 870 ₽ / занятие",
|
"price": "от 870 ₽ / занятие",
|
||||||
"description": "Тренировки по Dota 2: разбор реплеев, позиционка, фарм и тимплей. Разовое занятие 870 ₽, абонементы от 2 790 ₽."
|
"description": "Dota 2: реплеи, позиционка, фарм, тимплей. Разовое 870 ₽, абонементы от 2 790 ₽."
|
||||||
},
|
},
|
||||||
"3": {
|
"3": {
|
||||||
"name": "World of Tanks 🛡️",
|
"name": "World of Tanks 🛡️",
|
||||||
"price": "от 870 ₽ / занятие",
|
"price": "от 870 ₽ / занятие",
|
||||||
"description": "Тренировки по World of Tanks: позиционирование, сведение, тактика боёв. Разовое занятие 870 ₽, абонементы от 2 790 ₽."
|
"description": "WoT: позиционирование, сведение, тактика. Разовое 870 ₽, абонементы от 2 790 ₽."
|
||||||
|
},
|
||||||
|
"4": {
|
||||||
|
"name": "Counter-Strike 2 🔫 (групповой)",
|
||||||
|
"price": "от 870 ₽",
|
||||||
|
"description": "Тренировки в группе, командное взаимодействие."
|
||||||
|
},
|
||||||
|
"5": {
|
||||||
|
"name": "Dota 2 🎮 (групповой)",
|
||||||
|
"price": "от 870 ₽",
|
||||||
|
"description": "Тренировки в группе, командное взаимодействие."
|
||||||
|
},
|
||||||
|
"6": {
|
||||||
|
"name": "World of Tanks 🛡️ (групповой)",
|
||||||
|
"price": "от 870 ₽",
|
||||||
|
"description": "Тренировки в группе, командное взаимодействие."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for key, svc in default_services.items():
|
for key, svc in default_services.items():
|
||||||
|
|||||||
+1
-1
@@ -148,7 +148,7 @@ def get_socials_keyboard() -> str:
|
|||||||
keyboard.add_openlink_button("VK Live 📺", "https://live.vkvideo.ru/ikp")
|
keyboard.add_openlink_button("VK Live 📺", "https://live.vkvideo.ru/ikp")
|
||||||
keyboard.add_line()
|
keyboard.add_line()
|
||||||
keyboard.add_openlink_button("Telegram ✈️", "https://t.me/ikp_team")
|
keyboard.add_openlink_button("Telegram ✈️", "https://t.me/ikp_team")
|
||||||
keyboard.add_openlink_button("Discord 🎧", "https://discord.gg/z92mAw7KEe")
|
keyboard.add_openlink_button("Lolka 🎮", "https://vk.com/away.php?to=https%3A%2F%2Flolka.gg%2FlNfM3F9DD&utf=1")
|
||||||
keyboard.add_line()
|
keyboard.add_line()
|
||||||
keyboard.add_openlink_button("ВКонтакте 🌐", "https://vk.com/ikpro")
|
keyboard.add_openlink_button("ВКонтакте 🌐", "https://vk.com/ikpro")
|
||||||
keyboard.add_line()
|
keyboard.add_line()
|
||||||
|
|||||||
+33
-4
@@ -3,10 +3,39 @@ chcp 65001 >nul
|
|||||||
cd /d "%~dp0"
|
cd /d "%~dp0"
|
||||||
title Бот ИКП (VK)
|
title Бот ИКП (VK)
|
||||||
|
|
||||||
REM Защита от нескольких экземпляров. ОБЯЗАТЕЛЬНО глушим старые процессы бота
|
REM === Подготовка окружения при первом запуске ===
|
||||||
REM перед стартом: иначе два longpoll-инстанса (старый и новый) отвечают на одни
|
|
||||||
REM и те же нажатия, и цвета кнопок «пляшут» (старая палитра vs новая).
|
REM 1) Проверяем, что Python доступен
|
||||||
REM Внутри бота дополнительно есть lock-файл (bot.lock) — подстраховка от дублей.
|
where python >nul 2>&1
|
||||||
|
if errorlevel 1 (
|
||||||
|
echo [ОШИБКА] Python не найден в PATH. Установите Python 3 и запустите снова.
|
||||||
|
pause
|
||||||
|
exit /b
|
||||||
|
)
|
||||||
|
|
||||||
|
REM 2) Нет .env — создаём из шаблона и открываем на заполнение
|
||||||
|
if not exist ".env" (
|
||||||
|
if exist ".env.example" (
|
||||||
|
copy /Y ".env.example" ".env" >nul
|
||||||
|
echo.
|
||||||
|
echo Создан файл .env из шаблона. Впишите VK_TOKEN, VK_GROUP_ID, ADMIN_IDS и др.,
|
||||||
|
echo сохраните файл и запустите бота снова.
|
||||||
|
notepad ".env"
|
||||||
|
pause
|
||||||
|
exit /b
|
||||||
|
) else (
|
||||||
|
echo [ОШИБКА] Нет ни .env, ни .env.example. Настройте конфигурацию вручную.
|
||||||
|
pause
|
||||||
|
exit /b
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
REM 3) Устанавливаем зависимости (если уже стоят — отработает быстро)
|
||||||
|
echo Проверка зависимостей...
|
||||||
|
python -m pip install -r requirements.txt >nul 2>&1
|
||||||
|
|
||||||
|
REM 4) Защита от нескольких экземпляров: глушим старые процессы бота перед стартом
|
||||||
|
REM (иначе два longpoll-инстанса отвечают на одни нажатия). В боте ещё есть bot.lock.
|
||||||
powershell -NoProfile -Command "Get-CimInstance Win32_Process | Where-Object { $_.Name -eq 'python.exe' -and $_.CommandLine -like '*bot.py*' } | ForEach-Object { Stop-Process -Id $_.ProcessId -Force }" >nul 2>&1
|
powershell -NoProfile -Command "Get-CimInstance Win32_Process | Where-Object { $_.Name -eq 'python.exe' -and $_.CommandLine -like '*bot.py*' } | ForEach-Object { Stop-Process -Id $_.ProcessId -Force }" >nul 2>&1
|
||||||
|
|
||||||
:loop
|
:loop
|
||||||
|
|||||||
Reference in New Issue
Block a user