Код python, не работает
Помогите пожалуйста исправить код в python, он должен делать запись экрана на пк на столько сек, скок написал в тг бота, и присылать в тг бота. Но когда ты пишешь секунды в бота, он просто пишет что запись экрана будет длиться столько то секунд и зависает, что делать? Кто шарит исправьте код пж

Ваш код зависает, скорее всего, из-за того, что вы используете синхронное выполнение кода в боте Telegram, а процесс записи экрана блокирует основной поток. Это приводит к тому, что бот перестает отвечать на запросы. Давайте я помогу вам исправить код.
Для решения этой проблемы нужно:
1. Переместить запись экрана в отдельный поток или задачу (например, используя `asyncio`).
2. Убедиться, что файл с видео записывается корректно и отправляется после завершения записи.
Ниже представлен исправленный код:
```python
import os
import time
import asyncio
import pyautogui
import cv2
from aiogram import Bot, Dispatcher, executor, types
from aiogram.types import InputFile
API_TOKEN = "ВАШ_API_ТОКЕН" # Укажите токен вашего бота
bot = Bot(token=API_TOKEN)
dp = Dispatcher(bot)
async def record_screen(recording_time, output_path):
"""Функция для записи экрана."""
try:
screen_size = pyautogui.size()
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
fps = 30
frame_interval = 1 / fps
out = cv2.VideoWriter(output_path, fourcc, fps, screen_size)
start_time = time.time()
while time.time() - start_time < recording_time:
img = pyautogui.screenshot()
frame = cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR)
out.write(frame)
await asyncio.sleep(frame_interval)
out.release()
return True
except Exception as e:
print(f"Ошибка записи экрана: {e}")
return False
@dp.message_handler()
async def handle_message(message: types.Message):
"""Обработка сообщений от пользователя."""
try:
recording_time = int(message.text)
if recording_time <= 0:
await message.reply("Введите положительное число секунд.")
return
except ValueError:
await message.reply("Пожалуйста, введите количество секунд (числом).")
return
await message.reply(f"Начало записи экрана. Запись будет длиться {recording_time} секунд.")
# Директория для сохранения видео
directory = 'screenshots'
if not os.path.exists(directory):
os.makedirs(directory)
output_path = os.path.join(directory, f'screen_recording_{int(time.time())}.mp4')
# Запускаем запись экрана
success = await record_screen(recording_time, output_path)
if not success:
await message.reply("Произошла ошибка во время записи экрана.")
return
# Отправляем видео
if os.path.exists(output_path):
try:
file_to_send = InputFile(output_path)
await message.reply("Запись экрана завершена.")
await bot.send_video(message.chat.id, file_to_send, caption="Вот запись экрана!")
except Exception as e:
await message.reply(f"Не удалось отправить видео: {e}")
else:
await message.reply("Видео не удалось сохранить.")
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)
```
### Основные исправления:
1. **Асинхронная запись экрана**: Использовал `asyncio.sleep` вместо `time.sleep` для предотвращения блокировки.
2. **Обработка ошибок**: Добавил обработку ошибок при записи видео и отправке файла.
3. **Отправка видео**: После завершения записи отправляется готовое видео в чат.
Попробуйте этот код, он должен решить вашу проблему. Если что-то не будет работать, сообщите!
Пользуйся IDE там и ошибку подскажут и обоссут