def _(message): response = \ "Этот бот позволяет развернуть Вашего бота \ на сервере, чтобы держать его запущенным 24/7. \ \nДля связи: <code>/feedback {сообщение}</code>" keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=3) keyboard.row('✨Попробовать✨') bot.send_message(message.chat.id, response, reply_markup=keyboard, parse_mode='html') db = SQLighter(DB) if not db.get_user(message.from_user.id): if re.search('/start (\w+)', message.text): ref = re.search('/start (\w+)', message.text).group(1) user = db.get_ref(ref) if user: db.insert_user(message.from_user.id, user[0]) db.update_user(user[0], ref_count=user[3] + 1) logger.info(f"{user[0]} invited {message.from_user.id}") try: response = "Похоже, кто-то пришел к нам по вашей ссылке. Спасибо." bot.send_message(user[0], response) except Exception as e: logger.error(e) if not db.get_user(message.from_user.id): db.insert_user(message.from_user.id) logger.info(f"{message.from_user.id} has registered")
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)