Exemplo n.º 1
0
def send_list_of_audio(uid):
    audio_list = dbfuncs.get_user_audio_list(uid)
    if len(audio_list) < 1:
        text = "У вас нет аудио в базе"
    else:
        text = "Список ваших аудио:\n"
        for item in audio_list:
            text += "\n" + item[2] + (" (%d байт)" % item[4])
    bot.send_message(uid, text)
Exemplo n.º 2
0
def send_list_of_photos(uid):
    photos_list = dbfuncs.get_user_photos_list(uid)
    if len(photos_list) < 1:
        text = "У вас нет фото в базе"
    else:
        text = "Список ваших фото:\n"
        for item in photos_list:
            text += "\n" + item[2] + (" (%d байт)" % item[4])
    bot.send_message(uid, text)
Exemplo n.º 3
0
def get_text_messages(message):
    logger.info(
        f"{message.from_user.id} ({message.from_user.username}) - handle: text ({message.text})"
    )

    if message.text.lower().strip() in ("привет", "приветствую", "здравствуй",
                                        "хай"):
        bot.send_message(message.from_user.id, "Приветствую")
    else:
        bot.send_message(message.from_user.id, "Хм...")
Exemplo n.º 4
0
def remove_audio(message):
    file_list = message.text.replace(",", " ").strip().split()[1:]
    logger.info(
        f"{message.from_user.id} ({message.from_user.username}) - command: remove_audio ("
        + ", ".join(file_list) + ")")

    if len(file_list) == 0:
        bot.send_message(message.from_user.id, "Не указаны файлы")
        return
    threading.Thread(target=(lambda: audio_funcs.remove_audio_files(
        message.from_user.id, file_list))).start()
Exemplo n.º 5
0
def get_audio_files(uid, file_list):
    file_list = sorted(list(set(file_list)))

    result = dbfuncs.get_user_audio_files(uid, file_list)
    for item in result:
        file = BytesIO(item[1])
        bot.send_audio(uid, file, title=item[0])
        file.close()

    dif = sorted(list(set(file_list) - set([x[0] for x in result])))
    if dif:
        logger.info(f"{uid}: not found: " + ", ".join(dif))
        bot.send_message(uid, "Следующие файлы не были найдены:\n" + "\n".join(dif))
Exemplo n.º 6
0
def start(message):
    help_text = \
        '''Функции бота:
        Конвертирование аудио в wav 16 khz, запись в бд на сервере и возможность скачать их.
        Поиск лиц на отправленных фото и запись их в бд, если лица обнаружены.
        Команды:
        /help - Показать описание
        /audio_list - Показать список аудио файлов
        /get_audio - Скачать указанные аудио (через пробел или запятую)
        /remove_all_audio - Удалить все аудио
        /photos_list - Показать список фото
        /get_photo - Скачать указанные фото (через пробел или запятую)
        /remove_all_photos - Удалить все фото
        '''
    bot.send_message(message.from_user.id, help_text)
Exemplo n.º 7
0
def process_audio(uid, file_id):
    audio_id = file_id
    file_info = bot.get_file(audio_id)
    file_link = f'https://api.telegram.org/file/bot{_config.token}/{file_info.file_path}'
    try:
        r = requests.get(file_link, proxies=_config.proxies)
    except Exception as e:
        bot.send_message(uid, "Не удалось получить файл с сервера telegram")
        logger.error(f"{uid}: Error during getting file from telegram server: {str(e)}")
        return
    if r.status_code != 200:
        bot.send_message(uid, "Не удалось загрузить файл в базу")
        logger.error(f"{uid}: Can't get file from telegram server (not 200 code)")
        return
    logger.info(f"{uid}: file downloaded from telegram server")

    input_filename = f"{file_id}.tmp"
    output_filename = f"{file_id}." + _config.audio_file_extension
    with open(input_filename, "wb") as fin:
        fin.write(r.content)

    try:
        logger.info(f"{uid}: start processing audio file")
        process = subprocess.check_call(f"ffmpeg -i {input_filename} -f wav -acodec pcm_s16le -ar 16000 {output_filename}")
        logger.info(f"{uid}: file processed")
    except subprocess.CalledProcessError as e:
        logger.error(f"{uid}: Error during processing file: {str(e)}")
        bot.send_message(uid, "Не удалось обработать файл")
        return
    # os.system(f"ffmpeg -i {input_filename} -f wav -acodec pcm_s16le -ar 16000 {output_filename}")

    os.remove(input_filename)

    with open(output_filename, "rb") as res_file:
        file_data = res_file.read()
        res = dbfuncs.insert_user_audio(uid, file_data)

    os.remove(output_filename)

    if res is not None:
        bot.send_message(uid, res)
    else:
        logger.info(f"{uid}: audio file added")
        bot.send_message(uid, "Аудио добавлено")
Exemplo n.º 8
0
def upload_photo(uid, file_id):
    file_info = bot.get_file(file_id)
    file_link = f'https://api.telegram.org/file/bot{_config.token}/{file_info.file_path}'
    try:
        r = requests.get(file_link, proxies=_config.proxies)
    except Exception as e:
        logger.error(
            f"{uid}: Error during getting file from telegram server: {str(e)}")
        bot.send_message(uid, "Не удалось получить файл с сервера telegram")
        return
    if r.status_code != 200:
        logger.error(
            f"{uid}: Can't get file from telegram server (not 200 code)")
        bot.send_message(uid, "Не удалось загрузить файл в базу")
        return
    logger.info(f"{uid}: file downloaded from telegram server")

    file_data = r.content
    file_name = "file_" + file_id + ".tmp"
    with open(file_name, "wb") as f:
        f.write(file_data)

    logger.info(f"{uid}: start processing photo file")
    face_detector = dlib.get_frontal_face_detector()
    image = io.imread(file_name)
    detected_faces = face_detector(image, 1)
    logger.info(f"{uid}: photo file processed")

    os.remove(file_name)

    if len(detected_faces) > 0:
        res = dbfuncs.insert_user_photo(uid, file_data)

        if res is not None:
            bot.send_message(uid, res)
        else:
            logger.info(f"{uid}: photo file added")
            bot.send_message(uid, "Фото добавлено")
    else:
        logger.info(f"{uid}: photo file not added (faces not detected)")
        bot.send_message(uid, "Лица не обнаружены, фото не добавлено")
Exemplo n.º 9
0
def handle_document(message):
    #print(message)
    if message.document.mime_type.split('/')[0] == "audio":
        logger.info(
            f"{message.from_user.id} ({message.from_user.username}) - handle: audio as document ("
            +
            f"{message.document.mime_type}, {message.document.file_size} bytes)"
        )
        threading.Thread(target=(lambda: audio_funcs.process_audio(
            message.from_user.id, message.document.file_id))).start()
    elif message.document.mime_type.split('/')[0] == "image":
        logger.info(
            f"{message.from_user.id} ({message.from_user.username}) - handle: photo as document"
        )
        threading.Thread(target=(lambda: image_funcs.upload_photo(
            message.from_user.id, message.document.file_id))).start()
    else:
        logger.info(
            f"{message.from_user.id} ({message.from_user.username}) - handle: document"
        )
        bot.send_message(message.from_user.id, "Не знаю, что с этим делать.")
Exemplo n.º 10
0
def remove_all_audio_files(uid):
    result = dbfuncs.remove_all_audio_files(uid)
    logger.info(f"{uid}: removed {result} audio files")
    bot.send_message(uid, "Удалено %d файлов." % result)
Exemplo n.º 11
0
def remove_audio_files(uid, file_list):
    file_list = sorted(list(set(file_list)))
    result = dbfuncs.remove_audio_files(uid, file_list)
    logger.info(f"{uid}: removed {result} audio files")
    bot.send_message(uid, "Удалено %d файлов." % result)