def _(message): if re.search('^/bot_(\w+) (\w+)$', message.text): reg = re.search('^/bot_(\w+) (\w+)$', message.text) command = reg.group(1) bot_id = reg.group(2) if command in COMMANDS: db = SQLighter(DB) bots = db.get_bots(message.from_user.id) bot_name = '' for item in bots: if str(item[0]) == bot_id: bot_name = item[1] break if bot_name: logger.info( f"{message.from_user.id} sent command '{command}' to bot {bot_id}" ) result = backend.controlbot(bot_id, command) if result[0] == 0: bot.reply_to(message, result[1]) elif result[0] == 10: bot.send_document(message.from_user.id, result[1]) result[1].close() else: bot.reply_to( message, f'Произошла ошибка. Код ошибки: {result[0]}\n{result[1]}' ) else: response = "<i>Нет такого бота...</i>" keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=3) keyboard.row("🔐 Панель управления", "⬇️ Загрузить бота") keyboard.row("📬 Помощь", "💻 О проекте") bot.send_message(message.chat.id, response, reply_markup=keyboard, parse_mode='html') else: response = "<i>Forbidden</i>" keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=3) keyboard.row("🔐 Панель управления", "⬇️ Загрузить бота") keyboard.row("📬 Помощь", "💻 О проекте") bot.send_message(message.chat.id, response, reply_markup=keyboard, parse_mode='html')
def _(message): logger.info(f"{message.from_user.id} sent file") mes = None try: mes = bot.reply_to(message, "Обрабатываем...") user_id = message.from_user.id file_name = re.sub(r'[^a-zA-Z0-9\.\_]', '', message.document.file_name) if file_name == ".zip": file_name = "untitled.zip" bot_name, _ = os.path.splitext(file_name) if not re.search(r'[a-zA-Z0-9]', bot_name): bot_name = "untitled" downloaded_file = bot.download_file( bot.get_file(message.document.file_id).file_path) if message.document.mime_type != "application/zip": bot.edit_message_text("Файл должен быть формата zip!", mes.chat.id, mes.message_id) logger.error(f"{message.from_user.id} sent wrong file (ext)") return path = f'./download/{user_id}/' if not os.path.exists(path): os.makedirs(path) path += file_name path = os.path.abspath(path) with open(path, 'wb') as file: file.write(downloaded_file) with zipfile.ZipFile(path, 'r') as z: files = z.namelist() req = False st = False for element in files: if 'requirements.txt' in element: req = True if 'tostart.txt' in element: st = True err = "" if not req: err += "Вы забыли файл requirements.txt\n" if not st: err += "Вы забыли файл tostart.txt\n" if not (req and st): os.remove(path) bot.edit_message_text(err, mes.chat.id, mes.message_id) logger.error( f"{message.from_user.id} sent wrong file (no requirements.txt or/and tostart.txt)" ) return db = SQLighter(DB) bots = db.get_bots(user_id) exist = False for item in bots: if bot_name in item: db.update_bot(item[0], status=False) bot_id = item[0] exist = True if not exist: bot_id = backend.get_hash(user_id) + backend.get_hash( int(time.time() - EPOCH)) db.insert_bot(bot_id, bot_name, False, 0, user_id) backend.deploy(bot_id, user_id, file_name) bot.edit_message_text("Файл принят!", mes.chat.id, mes.message_id) logger.info( f"Successfully set bot up: user_id {message.from_user.id}, bot_id {bot_id}" ) except Exception as e: if mes: bot.edit_message_text("Произошла ошибка... Попробуйте еще раз.", mes.chat.id, mes.message_id) else: bot.reply_to(message, "Произошла ошибка... Попробуйте еще раз.") if not db.get_user(message.from_user.id): db.insert_user(message.from_user.id) logger.error(e)
def _(message): if message.text == "⬇️ Загрузить бота": response = \ "Для обновления файлов бота загрузите файл в формате <i>bot_name.zip</i>, \ где <i>bot_name</i> - имя обновляемого бота. Для загрузки нового бота имя <i>bot_name</i> должно быть уникальным. \ \n\nВ архиве также должны содержаться следующие файлы: \ - <code>requerements.txt</code>, в котором указаны зависимости вашего проекта \ - <code>tostart.txt</code>, в котором указано, какой файл нам нужно запускать \ <b>\n\nВажно! У нас установлен интерпретатор Python 3.6.8, \ Позаботьтесь о совместимости Вашего кода!</b> \ \n\nЧто-то непонятно? Смотри <a href='https://telegra.ph/DeployMEbot-Gajd-07-08'>гайд.</a>" keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=3) keyboard.row("🔐 Панель управления", "⬇️ Загрузить бота") keyboard.row("📬 Помощь", "💻 О проекте") bot.send_message(message.chat.id, response, reply_markup=keyboard, parse_mode='html', disable_web_page_preview=True) elif message.text == "🔐 Панель управления": db = SQLighter(DB) bots = db.get_bots(message.from_user.id) response = "" for item in bots: try: if backend.check_status(item[0]): status = "Запущен" else: status = "Выключен" except: status = "Неизвестно" response += f""" <b>{item[1]}</b> [<i>{status}</i>] ID бота: <code>{item[0]}</code> Осталось времени: <i>{item[3]}</i>\n""" if not response: response = "\n<i>Пусто...</i>" response = "Ваши боты:\n" + response keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=3) keyboard.row("🔐 Панель управления", "🧩 Обновить файлы") keyboard.row("🚀 Запуск/остановка", "💬 Посмотреть логи") keyboard.row("💥 Удалить бота", "📬 Помощь") keyboard.row("💻 О проекте") bot.send_message(message.chat.id, response, reply_markup=keyboard, parse_mode='html') elif message.text == "🚀 Запуск/остановка": response = """Управление ботом: Запустить - /bot_start {id} Остановить - /bot_stop {id} """ keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=3) keyboard.row("🔐 Панель управления", "🧩 Обновить файлы") keyboard.row("🚀 Запуск/остановка", "💬 Посмотреть логи") keyboard.row("💥 Удалить бота", "📬 Помощь") keyboard.row("💻 О проекте") bot.send_message(message.chat.id, response, reply_markup=keyboard, parse_mode='html') elif message.text == "🧩 Обновить файлы": response = \ "Для обновления файлов бота загрузите файл в формате <i>bot_name.zip</i>, \ где <i>bot_name</i> - имя обновляемого бота. Для загрузки нового бота имя <i>bot_name</i> должно быть уникальным. \ \n\nВ архиве также должны содержаться следующие файлы: \ - <code>requerements.txt</code>, в котором указаны зависимости вашего проекта \ - <code>tostart.txt</code>, в котором указано, какой файл нам нужно запускать \ <b>\n\nВажно! У нас установлен интерпретатор Python 3.6.8, \ Позаботьтесь о совместимости Вашего кода!</b> \ \n\nНепонятно? Смотри <a href='https://telegra.ph/DeployMEbot-Gajd-07-08'>гайд.</a>" keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=3) keyboard.row("🔐 Панель управления", "🧩 Обновить файлы") keyboard.row("🚀 Запуск/остановка", "💬 Посмотреть логи") keyboard.row("💥 Удалить бота", "📬 Помощь") keyboard.row("💻 О проекте") bot.send_message(message.chat.id, response, reply_markup=keyboard, parse_mode='html', disable_web_page_preview=True) elif message.text == "💥 Удалить бота": response = """Удалить бота: /bot_remove {id} <b>Внимание! После отправки команды бот окончательно будет удален.</b>""" keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=3) keyboard.row("🔐 Панель управления", "🧩 Обновить файлы") keyboard.row("🚀 Запуск/остановка", "💬 Посмотреть логи") keyboard.row("💥 Удалить бота", "📬 Помощь") keyboard.row("💻 О проекте") bot.send_message(message.chat.id, response, reply_markup=keyboard, parse_mode='html') elif message.text == "💬 Посмотреть логи": response = "Посмотреть логи:\n\n/bot_logs {id}" keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=3) keyboard.row("🔐 Панель управления", "🧩 Обновить файлы") keyboard.row("🚀 Запуск/остановка", "💬 Посмотреть логи") keyboard.row("💥 Удалить бота", "📬 Помощь") keyboard.row("💻 О проекте") bot.send_message(message.chat.id, response, reply_markup=keyboard, parse_mode='html') elif message.text == "📬 Помощь": response = \ "Гайд по установке бота: https://telegra.ph/DeployMEbot-Gajd-07-08\ \nДля связи: <code>/feedback {сообщение}</code>" keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=3) keyboard.row("🔐 Панель управления", "⬇️ Загрузить бота") keyboard.row("📬 Помощь", "💻 О проекте") bot.send_message(message.chat.id, response, reply_markup=keyboard, parse_mode='html') elif message.text == "💻 О проекте": response = \ "Этот бот позволяет развернуть Вашего бота \ на сервере, чтобы держать его запущенным 24/7. \ \nДля связи: <code>/feedback {сообщение}</code>" keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=3) keyboard.row("🔐 Панель управления", "⬇️ Загрузить бота") keyboard.row("📬 Помощь", "💻 О проекте") bot.send_message(message.chat.id, response, reply_markup=keyboard, parse_mode='html') else: response = 'Выберите интересующий Вас элемент меню:' keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=3) keyboard.row("🔐 Панель управления", "⬇️ Загрузить бота") keyboard.row("📬 Помощь", "💻 О проекте") bot.send_message(message.chat.id, response, reply_markup=keyboard)