Exemple #1
0
def days_in_calendar(message, quantity_days):
    days = ['0' + str(x) if x in [1, 2, 3, 4, 5, 6, 7, 8, 9] else str(x) for x in range(1, quantity_days + 1)]
    inline_button_choice_day = [types.InlineKeyboardButton(text=f'{day}', callback_data=f'{day}') for
                                day in days]
    inline_markup_choice_day = types.InlineKeyboardMarkup().add(*inline_button_choice_day)
    bot.send_message(chat_id=message.from_user.id, text='Выберите интересующий вас день',
                     reply_markup=inline_markup_choice_day)
Exemple #2
0
def months_in_calendar(message):
    months = ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь',
              'Ноябрь', 'Декабрь']
    inline_button_choice_month = [types.InlineKeyboardButton(text=f'{month}', callback_data=f'{month}') for
                                  month in months]
    inline_markup_choice_month = types.InlineKeyboardMarkup().add(*inline_button_choice_month)
    bot.send_message(chat_id=message.from_user.id, text='Выберите интересующий вас месяц',
                     reply_markup=inline_markup_choice_month)
Exemple #3
0
def select_name_your_city(message, char):
    letter = str(char).upper()
    cities = search_file_with_cites(letter=letter)
    inline_button_choice_city = [types.InlineKeyboardButton(text=f'{city}', callback_data=f'{city}') for
                                 city in cities]
    inline_markup_choice_city = types.InlineKeyboardMarkup().add(*inline_button_choice_city)
    bot.send_message(chat_id=message.from_user.id, text='Выберите ваш город.',
                     reply_markup=inline_markup_choice_city)
Exemple #4
0
def difference_events(message):
    inline_button_concert = types.InlineKeyboardButton(text='Концерты', callback_data='Концерты')
    inline_button_cinema = types.InlineKeyboardButton(text='Кино', callback_data='Кино')
    inline_button_performance = types.InlineKeyboardButton(text='Театр', callback_data='Театр')
    inline_button_exhibition = types.InlineKeyboardButton(text='Выставки', callback_data='Выставки')
    inline_markup_choice_event = types.InlineKeyboardMarkup().add(inline_button_concert, inline_button_cinema,
                                                                  inline_button_performance,
                                                                  inline_button_exhibition)
    bot.send_message(chat_id=message.from_user.id, text='Выберите интересующее вас мероприятие',
                     reply_markup=inline_markup_choice_event)
Exemple #5
0
def start_chat(message):
    keyboard_start_msg = types.ReplyKeyboardMarkup(True, True)
    keyboard_start_msg.row('Авторизоваться', 'Зарегистрироваться',
                           'Выйти из аккаунта')
    text = 'Бот предоставляет информации о событиях в вашем городе. Чтобы ее получить, напишите слово "афиша".\n\n' \
           'Для продолжения взаимодействий с ботом необходимо зарегистрироваться и авторизоваться.\n\n' \
           'Если вы уже зарегистрированы, необходимо только авторизоваться.'
    bot.send_message(chat_id=message.from_user.id,
                     text=text,
                     reply_markup=keyboard_start_msg)
Exemple #6
0
def select_letter_your_city(message):
    alphabet = 'АБВГДЕЖЗИЙКЛМНОПРСТУФХЧШЩЭЮЯ'
    inline_button_enter_your_city = types.InlineKeyboardButton(text='Ввести свой город самостоятельно',
                                                               callback_data='Ввести свой город самостоятельно')
    inline_button_choice_letter = [types.InlineKeyboardButton(text=f'{letter}', callback_data=f'{letter}') for
                                   letter in alphabet]
    inline_markup_choice_letter = types.InlineKeyboardMarkup().add(inline_button_enter_your_city,
                                                                   *inline_button_choice_letter)
    bot.send_message(chat_id=message.from_user.id,
                     text='Нажмите на начальную букву вашего города.' \
                          '\nЕсли вашего города нет в списке, введите его самостоятельно.',
                     reply_markup=inline_markup_choice_letter)
Exemple #7
0
def select_event(message,
                 city,
                 date,
                 concert=False,
                 exhibition=False,
                 performance=False,
                 movie=False):
    if concert:
        url = f'https://www.afisha.ru/{city}/schedule_concert/{date}/'
        bot.send_message(chat_id=message.from_user.id,
                         text='Идет поиск концертов...')
        search_class = '_3cJdx _2nJif like-container'
        search_events(message=message, url=url, search_class=search_class)
    elif exhibition:
        url = f'https://www.afisha.ru/{city}/schedule_exhibition/{date}/'
        bot.send_message(chat_id=message.from_user.id,
                         text='Идет поиск выставок...')
        search_class = '_1ER_u _2nJif like-container'
        search_events(message=message, url=url, search_class=search_class)
    elif performance:
        url = f'https://www.afisha.ru/{city}/schedule_theatre/{date}/'
        bot.send_message(chat_id=message.from_user.id,
                         text='Идет поиск спектаклей...')
        search_class = 'jP8J- _2nJif like-container'
        search_events(message=message, url=url, search_class=search_class)
    elif movie:
        url = f'https://www.afisha.ru/{city}/schedule_cinema/{date}/'
        bot.send_message(chat_id=message.from_user.id,
                         text='Идет поиск фильмов...')
        search_class = 'oIhSV _2nJif like-container'
        search_events(message=message, url=url, search_class=search_class)
Exemple #8
0
def choice_city(callback):
    callback.message.from_user.id = callback.from_user.id
    alphabet = 'АБВГДЕЖЗИЙКЛМНОПРСТУФХЧШЩЭЮЯ'
    if callback.data == 'Ввести свой город самостоятельно':
        msg_entered_city = bot.send_message(chat_id=callback.message.chat.id, text='Введите ваш город')
        bot.register_next_step_handler(msg_entered_city, writing_entered_city)

    for char in alphabet:
        if callback.data == char:
            select_name_your_city(message=callback.message, char=char)

    for city in [city for city in look_all_cities()]:
        if callback.data == city:
            writing_selected_city(message=callback.message, city=callback.data)

    if callback.data in ['Январь', 'Март', 'Май', 'Июль', 'Август', 'Октябрь', 'Декабрь']:
        month = declension_month(month=callback.data)
        Data[callback.from_user.id].append(month)
        days_in_calendar(message=callback.message, quantity_days=31)
    elif callback.data in ['Апрель', 'Июнь', 'Сентябрь', 'Ноябрь']:
        month = declension_month(month=callback.data)
        Data[callback.from_user.id].append(month)
        days_in_calendar(message=callback.message, quantity_days=30)
    elif callback.data == 'Февраль':
        month = declension_month(month=callback.data)
        Data[callback.from_user.id].append(month)
        days_in_calendar(message=callback.message, quantity_days=28)

    if callback.data in ['0' + str(x) if x in [1, 2, 3, 4, 5, 6, 7, 8, 9] else str(x) for x in range(1, 31 + 1)]:
        day = callback.data
        Data[callback.from_user.id].append(day)
        difference_events(callback.message)

    if callback.data == 'Концерты':
        if callback.from_user.id in Data:
            select_event(message=callback.message, city=Data[callback.from_user.id][0],
                         date=f'{Data[callback.from_user.id][2]}-{Data[callback.from_user.id][1]}', concert=True)

    elif callback.data == 'Театр':
        if callback.from_user.id in Data:
            select_event(message=callback.message, city=Data[callback.from_user.id][0],
                         date=f'{Data[callback.from_user.id][2]}-{Data[callback.from_user.id][1]}',
                         performance=True)

    elif callback.data == 'Выставки':
        if callback.from_user.id in Data:
            select_event(message=callback.message, city=Data[callback.from_user.id][0],
                         date=f'{Data[callback.from_user.id][2]}-{Data[callback.from_user.id][1]}',
                         exhibition=True)

    elif callback.data == 'Кино':
        if callback.from_user.id in Data:
            select_event(message=callback.message, city=Data[callback.from_user.id][0],
                         date=f'{Data[callback.from_user.id][2]}-{Data[callback.from_user.id][1]}',
                         movie=True)
Exemple #9
0
def authorization_email(message):
    bot.send_message(chat_id=message.from_user.id,
                     text='Проверка адреса почты.')
    email = message.text

    logging.basicConfig(
        format=
        u'%(filename)s [LINE:%(lineno)d] #%(levelname)-8s [%(asctime)s]  %(message)s',
        level=logging.INFO)
    logging.info(msg=f'Authorization email: {email}\n')

    if check_valid_email(email):
        Email.email = email
        msg_password = bot.send_message(chat_id=message.from_user.id,
                                        text='Введите пароль для авторизации.')
        bot.register_next_step_handler(msg_password,
                                       authorization_email_password)
    else:
        bot.send_message(chat_id=message.from_user.id,
                         text='Вы ввели некорректный адрес почты.')
Exemple #10
0
def registration(message):
    bot.send_message(chat_id=message.from_user.id,
                     text='Проверка адреса почты')
    email = message.text

    logging.basicConfig(
        format=
        u'%(filename)s [LINE:%(lineno)d] #%(levelname)-8s [%(asctime)s]  %(message)s',
        level=logging.INFO)
    logging.info(msg=f'Registration email: {email}\n')

    if check_valid_email(email):
        password = create_password()
        insert_user_in_db(user_id=message.from_user.id,
                          first_name=message.chat.first_name,
                          last_name=message.chat.last_name,
                          email=email,
                          password=password)
        send_password_to_email(email=email, password=password)
        bot.send_message(
            chat_id=message.from_user.id,
            text=
            """Перейдите на ранее введенную вами почту.\nВам было прислано сообщение в котором содержится ваш пароль от аккаунта и ссылка для подтверждения вашей почты.\nБез подтверждения почты аккаунт не активен.\nЕсли вы не нашли сообщение, посмотрите в спаме."""
        )
    else:
        bot.send_message(chat_id=message.from_user.id,
                         text='Вы ввели некорректный адрес почты.')
Exemple #11
0
def search_events(message, url, search_class):
    try:

        list_events = []
        response = requests.get(url=url)
        events = BeautifulSoup(response.content, 'html.parser').find(
            'div', class_='content content_view_cards')
        for event in events.find_all('section', {'class': search_class}):
            for genre in event.find_all('a', {'class': 'WR4gB'}):
                ...
            for name in event.find_all('h3', {'class': 'heHLK'}):
                ...
            for time in event.find_all('div', {'class': '_1Jo7v'}):
                ...
            description = [
                div for div in event.select('div') if not div.has_attr('class')
            ]
            description_for_all_events = '' if description == [] else description[
                0].get_text()
            genre_for_all_events = '' if genre == [] else genre.get_text()
            name_for_all_events = '' if name == [] else name.get_text()
            if search_class != 'oIhSV _2nJif like-container':
                time_for_all_events = '' if time == [] else time.get_text()
                list_events.append(
                    (genre_for_all_events, name_for_all_events,
                     time_for_all_events, description_for_all_events))
            else:
                list_events.append((genre_for_all_events, name_for_all_events,
                                    description_for_all_events))

        if search_class == 'oIhSV _2nJif like-container':
            sort_events = sorted(set(list_events), key=lambda x: x[0])
            for events in sort_events:
                bot.send_message(
                    chat_id=message.from_user.id,
                    text=
                    f'жанр - {events[0]}\nназвание - {events[1]}\nописание - {events[2]}'
                )
        else:
            sort_events = sorted(set(list_events), key=lambda x: x[2][-6:-1])
            for events in sort_events:
                bot.send_message(
                    chat_id=message.from_user.id,
                    text=f'жанр - {events[0]}\nназвание - {events[1]}\n'
                    f'место и дата - {events[2]}\nописание - {events[3]}')

    except AttributeError:
        bot.send_message(chat_id=message.chat.id, text='Ничего не найдено.')
Exemple #12
0
def authorization(message):
    if select_user_from_db(user_id=message.from_user.id,
                           email=Email.email,
                           password=Password.password):
        if not check_email_authorization(user_id=message.from_user.id):
            bot.send_message(
                chat_id=message.from_user.id,
                text=
                'Вы не можете пользоваться ботом пока не подтвердите свою почту.'
            )
            return
        bot.send_message(
            chat_id=message.from_user.id,
            text='Авторизация прошла успешно. Доступ к боту открыт.')
        update_user_authorization(user_id=message.from_user.id)
    else:
        bot.send_message(chat_id=message.from_user.id,
                         text='Ошибка при авторизации. Попробуйте еще раз.')
Exemple #13
0
def auth_reg(message):
    if message.text == 'Авторизоваться':
        if check_user_authorization(user_id=message.from_user.id):
            bot.send_message(chat_id=message.from_user.id,
                             text='Вы уже авторизованы.')
            return
        msg_password = bot.send_message(
            message.from_user.id,
            'Введите почту для авторизации.\nПример почты: [email protected]')
        bot.register_next_step_handler(msg_password, authorization_email)
    elif message.text == 'Зарегистрироваться':
        if check_registration_user(user_id=message.from_user.id):
            bot.send_message(chat_id=message.from_user.id,
                             text='Вы уже зарегистрированы.')
            return
        msg = bot.send_message(
            message.from_user.id,
            'Введите почту для регистрации.\nПример почты: [email protected]')
        bot.register_next_step_handler(msg, registration)
    elif message.text == 'Выйти из аккаунта':
        exit_user_from_account(user_id=message.from_user.id)
        bot.send_message(message.from_user.id, 'Вы вышли из аккаунта.')
    elif not check_user_authorization(user_id=message.from_user.id):
        bot.send_message(chat_id=message.from_user.id,
                         text='Вы не авторизованы. Доступ к боту закрыт.')
    elif message.text.lower() == 'афиша':
        select_letter_your_city(message)
    else:
        bot.send_message(chat_id=message.from_user.id,
                         text='Введите слово "афиша", чтобы продолжить.')