예제 #1
0
def google_update(message: Message):
    if not is_person(message.chat):
        return
    try:
        user = User.get(telegram_id=message.chat.id)
        if user not in User.select(User).join(Links).join(Group).where(
                Group.group_name == 'PhonesAdmin'):
            raise Exception("Unauthorized user")
    except Exception:
        bot.send_message(text=get_unauthorized_user_start_message(),
                         chat_id=message.chat.id)
        return
    cur_persons_count = Person.select().count()
    gs_phones = GoogleSync(spreadsheet_id=PHONE_SPREADSHEET_ID)
    persons_from_google = gs_phones.read_range(
        list_name='List1', range_in_list=f'A{cur_persons_count + 2}:F')
    if persons_from_google is not None:
        for person in persons_from_google:
            if len(person) < 6:
                for j in range(len(person), 6):
                    person.append('')
            Person.get_or_create(name=person[1],
                                 surname=person[0],
                                 patronymic=person[2],
                                 defaults={
                                     'position': person[3],
                                     'phone': f'+{person[4]}',
                                     'email': person[5],
                                     'photo': '',
                                     'actual': 'True'
                                 })
    bot.send_message(chat_id=user.telegram_id, text='Данные получены')
예제 #2
0
def start_edit_equipment(call):
    if not is_person(call.message.chat):
        return
    try:
        user = User.get(telegram_id=call.message.chat.id)
        if user not in User.select(User).join(Links).join(Group).where(Group.group_name == 'Inventarization'):
            raise Exception("Unauthorized user")
    except Exception:
        logger.info(
            f'User {user.first_name} {user.last_name} tried to use inventarization functions, but this user is not in Inventarization group!')
        bot.send_message(text='У Вас нет доступа к этой функции', chat_id=call.message.chat.id)
        return
    equipment = Equipment.get(id=int(call.data.split('-')[1]))
    field_name = call.data.split('/')[1].split('-')[0]
    if field_name == 'type':
        bot.edit_message_text(chat_id=user.telegram_id,
                              message_id=call.message.message_id,
                              text='Введите новое наименование типа')
        User.update(status=f'edit-type_{equipment.id}').where(User.id == user.id).execute()
    elif field_name == 'mark':
        bot.edit_message_text(chat_id=user.telegram_id,
                              message_id=call.message.message_id,
                              text='Введите новое наименование марки')
        User.update(status=f'edit-mark_{equipment.id}').where(User.id == user.id).execute()
    elif field_name == 'model':
        bot.edit_message_text(chat_id=user.telegram_id,
                              message_id=call.message.message_id,
                              text='Введите новое наименование модели')
        User.update(status=f'edit-model_{equipment.id}').where(User.id == user.id).execute()
    elif field_name == 'serial':
        bot.edit_message_text(chat_id=user.telegram_id,
                              message_id=call.message.message_id,
                              text='Введите новый серийный номер')
        User.update(status=f'edit-serial_{equipment.id}').where(User.id == user.id).execute()
예제 #3
0
def add_group(call):
    if not is_person(call.message.chat):
        return
    try:
        user = User.get(telegram_id=call.message.chat.id)
        if user not in User.select(User).join(Links).join(Group).where(Group.group_name == 'Admins'):
            raise Exception("Unauthorized user")
    except Exception:
        bot.send_message(text=get_unauthorized_user_start_message(), chat_id=call.message.chat.id)
        return
    User.update(status='Adding group').where(User.id == user.id).execute()
    bot.edit_message_text(text='Введите название новой группы пользователей',
                          chat_id=call.message.chat.id,
                          message_id=call.message.message_id)
예제 #4
0
def group(call):
    if not is_person(call.message.chat):
        return
    try:
        user = User.get(telegram_id=call.message.chat.id)
        if user not in User.select(User).join(Links).join(Group).where(Group.group_name == 'Admins'):
            raise Exception("Unauthorized user")
    except Exception:
        bot.send_message(text=get_unauthorized_user_start_message(), chat_id=call.message.chat.id)
        return
    group_to_remove_from = Group.get(id=int(call.data.split('_')[1]))
    user_to_be_removed_from_group = User.get(id=int(call.data.split('_')[2]))
    Links.get(user=user_to_be_removed_from_group,
              group=group_to_remove_from).delete_instance()
    logger.info(
        f'{user.first_name} {user.last_name} removed user {user_to_be_removed_from_group.first_name} {user_to_be_removed_from_group.last_name} from group {group_to_remove_from.group_name}')
    bot.send_message(chat_id=user_to_be_removed_from_group.telegram_id,
                     text=f'Вы удалены из группы {group_to_remove_from.group_name}',
                     reply_markup=get_start_keyboard(user))
    bot.send_message(chat_id=user_to_be_removed_from_group.telegram_id,
                     text='Список доступных Вам функций',
                     reply_markup=get_main_inline_keyboard(user_to_be_removed_from_group))
    if Group.select(Group).join(Links).join(User).where(User.id == user_to_be_removed_from_group.id).count() == 0:
        Links.get_or_create(user=user_to_be_removed_from_group,
                            group=Group.get(group_name='Unauthorized'))
        bot.send_message(chat_id=user_to_be_removed_from_group.telegram_id,
                         text='Вы были удалены из всех групп. Получите авторизацию у администратора, чтобы продолжить пользоваться этим ботом!',
                         reply_markup=None)
    bot.edit_message_text(message_id=call.message.message_id,
                          chat_id=call.message.chat.id,
                          text=user_info(user_to_be_removed_from_group),
                          reply_markup=keyboard_to_chose_users_groups(user_to_be_removed_from_group))
예제 #5
0
def check_equipment_zavhoz(call):
    if not is_person(call.message.chat):
        return
    try:
        user = User.get(telegram_id=call.message.chat.id)
        if user not in User.select(User).join(Links).join(Group).where(Group.group_name == 'Zavhoz'):
            raise Exception("Unauthorized user")
    except Exception:
        logger.info(
            f'User {user.first_name} {user.last_name} tried to check equipment, but this user is not in Zavhoz group!')
        bot.send_message(text='У Вас нет доступа к этой функции', chat_id=call.message.chat.id)
        return
    bot.send_message(chat_id=user.telegram_id,
                     text='Введите инвентарный номер оборудования')
    User.update(status='zavhoz_check_equipment').where(User.telegram_id == user.telegram_id).execute()
예제 #6
0
def show_group_list(call):
    if not is_person(call.message.chat):
        return
    try:
        user = User.get(telegram_id=call.message.chat.id)
        if user not in User.select(User).join(Links).join(Group).where(Group.group_name == 'Admins'):
            raise Exception("Unauthorized user")
    except Exception:
        bot.send_message(text=get_unauthorized_user_start_message(), chat_id=call.message.chat.id)
        return
    groups = Group.select()
    return_str = 'Список групп:\n'
    for group in groups:
        return_str += group.group_name + '\n'
    bot.edit_message_text(text=return_str, chat_id=call.message.chat.id, message_id=call.message.message_id)
예제 #7
0
def groups_functions(message: Message):
    if not is_person(message.chat):
        return
    try:
        user = User.get(telegram_id=message.chat.id)
        if user not in User.select(User).join(Links).join(Group).where(
                Group.group_name == 'Admins'):
            raise Exception("Unauthorized user")
    except Exception:
        bot.send_message(text=get_unauthorized_user_start_message(),
                         chat_id=message.chat.id)
        return
    bot.send_message(text='Выберите действие',
                     chat_id=message.chat.id,
                     reply_markup=groups_keyboard)
예제 #8
0
def get_help(message: Message):
    if not is_person(message.chat):
        return
    logger.info('ask for help!')
    try:
        user = User.get(telegram_id=str(message.chat.id))
        if user in User.select(User).join(Links).join(Group).where(
                Group.group_name == 'Unauthorized'):
            raise Exception("Unauthorized user")
    except Exception:
        bot.send_message(text=f"""Возникли вопросы? 
Напиши администратору бота (@DzenBots)""",
                         chat_id=message.chat.id)
        return
    bot.send_message(text=get_user_help_message(user), chat_id=message.chat.id)
예제 #9
0
def show_groups_for_remove(call):
    if not is_person(call.message.chat):
        return
    try:
        user = User.get(telegram_id=call.message.chat.id)
        if user not in User.select(User).join(Links).join(Group).where(Group.group_name == 'Admins'):
            raise Exception("Unauthorized user")
    except Exception:
        bot.send_message(text=get_unauthorized_user_start_message(), chat_id=call.message.chat.id)
        return
    User.update(status=f'rm_group').where(User.id == user.id).execute()
    bot.edit_message_text(text='Выберите группу для удаления',
                          chat_id=call.message.chat.id,
                          message_id=call.message.message_id,
                          reply_markup=get_rm_group_keyboard())
예제 #10
0
def go_main(message: Message):
    if not is_person(message.chat):
        return
    try:
        user = User.get(telegram_id=message.chat.id)
        if user in User.select(User).join(Links).join(Group).where(
                Group.group_name == 'Unauthorized'):
            raise Exception("Unauthorized user")
    except Exception:
        bot.send_message(text=get_unauthorized_user_start_message(),
                         chat_id=message.chat.id)
        return
    bot.send_message(text="Список доступных Вам функций:",
                     chat_id=message.chat.id,
                     reply_markup=get_main_inline_keyboard(user))
예제 #11
0
def start_moving_equipment(call):
    if not is_person(call.message.chat):
        return
    try:
        user = User.get(telegram_id=call.message.chat.id)
        if user not in User.select(User).join(Links).join(Group).where(Group.group_name == 'Inventarization'):
            raise Exception("Unauthorized user")
    except Exception:
        logger.info(
            f'User {user.first_name} {user.last_name} tried to use inventarization functions, but this user is not in Inventarization group!')
        bot.send_message(text='У Вас нет доступа к этой функции', chat_id=call.message.chat.id)
        return
    equipment = Equipment.get(id=int(call.data.split('-')[1]))
    bot.send_message(chat_id=user.telegram_id,
                     text='Выберите корпус для перемещения',
                     reply_markup=get_kurpus_keyboard_for_create_movement(equipment))
예제 #12
0
def main_serial_search(call):
    if not is_person(call.message.chat):
        return
    try:
        user = User.get(telegram_id=call.message.chat.id)
        if user not in User.select(User).join(Links).join(Group).where(Group.group_name == 'Inventarization'):
            raise Exception("Unauthorized user")
    except Exception:
        logger.info(
            f'User {user.first_name} {user.last_name} tried to use inventarization functions, but this user is not in Inventarization group!')
        bot.send_message(text='У Вас нет доступа к этой функции', chat_id=call.message.chat.id)
        return
    bot.edit_message_text(chat_id=user.telegram_id,
                          message_id=call.message.message_id,
                          text='Введите серийный номер')
    User.update(status='serial_search').where(User.id == user.id).execute()
예제 #13
0
def number_phone_search(call):
    if not is_person(call.message.chat):
        return
    try:
        user = User.get(telegram_id=call.message.chat.id)
        if user not in User.select(User).join(Links).join(Group).where(Group.group_name == 'Users'):
            raise Exception("Unauthorized user")
    except Exception:
        logger.info(
            f'User {user.first_name} {user.last_name} is not authorized!')
        bot.send_message(text='У Вас нет доступа к этой функции', chat_id=call.message.chat.id)
        return
    User.update(status='phone_search/number').where(User.telegram_id == user.telegram_id).execute()
    bot.edit_message_text(chat_id=call.message.chat.id,
                          message_id=call.message.message_id,
                          text='Введите номер телефона искомого человека, начиная с +7')
예제 #14
0
def show_all_users(message: Message):
    if not is_person(message.chat):
        return
    try:
        user = User.get(telegram_id=message.chat.id)
        if user not in User.select(User).join(Links).join(Group).where(
                Group.group_name == 'Admins'):
            raise Exception("Unauthorized user")
    except Exception:
        bot.send_message(text=get_unauthorized_user_start_message(),
                         chat_id=message.chat.id)
        return
    for user in User.select():
        bot.send_message(text=user_info(user),
                         chat_id=message.chat.id,
                         reply_markup=keyboard_to_chose_users_groups(user))
예제 #15
0
def start_movement(call):
    if not is_person(call.message.chat):
        return
    try:
        user = User.get(telegram_id=call.message.chat.id)
        if user not in User.select(User).join(Links).join(Group).where(Group.group_name == 'Inventarization'):
            raise Exception("Unauthorized user")
    except Exception:
        logger.info(
            f'User {user.first_name} {user.last_name} tried to use inventarization functions, but this user is not in Inventarization group!')
        bot.send_message(text='У Вас нет доступа к этой функции', chat_id=call.message.chat.id)
        return
    bot.edit_message_text(chat_id=user.telegram_id,
                          text='Параметр поиска оборудования:',
                          reply_markup=main_movement_keyboard,
                          message_id=call.message.message_id)
    User.update(status='main_search').where(User.id == user.id).execute()
예제 #16
0
def start_edit_equipment(call):
    if not is_person(call.message.chat):
        return
    try:
        user = User.get(telegram_id=call.message.chat.id)
        if user not in User.select(User).join(Links).join(Group).where(Group.group_name == 'Inventarization'):
            raise Exception("Unauthorized user")
    except Exception:
        logger.info(
            f'User {user.first_name} {user.last_name} tried to use inventarization functions, but this user is not in Inventarization group!')
        bot.send_message(text='У Вас нет доступа к этой функции', chat_id=call.message.chat.id)
        return
    equipment = Equipment.get(id=int(call.data.split('-')[1]))
    bot.send_message(chat_id=user.telegram_id,
                     text='Выберите параметр для редактирования',
                     reply_markup=get_edit_equipment_keyboard(equipment))
    User.update(status='choose parameter for edit').where(User.id == user.id).execute()
예제 #17
0
def start_phone_search(call):
    if not is_person(call.message.chat):
        return
    try:
        user = User.get(telegram_id=call.message.chat.id)
        if user not in User.select(User).join(Links).join(Group).where(Group.group_name == 'Users'):
            raise Exception("Unauthorized user")
    except Exception:
        logger.info(
            f'User {user.first_name} {user.last_name} is not authorized!')
        bot.send_message(text='У Вас нет доступа к этой функции', chat_id=call.message.chat.id)
        return
    User.update(status='main_phone_search').where(User.telegram_id == user.telegram_id).execute()
    bot.edit_message_text(chat_id=call.message.chat.id,
                          message_id=call.message.message_id,
                          text='Выберите параметр поиска',
                          reply_markup=phone_serach_parameters)
예제 #18
0
def main_edit_person(call):
    if not is_person(call.message.chat):
        return
    try:
        user = User.get(telegram_id=call.message.chat.id)
        if user not in User.select(User).join(Links).join(Group).where(Group.group_name == 'PhonesAdmin'):
            raise Exception("Unauthorized user")
    except Exception:
        logger.info(
            f'User {user.first_name} {user.last_name} is not authorized!')
        bot.send_message(text='У Вас нет доступа к этой функции', chat_id=call.message.chat.id)
        return
    person = Person.get(id=call.data.split('_')[1])
    User.update(status='Main_change_person_info').where(User.id == user.id).execute()
    bot.send_message(chat_id=call.message.chat.id,
                     text='Что редактируем?',
                     reply_markup=get_change_person_reply_markup(person))
예제 #19
0
def start_moving_equipment(call):
    if not is_person(call.message.chat):
        return
    try:
        user = User.get(telegram_id=call.message.chat.id)
        if user not in User.select(User).join(Links).join(Group).where(Group.group_name == 'Inventarization'):
            raise Exception("Unauthorized user")
    except Exception:
        logger.info(
            f'User {user.first_name} {user.last_name} tried to use inventarization functions, but this user is not in Inventarization group!')
        bot.send_message(text='У Вас нет доступа к этой функции', chat_id=call.message.chat.id)
        return
    campus = call.data.split('-')[1].split('UK')[1]
    equipment = Equipment.get(id=int(call.data.split('-')[2]))
    bot.edit_message_text(message_id=call.message.message_id,
                          chat_id=user.telegram_id,
                          text='Введите кабинет для перемещения')
    User.update(status=f'create_movement/UK-{campus}/id-{equipment.id}').where(User.id == user.id).execute()
예제 #20
0
def main_edit_person(call):
    if not is_person(call.message.chat):
        return
    try:
        user = User.get(telegram_id=call.message.chat.id)
        if user not in User.select(User).join(Links).join(Group).where(Group.group_name == 'PhonesAdmin'):
            raise Exception("Unauthorized user")
    except Exception:
        logger.info(
            f'User {user.first_name} {user.last_name} is not authorized!')
        bot.send_message(text='У Вас нет доступа к этой функции', chat_id=call.message.chat.id)
        return
    edit_parameter = call.data.split('-')[1].split('_')[0]
    person = Person.get(id=call.data.split('-')[1].split('_')[1])
    User.update(status=f'Edit_person_info:{edit_parameter}_{person.id}').where(User.id == user.id).execute()
    if edit_parameter == 'surname':
        bot.edit_message_text(chat_id=call.message.chat.id,
                              message_id=call.message.message_id,
                              text='Введите новую фамилию')
    elif edit_parameter == 'name':
        bot.edit_message_text(chat_id=call.message.chat.id,
                              message_id=call.message.message_id,
                              text='Введите новое имя')
    elif edit_parameter == 'patronymic':
        bot.edit_message_text(chat_id=call.message.chat.id,
                              message_id=call.message.message_id,
                              text='Введите новое отчество')
    elif edit_parameter == 'phone':
        bot.edit_message_text(chat_id=call.message.chat.id,
                              message_id=call.message.message_id,
                              text='Введите новый номер телефона')
    elif edit_parameter == 'photo':
        bot.edit_message_text(chat_id=call.message.chat.id,
                              message_id=call.message.message_id,
                              text='Пришлите новую фотографию')
    elif edit_parameter == 'email':
        bot.edit_message_text(chat_id=call.message.chat.id,
                              message_id=call.message.message_id,
                              text='Введите новый e-mail')
    elif edit_parameter == 'position':
        bot.edit_message_text(chat_id=call.message.chat.id,
                              message_id=call.message.message_id,
                              text='Введите новую должность')
예제 #21
0
def number_phone_search(call):
    if not is_person(call.message.chat):
        return
    try:
        user = User.get(telegram_id=call.message.chat.id)
        if user not in User.select(User).join(Links).join(Group).where(Group.group_name == 'PhonesAdmin'):
            raise Exception("Unauthorized user")
    except Exception:
        logger.info(
            f'User {user.first_name} {user.last_name} is not authorized!')
        bot.send_message(text='У Вас нет доступа к этой функции', chat_id=call.message.chat.id)
        return
    person = Person.get(id=int(call.data.split('_')[1]))
    Person.update(actual='True' if person.actual == 'False' else 'False').where(Person.id == person.id).execute()
    person = Person.get(id=int(call.data.split('_')[1]))
    bot.edit_message_text(chat_id=call.message.chat.id,
                          text=get_person_info(person),
                          message_id=call.message.message_id,
                          reply_markup=get_contact_reply_markup(user, person))
예제 #22
0
def group(call):
    if not is_person(call.message.chat):
        return
    try:
        user = User.get(telegram_id=call.message.chat.id)
        if user not in User.select(User).join(Links).join(Group).where(Group.group_name == 'Admins'):
            raise Exception("Unauthorized user")
    except Exception:
        bot.send_message(text=get_unauthorized_user_start_message(), chat_id=call.message.chat.id)
        return
    group_to_add_to = Group.get(id=int(call.data.split('_')[1]))
    user_to_be_entered_to_group = User.get(id=int(call.data.split('_')[2]))
    Links.get_or_create(user=user_to_be_entered_to_group,
                        group=group_to_add_to)
    if user_to_be_entered_to_group in User.select(User).join(Links).join(Group).where(
            Group.group_name == 'Unauthorized'):
        temp_link = Links.get(user=user_to_be_entered_to_group,
                              group=Group.get(group_name='Unauthorized'))
        temp_link.delete_instance()
    logger.info(
        f'{user.first_name} {user.last_name} added user {user_to_be_entered_to_group.first_name} {user_to_be_entered_to_group.last_name} to group {group_to_add_to.group_name}')
    bot.send_message(chat_id=user_to_be_entered_to_group.telegram_id,
                     text=f'Вы авторизованы и добавлены в группу {group_to_add_to.group_name}',
                     reply_markup=get_start_keyboard(user))
    bot.send_message(chat_id=user_to_be_entered_to_group.telegram_id,
                     text='Список доступных Вам функций',
                     reply_markup=get_main_inline_keyboard(user_to_be_entered_to_group))
    bot.edit_message_text(message_id=call.message.message_id,
                          chat_id=call.message.chat.id,
                          text=user_info(user_to_be_entered_to_group),
                          reply_markup=keyboard_to_chose_users_groups(user_to_be_entered_to_group))
예제 #23
0
def get_start(message: Message):
    if not is_person(message.chat):
        return
    try:
        user = User.get(telegram_id=str(message.chat.id))
        if user in User.select(User).join(Links).join(Group).where(
                Group.group_name == 'Unauthorized'):
            raise Exception("Unauthorized user")
    except Exception:
        logger.info('Unauthorized user')
        user, created = User.get_or_create(
            telegram_id=message.chat.id,
            first_name=message.from_user.first_name
            if message.from_user.first_name is not None else '',
            last_name=message.from_user.last_name
            if message.from_user.last_name is not None else '',
            status='waiting for access')
        unauth_group, created = Group.get_or_create(group_name='Unauthorized')
        Links.create(user=user, group=unauth_group)

        bot.send_message(text=get_unauthorized_user_start_message(),
                         chat_id=message.chat.id)
        for admin in User.select(User).join(Links).join(Group).where(
                Group.group_name == 'Admins'):
            bot.send_message(text=get_new_unauthorized_user_message(user),
                             chat_id=admin.telegram_id,
                             reply_markup=keyboard_to_chose_users_groups(user))
        return
    bot.send_message(
        text=f'С возвращением, {user.first_name} {user.last_name}',
        chat_id=message.chat.id,
        reply_markup=get_start_keyboard(user))
예제 #24
0
def remove_group(call):
    if not is_person(call.message.chat):
        return
    try:
        user = User.get(telegram_id=call.message.chat.id)
        if user not in User.select(User).join(Links).join(Group).where(Group.group_name == 'Admins'):
            raise Exception("Unauthorized user")
    except Exception:
        bot.send_message(text=get_unauthorized_user_start_message(), chat_id=call.message.chat.id)
        return

    links = Links.select(Links).join(Group).where(Group.id == int(call.data.split('_')[1]))
    for link in links:
        link.delete_instance()
    logger.info(f"remove group - {Group.get(id=int(call.data.split('_')[1])).group_name}")
    group = Group.get(id=int(call.data.split('_')[1]))
    group.delete_instance()
    groups = Group.select()
    return_str = 'Список групп:\n'
    for group in groups:
        return_str += group.group_name + '\n'
    bot.edit_message_text(text=return_str, chat_id=call.message.chat.id, message_id=call.message.message_id)
    User.update(status='').where(User.id == user.id).execute()
예제 #25
0
def add_user_to_group(call):
    if not is_person(call.message.chat):
        return
    try:
        user = User.get(telegram_id=call.message.chat.id)
        if user not in User.select(User).join(Links).join(Group).where(Group.group_name == 'Admins'):
            raise Exception("Unauthorized user")
    except Exception:
        bot.send_message(text=get_unauthorized_user_start_message(), chat_id=call.message.chat.id)
        return
    temp_user = User.get(User.id == int(call.data.split('_')[1]))
    temp_user_groups = Group.select(Group).join(Links).where(Links.user == temp_user.id)
    all_groups = Group.select()
    reply_keyboard = InlineKeyboardMarkup()
    for group in all_groups:
        if group not in temp_user_groups:
            reply_keyboard.add(
                InlineKeyboardButton(text=group.group_name,
                                     callback_data=f'group-to-add-user_{group.id}_{temp_user.id}'))
    bot.edit_message_text(
        text=f'В какую группу необходимо добавить пользователя {temp_user.first_name} {temp_user.last_name}',
        chat_id=call.message.chat.id,
        message_id=call.message.message_id,
        reply_markup=reply_keyboard)
예제 #26
0
def receive_photo(message: Message):
    if not is_person(message.chat):
        return
    try:
        user = User.get(telegram_id=message.chat.id)
        if user in User.select(User).join(Links).join(Group).where(
                Group.group_name == 'Unauthorized'):
            raise Exception("Unauthorized user")
    except Exception:
        bot.send_message(text=get_unauthorized_user_start_message(),
                         chat_id=message.chat.id)
        return
    if user.status.split(':')[0] == 'Edit_person_info':
        if user not in User.select(User).join(Links).join(Group).where(
                Group.group_name == 'PhonesAdmin'):
            bot.send_message(chat_id=user.telegram_id,
                             text='У Вас нет доступа к этой функции')
            logger.info(
                f'User {user.first_name} {user.last_name} had unsupported status!'
            )
        else:
            edit_parameter = user.status.split(':')[1].split('_')[0]
            if not edit_parameter == 'photo':
                return
            else:
                photo_id = message.photo[0].file_id
                person = Person.get(id=user.status.split(':')[1].split('_')[1])
                Person.update(photo=f'{str(photo_id)}').where(
                    Person.id == person.id).execute()
                User.update(status='').where(User.id == user.id).execute()
                if not person.photo == '':
                    bot.send_photo(chat_id=message.chat.id,
                                   photo=person.photo,
                                   caption=get_person_info(person),
                                   reply_markup=get_contact_reply_markup(
                                       user, person))
                else:
                    bot.send_message(chat_id=message.chat.id,
                                     text=get_person_info(person),
                                     reply_markup=get_contact_reply_markup(
                                         user, person))
                bot.send_contact(
                    chat_id=message.chat.id,
                    phone_number=person.phone,
                    first_name=person.surname,
                    last_name=f"{person.name} {person.patronymic}")
예제 #27
0
def plain_text(message: Message):
    if not is_person(message.chat):
        return
    try:
        user = User.get(telegram_id=message.chat.id)
        if user in User.select(User).join(Links).join(Group).where(
                Group.group_name == 'Unauthorized'):
            raise Exception("Unauthorized user")
    except Exception:
        bot.send_message(text=get_unauthorized_user_start_message(),
                         chat_id=message.chat.id)
        return

    if user.status == 'Adding group':
        if user in User.select(User).join(Links).join(Group).where(
                Group.group_name == 'Admins'):
            group, created = Group.get_or_create(group_name=message.text)
            bot.send_message(chat_id=message.chat.id, text='Группа добавлена')
            groups = Group.select()
            return_str = 'Список групп:\n'
            for group in groups:
                return_str += group.group_name + '\n'
            bot.send_message(text=return_str, chat_id=message.chat.id)
            logger.info(
                f'Admin {user.first_name} {user.last_name} add new group - {message.text}'
            )

    elif user.status == 'zavhoz_check_equipment':
        if user not in User.select(User).join(Links).join(Group).where(
                Group.group_name == 'Zavhoz'):
            bot.send_message(chat_id=user.telegram_id,
                             text='У Вас нет доступа к этой функции')
            logger.info(
                f'User {user.first_name} {user.last_name} had unsupported status!'
            )
        else:
            looking_invent_num = message.text
            try:
                Equipment.get(invent_num=looking_invent_num)
            except Exception as e:
                logger.info(
                    f'User {user.first_name} {user.last_name} looking for unexisting equipment with {looking_invent_num} invent number'
                )
                bot.send_message(
                    chat_id=user.telegram_id,
                    text=
                    f'Оборудование с инвентарным номером {looking_invent_num} не стоит на балансе'
                )
                User.update(status='').where(User.id == user.id).execute()
                return
            found_equipments = Equipment.select().where(
                Equipment.invent_num == looking_invent_num)
            for item in found_equipments:
                bot.send_message(chat_id=user.telegram_id,
                                 text=equipment_info(equipment=item))
            logger.info(
                f'User {user.first_name} {user.last_name} looked info about {looking_invent_num} invent number'
            )

    elif user.status == 'invent_search':
        if user not in User.select(User).join(Links).join(Group).where(
                Group.group_name == 'Inventarization'):
            bot.send_message(chat_id=user.telegram_id,
                             text='У Вас нет доступа к этой функции')
            logger.info(
                f'User {user.first_name} {user.last_name} had unsupported status!'
            )
        else:
            invent_num = message.text
            found_equipments = Equipment.select().where(
                Equipment.invent_num == invent_num)
            if found_equipments.count() == 0:
                bot.send_message(
                    chat_id=user.telegram_id,
                    text=
                    f'Оборудование с инвентарным номером {invent_num} не стоит на балансе'
                )
            else:
                for equipment in found_equipments:
                    bot.send_message(
                        chat_id=user.telegram_id,
                        text=equipment_info(equipment),
                        reply_markup=get_equipment_reply_markup(equipment))

    elif user.status == 'serial_search':
        if user not in User.select(User).join(Links).join(Group).where(
                Group.group_name == 'Inventarization'):
            bot.send_message(chat_id=user.telegram_id,
                             text='У Вас нет доступа к этой функции')
            logger.info(
                f'User {user.first_name} {user.last_name} had unsupported status!'
            )
        else:
            serial_num = message.text
            found_equipments = Equipment.select().where(
                Equipment.serial_num == serial_num)
            if found_equipments.count() == 0:
                bot.send_message(
                    chat_id=user.telegram_id,
                    text=
                    f'Оборудование с серийным номером {serial_num} не стоит на балансе'
                )
            else:
                for equipment in found_equipments:
                    bot.send_message(
                        chat_id=user.telegram_id,
                        text=equipment_info(equipment),
                        reply_markup=get_equipment_reply_markup(equipment))

    elif user.status.split('_')[0] == 'edit-type':
        if user not in User.select(User).join(Links).join(Group).where(
                Group.group_name == 'Inventarization'):
            bot.send_message(chat_id=user.telegram_id,
                             text='У Вас нет доступа к этой функции')
            logger.info(
                f'User {user.first_name} {user.last_name} had unsupported status!'
            )
        else:
            equipment = Equipment.get(id=user.status.split('_')[1])
            Equipment.update(type=message.text).where(
                Equipment.id == equipment.id).execute()
            equipment = Equipment.get(id=user.status.split('_')[1])
            bot.send_message(
                chat_id=user.telegram_id,
                text=equipment_info(equipment),
                reply_markup=get_equipment_reply_markup(equipment))
            send_equipment_info_to_google_sheet(equipment)
            logger.info(
                f'User {user.first_name} {user.last_name} edit equipment ID {equipment.it_id}: new type is {equipment.type}'
            )
    elif user.status.split('_')[0] == 'edit-mark':
        if user not in User.select(User).join(Links).join(Group).where(
                Group.group_name == 'Inventarization'):
            bot.send_message(chat_id=user.telegram_id,
                             text='У Вас нет доступа к этой функции')
            logger.info(
                f'User {user.first_name} {user.last_name} had unsupported status!'
            )
        else:
            equipment = Equipment.get(id=user.status.split('_')[1])
            Equipment.update(mark=message.text).where(
                Equipment.id == equipment.id).execute()
            equipment = Equipment.get(id=user.status.split('_')[1])
            bot.send_message(
                chat_id=user.telegram_id,
                text=equipment_info(equipment),
                reply_markup=get_equipment_reply_markup(equipment))
            send_equipment_info_to_google_sheet(equipment)
            logger.info(
                f'User {user.first_name} {user.last_name} edit equipment ID {equipment.it_id}: new mark is {equipment.mark}'
            )
    elif user.status.split('_')[0] == 'edit-model':
        if user not in User.select(User).join(Links).join(Group).where(
                Group.group_name == 'Inventarization'):
            bot.send_message(chat_id=user.telegram_id,
                             text='У Вас нет доступа к этой функции')
            logger.info(
                f'User {user.first_name} {user.last_name} had unsupported status!'
            )
        else:
            equipment = Equipment.get(id=user.status.split('_')[1])
            Equipment.update(model=message.text).where(
                Equipment.id == equipment.id).execute()
            equipment = Equipment.get(id=user.status.split('_')[1])
            bot.send_message(
                chat_id=user.telegram_id,
                text=equipment_info(equipment),
                reply_markup=get_equipment_reply_markup(equipment))
            send_equipment_info_to_google_sheet(equipment)
            logger.info(
                f'User {user.first_name} {user.last_name} edit equipment ID {equipment.it_id}: new model is {equipment.model}'
            )
    elif user.status.split('_')[0] == 'edit-serial':
        if user not in User.select(User).join(Links).join(Group).where(
                Group.group_name == 'Inventarization'):
            bot.send_message(chat_id=user.telegram_id,
                             text='У Вас нет доступа к этой функции')
            logger.info(
                f'User {user.first_name} {user.last_name} had unsupported status!'
            )
        else:
            equipment = Equipment.get(id=user.status.split('_')[1])
            Equipment.update(serial_num=message.text).where(
                Equipment.id == equipment.id).execute()
            equipment = Equipment.get(id=user.status.split('_')[1])
            bot.send_message(
                chat_id=user.telegram_id,
                text=equipment_info(equipment),
                reply_markup=get_equipment_reply_markup(equipment))
            send_equipment_info_to_google_sheet(equipment)
            logger.info(
                f'User {user.first_name} {user.last_name} edit equipment ID {equipment.it_id}: new serial num is {equipment.serial_num}'
            )
    elif user.status.split('/')[0] == 'create_movement':
        if user not in User.select(User).join(Links).join(Group).where(
                Group.group_name == 'Inventarization'):
            bot.send_message(chat_id=user.telegram_id,
                             text='У Вас нет доступа к этой функции')
            logger.info(
                f'User {user.first_name} {user.last_name} had unsupported status!'
            )
        else:
            campus = user.status.split('/')[1].split('-')[1]
            room = message.text
            equipment = Equipment.get(
                id=user.status.split('/')[2].split('-')[1])
            movement = Movement.create(
                equipment=equipment,
                campus=f'УК {campus}'
                if not campus == 'spisanie' else 'Списание',
                room=room)
            equipment = Equipment.get(
                id=user.status.split('/')[2].split('-')[1])
            bot.send_message(
                chat_id=user.telegram_id,
                text=equipment_info(equipment),
                reply_markup=get_equipment_reply_markup(equipment))
            send_movement_to_google_sheet(equipment, movement)
            logger.info(
                f'User {user.first_name} {user.last_name} move equipment ID {equipment.it_id}: new location is {movement.campus} {movement.room}'
            )
    elif user.status.split(':')[0] == 'Edit_person_info':
        if user not in User.select(User).join(Links).join(Group).where(
                Group.group_name == 'PhonesAdmin'):
            bot.send_message(chat_id=user.telegram_id,
                             text='У Вас нет доступа к этой функции')
            logger.info(
                f'User {user.first_name} {user.last_name} had unsupported status!'
            )
        else:
            edit_parameter = user.status.split(':')[1].split('_')[0]
            person = Person.get(id=user.status.split(':')[1].split('_')[1])
            if edit_parameter == 'surname':
                Person.update(surname=message.text).where(
                    Person.id == person.id).execute()
            elif edit_parameter == 'name':
                Person.update(name=message.text).where(
                    Person.id == person.id).execute()
            elif edit_parameter == 'patronymic':
                Person.update(patronymic=message.text).where(
                    Person.id == person.id).execute()
            elif edit_parameter == 'phone':
                Person.update(phone=message.text).where(
                    Person.id == person.id).execute()
            elif edit_parameter == 'position':
                Person.update(position=message.text).where(
                    Person.id == person.id).execute()
            elif edit_parameter == 'email':
                Person.update(email=message.text).where(
                    Person.id == person.id).execute()
            elif edit_parameter == 'photo':
                bot.send_message(
                    chat_id=message.chat.id,
                    text=
                    'Для редактирования фото сотрудника необходимо прислать фото, а не текст!'
                )
                return
            person = Person.get(id=user.status.split(':')[1].split('_')[1])
            update_person_info_in_google(person)
            if not person.photo == '':
                bot.send_photo(chat_id=message.chat.id,
                               photo=person.photo,
                               caption=get_person_info(person),
                               reply_markup=get_contact_reply_markup(
                                   user, person))
            else:
                bot.send_message(chat_id=message.chat.id,
                                 text=get_person_info(person),
                                 reply_markup=get_contact_reply_markup(
                                     user, person))
            bot.send_contact(chat_id=message.chat.id,
                             phone_number=person.phone,
                             first_name=person.surname,
                             last_name=f"{person.name} {person.patronymic}")
    elif user.status.split('/')[0] == 'phone_search':
        search_parameter = user.status.split('/')[1]
        template = message.text
        founded_persons = None
        if search_parameter == 'surname':
            if user not in User.select(User).join(Links).join(Group).where(
                    Group.group_name == 'PhonesAdmin'):
                founded_persons = Person.select().where(
                    Person.surname == template).where(Person.actual == 'True')
            else:
                founded_persons = Person.select().where(
                    Person.surname == template)
        elif search_parameter == 'name':
            if user not in User.select(User).join(Links).join(Group).where(
                    Group.group_name == 'PhonesAdmin'):
                founded_persons = Person.select().where(
                    Person.name == template.split(' ')[0]
                    and Person.patronymic == template.split(' ')[1]).where(
                        Person.actual == 'True')
            else:
                founded_persons = Person.select().where(
                    Person.name == template.split(' ')[0]
                    and Person.patronymic == template.split(' ')[1])
        elif search_parameter == 'number':
            if user not in User.select(User).join(Links).join(Group).where(
                    Group.group_name == 'PhonesAdmin'):
                founded_persons = Person.select().where(
                    Person.phone == template).where(Person.actual == 'True')
            else:
                founded_persons = Person.select().where(
                    Person.phone == template)
        if user not in User.select(User).join(Links).join(Group).where(
                Group.group_name == 'PhonesAdmin'):
            founded_persons = founded_persons.where(Person.actual == 'True')
        if founded_persons.count() > 0:
            for person in founded_persons:
                if not person.photo == '':
                    bot.send_photo(chat_id=message.chat.id,
                                   photo=person.photo,
                                   caption=get_person_info(person),
                                   reply_markup=get_contact_reply_markup(
                                       user, person))
                else:
                    bot.send_message(chat_id=message.chat.id,
                                     text=get_person_info(person),
                                     reply_markup=get_contact_reply_markup(
                                         user, person))
                bot.send_contact(
                    chat_id=message.chat.id,
                    phone_number=person.phone,
                    first_name=person.surname,
                    last_name=f"{person.name} {person.patronymic}")
        else:
            bot.send_message(chat_id=message.chat.id,
                             text='Я никого не нашел по введенным Вами данным')
    else:
        bot.send_message(
            chat_id=message.chat.id,
            text=
            'Воспользуйтесь кнопками или командами (/help) для выбора функции')
    User.update(status='').where(User.id == user.id).execute()
예제 #28
0
def google_update(message: Message):
    if not is_person(message.chat):
        return
    try:
        user = User.get(telegram_id=message.chat.id)
        if user not in User.select(User).join(Links).join(Group).where(
                Group.group_name == 'Admins'):
            raise Exception("Unauthorized user")
    except Exception:
        bot.send_message(text=get_unauthorized_user_start_message(),
                         chat_id=message.chat.id)
        return
    cur_equipments = Equipment.select()
    cur_movement = Movement.select()
    gs = GoogleSync()
    equipments_from_google = gs.read_range(
        list_name='Список оборудования',
        range_in_list=f'A{cur_equipments.count() + 2}:G')
    movements_from_google = gs.read_range(
        list_name='Перемещение оборудования',
        range_in_list=f'A{cur_movement.count() + 2}:C')
    if equipments_from_google is not None:
        if len(equipments_from_google) > 0:
            for item in equipments_from_google:
                if len(item) < 7:
                    for j in range(len(item), 7):
                        item.append('')
                Equipment.create(it_id=item[0],
                                 pos_in_buh=item[1],
                                 invent_num=item[2],
                                 type=item[3],
                                 mark=item[4],
                                 model=item[5],
                                 serial_num=item[6])
    if movements_from_google is not None:
        if len(movements_from_google) > 0:
            for item in movements_from_google:
                if len(item) < 7:
                    for j in range(len(item), 7):
                        item.append('')
                if item[0] == '':
                    continue
                Movement.create(equipment=Equipment.get(it_id=item[0]),
                                campus=item[1],
                                room=item[2])
    # cur_persons_count = Person.select().count()
    # gs_phones = GoogleSync(spreadsheet_id=PHONE_SPREADSHEET_ID)
    # persons_from_google = gs_phones.read_range(list_name='List1',
    #                                            range_in_list=f'A{cur_persons_count + 2}:F')
    # for person in persons_from_google:
    #     if len(person) < 6:
    #         for j in range(len(person), 6):
    #             person.append('')
    #     Person.get_or_create(name=person[1],
    #                          surname=person[0],
    #                          patronymic=person[2],
    #                          defaults={
    #                              'position': person[3],
    #                              'phone': f'+{person[4]}',
    #                              'email': person[5],
    #                              'photo': '',
    #                              'actual': 'True'
    #                          })
    bot.send_message(chat_id=user.telegram_id, text='Данные получены')