Сам бот и все необходимые конфиги
This commit is contained in:
5
pyvenv.cfg
Normal file
5
pyvenv.cfg
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
home = /usr/bin
|
||||||
|
include-system-site-packages = false
|
||||||
|
version = 3.12.3
|
||||||
|
executable = /usr/bin/python3.12
|
||||||
|
command = /usr/bin/python3 -m venv /home/domi/vhbot
|
||||||
2
requirements.txt
Normal file
2
requirements.txt
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
telegram
|
||||||
|
paramiko
|
||||||
102
vhbot.py
Normal file
102
vhbot.py
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
import logging
|
||||||
|
from telegram import Update
|
||||||
|
from telegram.ext import Application, CommandHandler, ContextTypes
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
# Путь к vhserver
|
||||||
|
VHSERVER_PATH = '/home/domi/linuxgsm'
|
||||||
|
|
||||||
|
# Настройка логирования
|
||||||
|
logging.basicConfig(
|
||||||
|
level=logging.INFO,
|
||||||
|
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
|
||||||
|
)
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
# Глобальный список для хранения ID всех сообщений бота
|
||||||
|
bot_message_ids = []
|
||||||
|
|
||||||
|
# Команда для управления сервером
|
||||||
|
def run_local_command(command):
|
||||||
|
try:
|
||||||
|
result = subprocess.run(command, shell=True, check=True, capture_output=True, text=True)
|
||||||
|
output = result.stdout
|
||||||
|
error = result.stderr
|
||||||
|
return output, error
|
||||||
|
except subprocess.CalledProcessError as e:
|
||||||
|
return None, str(e)
|
||||||
|
|
||||||
|
# Функция для удаления всех предыдущих сообщений бота
|
||||||
|
async def delete_previous_messages(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||||||
|
global bot_message_ids
|
||||||
|
for message_id in bot_message_ids:
|
||||||
|
try:
|
||||||
|
await context.bot.delete_message(chat_id=update.effective_chat.id, message_id=message_id)
|
||||||
|
except Exception as e:
|
||||||
|
logger.warning(f"Не удалось удалить сообщение {message_id}: {e}")
|
||||||
|
# Очищаем список сообщений
|
||||||
|
bot_message_ids = []
|
||||||
|
|
||||||
|
# Команда для запуска сервера
|
||||||
|
async def start_server(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||||||
|
logger.info("Получена команда /start_server")
|
||||||
|
await delete_previous_messages(update, context) # Удаляем все предыдущие сообщения
|
||||||
|
output, error = run_local_command(f'cd {VHSERVER_PATH} && ./vhserver start')
|
||||||
|
if error:
|
||||||
|
message = await update.message.reply_text(f'Ошибка: {error}')
|
||||||
|
else:
|
||||||
|
message = await update.message.reply_text('Сервер запущен.')
|
||||||
|
# Добавляем ID нового сообщения в список
|
||||||
|
bot_message_ids.append(message.message_id)
|
||||||
|
|
||||||
|
# Команда для остановки сервера
|
||||||
|
async def stop_server(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||||||
|
logger.info("Получена команда /stop_server")
|
||||||
|
await delete_previous_messages(update, context) # Удаляем все предыдущие сообщения
|
||||||
|
output, error = run_local_command(f'cd {VHSERVER_PATH} && ./vhserver stop')
|
||||||
|
if error:
|
||||||
|
message = await update.message.reply_text(f'Ошибка: {error}')
|
||||||
|
else:
|
||||||
|
message = await update.message.reply_text('Сервер остановлен.')
|
||||||
|
# Добавляем ID нового сообщения в список
|
||||||
|
bot_message_ids.append(message.message_id)
|
||||||
|
|
||||||
|
# Команда для проверки статуса сервера
|
||||||
|
async def status_server(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||||||
|
logger.info("Получена команда /status_server")
|
||||||
|
await delete_previous_messages(update, context) # Удаляем все предыдущие сообщения
|
||||||
|
output, error = run_local_command(f'cd {VHSERVER_PATH} && ./vhserver details')
|
||||||
|
if error:
|
||||||
|
message = await update.message.reply_text(f'Ошибка: {error}')
|
||||||
|
else:
|
||||||
|
message = await update.message.reply_text(f'Статус сервера: {output}')
|
||||||
|
# Добавляем ID нового сообщения в список
|
||||||
|
bot_message_ids.append(message.message_id)
|
||||||
|
|
||||||
|
# Команда для обновления сервера
|
||||||
|
async def update_server(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||||||
|
logger.info("Получена команда /update_server")
|
||||||
|
await delete_previous_messages(update, context) # Удаляем все предыдущие сообщения
|
||||||
|
output, error = run_local_command(f'cd {VHSERVER_PATH} && ./vhserver update')
|
||||||
|
if error:
|
||||||
|
message = await update.message.reply_text(f'Ошибка: {error}')
|
||||||
|
else:
|
||||||
|
message = await update.message.reply_text('Сервер обновлен.')
|
||||||
|
# Добавляем ID нового сообщения в список
|
||||||
|
bot_message_ids.append(message.message_id)
|
||||||
|
|
||||||
|
# Основная функция
|
||||||
|
def main():
|
||||||
|
application = Application.builder().token("6517664407:AAE9Tt-sjnU20MdrGUhdIyY-R6LU8eNznFs").build()
|
||||||
|
|
||||||
|
# Регистрация команд
|
||||||
|
application.add_handler(CommandHandler("start_server", start_server))
|
||||||
|
application.add_handler(CommandHandler("stop_server", stop_server))
|
||||||
|
application.add_handler(CommandHandler("status_server", status_server))
|
||||||
|
application.add_handler(CommandHandler("update_server", update_server)) # Добавляем новую команду
|
||||||
|
|
||||||
|
# Запуск бота
|
||||||
|
application.run_polling()
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
Reference in New Issue
Block a user