/
bdk228
/
hakaton
Обзор
Документация
Войти
/
bdk228
/
hakaton
Код
Запросы
0
Задачи
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
main.py
101 строка
7 KB
bdk228
update main.py
22 сен 2024, 09:55
22 сен 2024, 09:55
06f44df
Код
Авторство
О чём код?
import subprocess import telebot from telebot import types import os import random import string import concurrent.futures bot = telebot.TeleBot('*') def run_main_in_thread(file_path, chat_id, file_name): try: result = subprocess.run(['python3', 'test.py'], capture_output=True, text=True) answer = result.stdout md_filename = generate_unique_filename('.md') md_save_path = os.path.join("downloads", md_filename) with open(md_save_path, 'w', encoding='utf-8') as md_file: md_file.write(answer) bot.send_message(chat_id, f"✅ Ваш отчет по файлу {file_name} готов. Отправляю его вам!") bot.send_document(chat_id, open(md_save_path, 'rb')) except Exception as e: bot.send_message(chat_id, f"❌ Произошла ошибка: {str(e)}") def generate_unique_filename(extension, length=16): random_name = ''.join(random.choices(string.ascii_lowercase, k=length)) return f"{random_name}{extension}" @bot.message_handler(commands=['start']) def send_welcome(message): markup = types.ReplyKeyboardMarkup(resize_keyboard=True) btn1 = types.KeyboardButton("📄 FAQ") btn2 = types.KeyboardButton("📘 Инструкция") btn3 = types.KeyboardButton("ℹ️ О проекте") markup.add(btn1, btn2, btn3) bot.send_message(message.chat.id, ("👋 Привет! Добро пожаловать в наш бот по проверке проектов на соответствие " "ГОСТ. Мы команда энтузиастов, которая разработала этот сервис, чтобы " "помочь вам автоматизировать проверку документов.\n\n" "⚠️ Пожалуйста, учтите, что результаты проверки могут содержать ошибки, " "и мы рекомендуем проверять их вручную.\n\n" "Для начала работы выберите одну из опций ниже."), reply_markup=markup) @bot.message_handler(content_types=['text']) def handle_text(message): if message.text == "📄 FAQ": bot.send_message(message.chat.id, ( "❓ *Часто задаваемые вопросы*\n\n" "1. *Какую задачу выполняет бот?*\n" "Бот помогает проверять документы на соответствие ГОСТ. Вы загружаете документ, и " "он возвращает отчет об ошибках и несоответствиях.\n\n" "2. *Какие типы документов поддерживаются?*\n" "На данный момент бот поддерживает только файлы формата .doc и .docx.\n\n" "3. *Сколько времени занимает проверка?*\n" "В среднем проверка занимает не более 5 минут.\n\n" "4. *Насколько точны результаты проверки?*\n" "Бот выполняет проверку автоматически, но не может гарантировать 100% точность. " "Всегда проверяйте отчет вручную.\n\n" ), parse_mode='Markdown') elif message.text == "📘 Инструкция": bot.send_message(message.chat.id, ( "📝 *Инструкция по использованию*\n\n" "1. Загрузите файл в формате .doc или .docx, отправив его в этот чат.\n" "2. Дождитесь сообщения о принятии файла и начала проверки.\n" "3. Через несколько минут вы получите отчет в формате .md с результатами проверки.\n" "4. Ознакомьтесь с отчетом и проверьте все указанные несоответствия вручную.\n\n" "Если у вас возникнут вопросы, выберите опцию '📄 FAQ' или свяжитесь с нами для получения помощи." ), parse_mode='Markdown') elif message.text == "ℹ️ О проекте": bot.send_message(message.chat.id, ( "👥 *О проекте*\n\n" "Мы команда разработчиков, занимающихся автоматизацией проверки документов на " "соответствие ГОСТ. Этот бот создан для упрощения процесса и снижения количества " "ошибок при проверке.\n\n" "Нашей целью является помощь пользователям в соблюдении стандартов, но помните, что " "бот не заменяет ручную проверку, и окончательное решение остается за вами.\n\n" "Если у вас есть идеи или предложения, мы будем рады их выслушать!" ), parse_mode='Markdown') else: bot.send_message(message.chat.id, "⚠️ Извините, я не понимаю эту команду. Пожалуйста, выберите опцию из меню.") @bot.message_handler(content_types=['document']) def handle_document(message): file_info = bot.get_file(message.document.file_id) file_extension = os.path.splitext(message.document.file_name)[1].lower() if file_extension in ['.docx', '.doc']: downloaded_file = bot.download_file(file_info.file_path) file_name = message.document.file_name unique_filename = 'test.docx' save_path = os.path.join(os.path.dirname(__file__), unique_filename) with open(save_path, 'wb') as new_file: new_file.write(downloaded_file) bot.send_message(message.chat.id, f"✅ Ваш файл {file_name} был принят и в скором времени (обычно это не занимает более 5 минут) вышлем вам отчет по сверке с ГОСТ'ом!") with concurrent.futures.ThreadPoolExecutor() as executor: executor.submit(run_main_in_thread, save_path, message.chat.id, message.document.file_name) else: bot.send_message(message.chat.id, "❌ Извините, я могу работать только с файлами .docx и .doc.") bot.polling(none_stop=True)