コード例 #1
0
def reverse_sort_by_date(message):

    fnc.log_write(
        module_name,
        fnc.msg_log_text(message),
    )

    user_id = message.from_user.id

    if user_id not in users_states_dict:
        user_state = UserState()
        user_state.search_type_selection_expected = True
        users_states_dict[user_id] = user_state
    else:
        user_state = users_states_dict[user_id]
        user_state.reversed_by_date_search_result = \
        not user_state.reversed_by_date_search_result

    user_state.reset() # reset не сбрасывет значение
                       # .reversed_by_date_search_result

    # это сообщение выводится в любом случае
    listen_to_the_mds_bot.send_message(
        user_id,
        (
            'Порядок вывода записей изменен!\n\n'
            '/search_by_author\nПоиск по имени автора\n\n'
            '/search_by_title\nПоиск по названию\n\n'
            '/search_by_length\nПоиск по длине записи\n\n'
            '/reverse_sort_by_date\nРеверсировать порядок результата поиска'
        ),
    )
コード例 #2
0
def set_search_by_length(message):

    fnc.log_write(
        module_name,
        fnc.msg_log_text(message),
    )

    user_id = message.from_user.id

    # создание cоcтояния пользователя
    if user_id not in users_states_dict:
        user_state = UserState()
        user_state.length_selection_expected = True
        users_states_dict[user_id] = user_state

    # сброс и установка состояния пользователя
    elif user_id in users_states_dict:
        user_state = users_states_dict[user_id]
        user_state.reset()
        user_state.length_selection_expected = True

    # это сообщение выводится в любом случае
    listen_to_the_mds_bot.send_message(
        user_id,
        'Введите диапазон поиска в минутах',
        reply_markup=length_choice_keyboard,
    )
コード例 #3
0
def set_search_by_title(message):

    fnc.log_write(
        module_name,
        fnc.msg_log_text(message),
    )

    user_id = message.from_user.id

    # создание cоcтояния пользователя
    if user_id not in users_states_dict:
        user_state = UserState()
        user_state.title_selection_expected = True
        users_states_dict[user_id] = user_state

    # сброс и установка состояния пользователя
    elif user_id in users_states_dict:
        user_state = users_states_dict[user_id]
        user_state.reset()
        user_state.title_selection_expected = True

    # это сообщение выводится в любом случае
    listen_to_the_mds_bot.send_message(
        user_id,
        'Введите название',
    )
コード例 #4
0
def start(message):

    fnc.log_write(
        module_name,
        fnc.msg_log_text(message),
    )

    user_id = message.from_user.id

    # создание cоcтояния пользователя
    if user_id not in users_states_dict:

        user_state = UserState()
        user_state.search_type_selection_expected = True
        users_states_dict[user_id] = user_state

        listen_to_the_mds_bot.send_message(
            user_id,
            (
                'Бот предназначен для удобной навигации по '
                'записям радиопередачи "Модель для сборки".\n'
                'Осуществите выбор способа поиска записей:'
            ),
        )

    # сброс состояния пользователя
    else:
        users_states_dict[user_id].reset()

    # это сообщение выводится в любом случае
    listen_to_the_mds_bot.send_message(
        user_id,
        (
            '/search_by_author\nПоиск по имени автора\n\n'
            '/search_by_title\nПоиск по названию\n\n'
            '/search_by_length\nПоиск по длине записи\n\n'
            '/reverse_sort_by_date\nРеверсировать порядок результата поиска'
        ),
    )
コード例 #5
0
def search_navigation_administration(message):

    global recordings_base
    global rec_expected
    global date_and_station_expected

    fnc.log_write(
        module_name,
        fnc.msg_log_text(message),
    )

    user_id = message.from_user.id

    # $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
    # $$$$$$$$$$$$$$$$$$ ПОИСК ПО АВТОРУ ИЛИ НАЗВАНИЮ $$$$$$$$$$$$$$$$$$
    # $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
    if (
            user_id in users_states_dict
            and
            (users_states_dict[user_id].author_selection_expected
             or
             users_states_dict[user_id].title_selection_expected)
    ):

        user_state = users_states_dict[user_id]

        column_dict = {
            True: 'author',
            False: 'title',
        }

        pages_dict = fnc.dict_of_navigation_pages(
            fnc.sorted_by_strng_in_column_recordings_list(
                recordings_base=recordings_base,
                column=column_dict[user_state.author_selection_expected],
                strng=message.text,
                reverse=user_state.reversed_by_date_search_result,
            )
        )

        if len(pages_dict[1]) == 0:
            listen_to_the_mds_bot.send_message(
                user_id,
                'По вашему запросу ничего не найдено.\n'
                'Повторите ввод или измените способ поиска /start',
            )

        else:
            # сохраняем в атрибут название столбца для поиска
            user_state.column = \
                column_dict[user_state.author_selection_expected]
            # сохраняем запрос пользователя
            user_state.strng = message.text
            # перестаем ожидать ввод подстроки для поиска
            if user_state.author_selection_expected:
                user_state.author_selection_expected = False
            elif user_state.title_selection_expected:
                user_state.title_selection_expected = False
            # устанавливаем значение запрашиваемой страницы == 1
            user_state.page = 1
            # отправляем пользователю страницу для навигации
            listen_to_the_mds_bot.send_message(
                user_id,
                fnc.navigation_page(
                    pages_dict, user_state, recordings_base
                ),
                reply_markup=recording_choice_keyboard,
            )
            # начинаем ожидать изменения страницы для навигации
            user_state.page_selection_expected = True
            # начинаем ожидать выбора записи
            user_state.recording_selection_expected = True

    # $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
    # $$$$$$$$$$$$$$$$$$$$$ ПОИСК ПО ДЛИНЕ АУДИО $$$$$$$$$$$$$$$$$$$$$$$
    # $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
    elif (
            user_id in users_states_dict
            and
            users_states_dict[user_id].length_selection_expected
    ):

        user_state = users_states_dict[user_id]

        pages_dict = fnc.dict_of_navigation_pages(
            fnc.sorted_by_length_recordings_list(
                recordings_base,
                message.text,
                user_state.reversed_by_date_search_result,
            )
        )

        if len(pages_dict[1]) == 0:
            listen_to_the_mds_bot.send_message(
                user_id,
                'По вашему запросу ничего не найдено.\n'
                'Повторите ввод или измените способ поиска /start',
                reply_markup=length_choice_keyboard,
            )

        else:
            # сохраняем запрос пользователя
            user_state.strng = message.text
            # перестаем ожидать ввод запроса с длиной
            user_state.length_selection_expected = False
            # устанавливаем значение запрашиваемой страницы == 1
            user_state.page = 1
            # отправляем пользователю страницу для навигации
            listen_to_the_mds_bot.send_message(
                user_id,
                fnc.navigation_page(
                    pages_dict, user_state, recordings_base
                ),
                reply_markup=recording_choice_keyboard,
            )
            # начинаем ожидать изменения страницы для навигации
            user_state.page_selection_expected = True
            # начинаем ожидать выбора записи
            user_state.recording_selection_expected = True

    # $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
    # $$$$$$$$$$$$$$$$$ НАВИГАЦИЯ И ОТПРАВКА ЗАПИСИ $$$$$$$$$$$$$$$$$$$$
    # $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
    elif (
            user_id in users_states_dict
            and
            users_states_dict[user_id].page_selection_expected
            and
            users_states_dict[user_id].recording_selection_expected
            and
            (message.text in ('<<', '<', '>', '>>')
             or
             message.text in (str(i) for i in range(1, 11)))
    ):

        user_state = users_states_dict[user_id]
        pages_dict = return_pages_dict(user_state)

        # СМЕНА СТРАНИЦЫ
        if message.text in ('<<', '<', '>', '>>'):
            page_was_changed = True
            if message.text == '>' and user_state.page < len(pages_dict):
                user_state.page += 1
            elif message.text == '>>' and user_state.page < len(pages_dict):
                user_state.page = len(pages_dict)
            elif message.text == '<' and user_state.page > 1:
                user_state.page -= 1
            elif message.text == '<<' and user_state.page > 1:
                user_state.page = 1
            else:
                page_was_changed = False

            if page_was_changed:
                pages_dict = return_pages_dict(user_state)
                listen_to_the_mds_bot.send_message(
                    user_id,
                    fnc.navigation_page(
                        pages_dict, user_state, recordings_base
                    ),
                    reply_markup=recording_choice_keyboard,
                )
            else:
                listen_to_the_mds_bot.send_message(
                    user_id,
                    'Недопустимое изменение страницы',
                    reply_markup=recording_choice_keyboard,
                )

        # ВЫБОР ЗАПИСИ
        elif (
                int(message.text) in range(1, 11)
                and
                len(pages_dict[user_state.page]) >= int(message.text)
        ):
            i = pages_dict[user_state.page][int(message.text) - 1]
            listen_to_the_mds_bot.forward_message(
                user_id,
                auth.bot_admin_id,
                recordings_base['recording_id'][i],
            )
        elif(
                int(message.text) in range(1, 11)
                and
                len(pages_dict[user_state.page]) < int(message.text)
        ):
            listen_to_the_mds_bot.send_message(
                user_id,
                'Недопустимый ввод',
                reply_markup=recording_choice_keyboard,
            )

    # $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
    # $$$$$$$$$$$$$$$$$$$$$$$ АДМИНИСТРИРОВАНИЕ $$$$$$$$$$$$$$$$$$$$$$$$
    # $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

    # для обновления recordings_base через сообщение в тг
    # после добавления записи через excel таблицу
    elif (
            message.text == 'refreshdata'
            and
            user_id == auth.bot_admin_id
    ):

        fnc.log_write(
            module_name,
            fnc.msg_log_text(message),
        )

        try:
            msg = (
                f'Число элементов в recordings_base до обновления: '
                f'{len(recordings_base)}.\n'
                'Пробую обновить...'
            )
            listen_to_the_mds_bot.send_message(
                    user_id,
                    msg,
                )
            fnc.log_write(
                module_name,
                msg,
            )

            recordings_base = pd.read_excel(
                'recordings_base.xlsx', dtype=str
            ).fillna('')

            msg = (
                'Обновление прошло успешно!\n'
                'Число элементов в recordings_base после обновления: '
                f'{len(recordings_base)}'
            )
            listen_to_the_mds_bot.send_message(
                user_id,
                'Обновление прошло успешно!\n'
                'Число элементов в recordings_base после обновления: '
                f'{len(recordings_base)}',
            )
            fnc.log_write(
                module_name,
                msg,
            )
        except Exception as e:
            listen_to_the_mds_bot.send_message(
                user_id,
                f'Возникла ошибка: {e}',
            )

    # для добавления записи через диалог с ботом
    elif (
            message.text == 'addrec'
            and
            user_id == auth.bot_admin_id
    ):

        fnc.log_write(
            module_name,
            'Добавление записи в recordings_base через мессенджер',
        )

        rec_expected = True

        listen_to_the_mds_bot.send_message(
            user_id,
            'Ожидается аудиозапись',
        )

    elif (
            user_id == auth.bot_admin_id
            and
            date_and_station_expected
            and
            len(message.text.split()) > 1
    ):
        date, station = \
            re.split(r' ', message.text, maxsplit=1)[0], \
            re.split(r' ', message.text, maxsplit=1)[1]

        recordings_base['date'][len(recordings_base) - 1] = date
        recordings_base['station'][len(recordings_base) - 1] = station
        recordings_base.to_excel(
            'recordings_base.xlsx',
            index=False,
        )
        listen_to_the_mds_bot.send_message(
            user_id,
            'Информация о дате эфира и станции добавлена к последней записи.\n'
            f'Число строк в recordings_base: {len(recordings_base)}.\n'
            'Файл recordings_base.xlsx обновлен.',
        )
        date_and_station_expected = False