# -*- coding: utf-8 -*- version = (1, 0, 0) # meta developer: @RUIS_VlP import random from datetime import timedelta from telethon import TelegramClient, events from telethon import functions from telethon.tl.types import Message import os from .. import loader, utils import paramiko # requires: paramiko def upload_file_sftp(host, port, username, password, local_file, remote_file): try: # Создаем экземпляр SSHClient client = paramiko.SSHClient() # Загружаем параметры по умолчанию client.load_system_host_keys() # Разрешаем соединение с сервером, если ключа нет в системе client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # Подключаемся к серверу client.connect(hostname=host, port=port, username=username, password=password) # Открываем SFTP сессию sftp = client.open_sftp() try: sftp.listdir("SFTP_files") except IOError: sftp.mkdir("SFTP_files") # Загружаем файл sftp.put(local_file, remote_file) print(f'Файл {local_file} успешно загружен на {remote_file}') except Exception as e: print(f'Произошла ошибка: {e}') finally: # Закрываем SFTP сессию и SSH соединение if 'sftp' in locals(): sftp.close() client.close() @loader.tds class SFTPUploaderMod(loader.Module): """Загрузка файлов на SFTP""" strings = { "name": "SFTPUploader", } def __init__(self): self.config = loader.ModuleConfig( loader.ConfigValue( "host", "None", "IP address or domain", validator=loader.validators.String() ), loader.ConfigValue( "username", "None", "SFTP username", validator=loader.validators.String() ), loader.ConfigValue( "password", "None", "SFTP password", validator=loader.validators.Hidden() ), loader.ConfigValue( "Port", 22, "SFTP port", validator=loader.validators.String() ), ) @loader.command() async def sftp(self, message): """ - загружает файл на SFPT""" host = self.config["host"] or "None" username = self.config["username"] or "None" password = self.config["password"] or "None" port = self.config["Port"] or "None" if host == "None" or username == "None" or password == "None" or port == "None": await utils.answer(message, "Значения не указаны. Укажите их через команду:\n.config SFTPUploader") return reply = await message.get_reply_message() if reply: if reply.media: await utils.answer(message, f"Начинаю загрузку....") file_path = await message.client.download_media(reply.media) sftp_path = f"SFTP_files/{file_path}" upld = upload_file_sftp(host, port, username, password, file_path, sftp_path) os.remove(file_path) await utils.answer(message, f"Файл загружен на SFTP сервер(не факт), расположение файла: ~/SFTP_files/{file_path}") else: await utils.answer(message, "В сообщении не найдены файлы!") else: await utils.answer(message, "Команда должна быть ответом на сообщение!") return