Третий стрим
This commit is contained in:
@ -2,47 +2,42 @@ import subprocess
|
||||
|
||||
from aiogram.types import Message, CallbackQuery
|
||||
|
||||
from app import views
|
||||
from app.callbacks.callback_docker import ContainerCallback, ActionCallback
|
||||
from app.keyboards.docker_keyboards import container_names_keyboard, container_actions_keyboard
|
||||
from app.utils.text_splitter import split_text
|
||||
|
||||
|
||||
async def get_containers(message: Message):
|
||||
sub = subprocess.check_output("docker ps -a").decode()
|
||||
sub = subprocess.check_output("docker ps -a", shell=True).decode()
|
||||
messages = split_text(sub)
|
||||
|
||||
for m in messages:
|
||||
await message.answer(
|
||||
text=f"<pre><code>{m}</code></pre>",
|
||||
parse_mode="HTML",
|
||||
)
|
||||
|
||||
keyboard = container_names_keyboard(sub)
|
||||
await message.answer(
|
||||
text=f"<pre><code>{sub}</code></pre>",
|
||||
parse_mode="HTML",
|
||||
reply_markup=keyboard.as_markup()
|
||||
)
|
||||
await message.answer(text="Выберите контейнер:", reply_markup=keyboard.as_markup())
|
||||
|
||||
|
||||
async def container_actions(call: CallbackQuery):
|
||||
name = call.data.split("_")[-1]
|
||||
async def container_actions(callback: CallbackQuery, callback_data: ContainerCallback):
|
||||
name = callback_data.name
|
||||
keyboard = container_actions_keyboard(name)
|
||||
await call.message.answer(
|
||||
await callback.message.answer(
|
||||
text=f"Выберите действие для контейнера {name}",
|
||||
parse_mode="HTML",
|
||||
reply_markup=keyboard.as_markup()
|
||||
)
|
||||
|
||||
|
||||
async def do_container_action(call: CallbackQuery):
|
||||
_, action, name = call.data.split("_")
|
||||
match action:
|
||||
case "start":
|
||||
subprocess.run(f"docker start {name}")
|
||||
message = f"Контейнер {name} успешно запущен"
|
||||
case "stop":
|
||||
subprocess.run(f"docker stop {name}")
|
||||
message = f"Контейнер {name} успешно остановлен"
|
||||
case "restart":
|
||||
subprocess.run(f"docker restart {name}")
|
||||
message = f"Контейнер {name} успешно перезапущен"
|
||||
case "delete":
|
||||
subprocess.run(f"docker rm -f {name}")
|
||||
message = f"Контейнер {name} успешно удалён"
|
||||
case _:
|
||||
message = f"Произошла необъяснимая ошибка"
|
||||
async def do_container_action(callback: CallbackQuery, callback_data: ActionCallback):
|
||||
action, name = callback_data.name, callback_data.action
|
||||
|
||||
await call.message.answer(
|
||||
subprocess.run(f"docker {action} {name}", shell=True)
|
||||
message = views.actions.get(action).format(name)
|
||||
|
||||
await callback.message.answer(
|
||||
text=message,
|
||||
)
|
||||
|
@ -1,12 +1,12 @@
|
||||
from app.settings import bot, Secrets
|
||||
from app.settings import bot, secrets
|
||||
from app.utils.commands import set_commands
|
||||
from app import views
|
||||
|
||||
|
||||
async def start_bot():
|
||||
await set_commands(bot)
|
||||
await bot.send_message(Secrets.admin_id, views.start_bot_message())
|
||||
await bot.send_message(secrets.admin_id, views.start_bot_message())
|
||||
|
||||
|
||||
async def stop_bot():
|
||||
await bot.send_message(Secrets.admin_id, views.stop_bot_message())
|
||||
await bot.send_message(secrets.admin_id, views.stop_bot_message())
|
||||
|
@ -0,0 +1,60 @@
|
||||
from aiogram.fsm.context import FSMContext
|
||||
from aiogram.types import Message, CallbackQuery
|
||||
|
||||
from app.callbacks.callback_favorites import AddFavoriteCallback, DelFavoriteCallback
|
||||
from app.keyboards.favorites_keyboards import favorite_list, add_favorite_inline, add_del_favorite_inline
|
||||
from app.utils.db_actions import get_user, create_user, get_favorites, add_favorite, del_favorite
|
||||
from app.utils.statesform import FavoritesCommandsSteps
|
||||
|
||||
|
||||
async def favorites_command(message: Message):
|
||||
user = await get_user(message.from_user.id)
|
||||
if not user:
|
||||
user = await create_user(message.from_user.id)
|
||||
|
||||
favorites = await get_favorites(user.id)
|
||||
|
||||
if not favorites:
|
||||
inline_keyboard = await add_favorite_inline(user)
|
||||
await message.answer("Нет команд в избранном.", reply_markup=inline_keyboard)
|
||||
else:
|
||||
inline_keyboard = await add_del_favorite_inline(user)
|
||||
await message.answer("Выберите действие:", reply_markup=inline_keyboard)
|
||||
keyboard = await favorite_list(favorites)
|
||||
await message.answer("Выберите команду из списка ниже:", reply_markup=keyboard)
|
||||
|
||||
|
||||
async def add_favorite_callback(callback: CallbackQuery, callback_data: AddFavoriteCallback, state: FSMContext):
|
||||
await callback.message.answer("Введите команду.")
|
||||
await state.set_data({"user_id": callback_data.user_id})
|
||||
await state.set_state(FavoritesCommandsSteps.ADD)
|
||||
|
||||
|
||||
async def add_favorite_state(message: Message, state: FSMContext):
|
||||
data = await state.get_data()
|
||||
new_command = await add_favorite(user_id=data.get("user_id"), command=message.text)
|
||||
await message.answer(f"Добавлена команда: {new_command.command}")
|
||||
await state.clear()
|
||||
|
||||
|
||||
async def del_favorite_callback(callback: CallbackQuery, callback_data: DelFavoriteCallback, state: FSMContext):
|
||||
favorites = await get_favorites(callback_data.user_id)
|
||||
favorites_text = "\n".join([f"{i}: {favorite.command}" for i, favorite in enumerate(favorites)])
|
||||
await callback.message.answer(f"Введите номер команды для удаления:\n{favorites_text}")
|
||||
await state.set_data({"favorites": favorites})
|
||||
await state.set_state(FavoritesCommandsSteps.DEL)
|
||||
|
||||
|
||||
async def del_favorite_state(message: Message, state: FSMContext):
|
||||
data = await state.get_data()
|
||||
|
||||
try:
|
||||
choice = int(message.text)
|
||||
except ValueError:
|
||||
await message.answer("Введите число!")
|
||||
await state.set_state(FavoritesCommandsSteps.DEL)
|
||||
else:
|
||||
favorite = data.get("favorites")[choice]
|
||||
await del_favorite(favorite.id)
|
||||
await message.answer("Команда успешно удалена.")
|
||||
await state.clear()
|
||||
|
@ -6,6 +6,7 @@ from aiogram.types import Message
|
||||
|
||||
from app import views
|
||||
from app.utils.statesform import ExecuteCommandsSteps
|
||||
from app.utils.text_splitter import split_text
|
||||
|
||||
|
||||
async def multiply_commands(message: Message, state: FSMContext):
|
||||
@ -34,6 +35,9 @@ async def execute_commands(message: Message, state: FSMContext):
|
||||
except subprocess.CalledProcessError as e:
|
||||
res = views.subprocess_error(e)
|
||||
|
||||
await message.answer(views.user_command(res), parse_mode="HTML")
|
||||
messages = split_text(res)
|
||||
|
||||
for m in messages:
|
||||
await message.answer(views.user_command(m), parse_mode="HTML")
|
||||
|
||||
await state.set_state(ExecuteCommandsSteps.EXECUTE)
|
||||
|
@ -3,10 +3,15 @@ import subprocess
|
||||
from aiogram.types import Message
|
||||
|
||||
from app import views
|
||||
from app.utils.text_splitter import split_text
|
||||
|
||||
|
||||
async def execute_command(message: Message):
|
||||
user_command = message.text.split()[1:]
|
||||
sub = subprocess.check_output(user_command, shell=True)
|
||||
res = sub.decode().replace("&", "&").replace("<", "<").replace(">", ">")
|
||||
await message.answer(views.user_command(res), parse_mode="HTML")
|
||||
|
||||
messages = split_text(res)
|
||||
|
||||
for m in messages:
|
||||
await message.answer(views.user_command(m), parse_mode="HTML")
|
||||
|
Reference in New Issue
Block a user