Пример #1
0
def query_to_date(update: Update, context: CallbackContext):
    query: CallbackQuery = update.callback_query
    period = query.data[len(prefix_to_date):]
    context.chat_data['period'] = period
    calendar, step = DetailedTelegramCalendar().build()
    query.edit_message_text("Please, select a " + LSTEP[step],
                            reply_markup=calendar)
Пример #2
0
def all_messages(message):
    # функция календаря, принимает мессендж
    def start(m, v_string):
        calendar, step = DetailedTelegramCalendar().build()
        bot.send_message(m.chat.id,
                         f"{v_string} {LSTEP[step]}",
                         reply_markup=calendar)
        return message.message_id

    # Настройки календаря
    @bot.callback_query_handler(func=DetailedTelegramCalendar.func())
    def cal(c):
        result, key, step = DetailedTelegramCalendar(locale='ru', min_date=d1, max_date=d2).process(c.data)
        if not result and key:
            bot.edit_message_text(f"Select {LSTEP[step]}",
                                  c.message.chat.id,
                                  c.message.message_id,
                                  reply_markup=key)
        elif result:
            bot.edit_message_text(f"Min: {result.strftime('%d.%m.%Y')}",
                                  c.message.chat.id,
                                  c.message.message_id)

            # функция построения диапазона дат от d1 до d2
            def date_range(d1, d2):
                return (d1 + datetime.timedelta(days=i) for i in range((d2 - d1).days + 1))

            first_date = result
            # вывод всех
            for d in date_range(first_date, d2):
                print(d.strftime('%Y.%m.%d'))

    start(message, v_string='Выберите начальную дату')
Пример #3
0
async def calendar_handler(event):
    result, key, step = DetailedTelegramCalendar(telethon=True, min_date=date.today()).process(event.data.decode("utf-8"))

    if not result and key:
        await event.edit(f"Select {LSTEP[step]}", buttons=key)
    elif result:
        await event.edit(f"You selected {result}")
Пример #4
0
    def ask_for_date(self, update: Update, context: CallbackContext) -> None:

        context.user_data[c.NEW_USER] = 0
        calendar, step, = DetailedTelegramCalendar().build()
        text = f'Seleziona {self.__LSTEP[step]}'
        self.__editMessage(update, text, calendar)
        return c.COLLECT_DATE
Пример #5
0
    def send_text(message):
        if message.text.lower() == 'check':
            msg = bot.send_message(message.chat.id, 'Выбери настроение, которые у тебя в целом за сегодня',
                                   reply_markup=mood_keyboard)
            bot.register_next_step_handler(msg, check_today_mood)
        elif message.text.lower() == 'analytics':
            msg = bot.send_message(message.chat.id, 'Выбери интервал, за который AI будет анализировать данные',
                                   reply_markup=interval_keyboard)
            bot.register_next_step_handler(msg, get_interval)
        elif message.text.lower() == 'check old':
            calendar, step = DetailedTelegramCalendar(max_date=date.today()).build()
            bot.send_message(message.chat.id, f"Select {LSTEP[step]}", reply_markup=calendar)
            msg = bot.send_message(message.chat.id, 'Выбери СНАЧАЛА ДАТУ, потом настроение, которые было в тот день',
                                   reply_markup=mood_keyboard)
            bot.register_next_step_handler(msg, check_old_mood)

        elif message.text.lower() == 'menu':
            bot.send_message(message.chat.id, 'Choose action', reply_markup=menu_keyboard)

        elif message.text == 'Гюнель, 22 года, юрист':
            bot.send_message(message.chat.id,
                             '''
                             Гюнель:
                             Привет, меня зовут Гюнель, я юрист, закончила бакалавр МГЮА без 4... и 3 и 2 тоже не было. 
                             Сейчас я работаю в юридическое конторе и учусь на магистратуре. Еще я учу английский. В общем, обычная жизнь молодой, красивой, современной и успешной леди.
                             Но все же раньше я думала, что моя жизнь не очень веселая, но в какой-то момент мне попался билборд с рекламой бота MoodCheckingBot, я подумала: 
                             - А че, можно попробовать.
                             Вы знаете, после того, как я начала пользоваться ботом, моя жизнь поделилась на "до" и "после".
                             Я наконец-то поняла, что моя жизнь очень веселая. 
                             Когда же у меня неделю плохое настроение, при помощи бота я сразу это понимаю и тут же беру отпуск и улетаю на Бали.
                             А когда настроение не очень 3 недели, я просто меняю работу, все просто! Все просто с ботом MoodCheckingBot!
                             ''', reply_markup=menu_keyboard)
def start2(m):
    # do not forget to put calendar_id
    calendar, step = DetailedTelegramCalendar(calendar_id=2,
                                              locale='ru').build()
    bot.send_message(m.chat.id,
                     f"Calendar 2: Select {LSTEP[step]}",
                     reply_markup=calendar)
Пример #7
0
    def date_handler(self, update: Update, context: CallbackContext) -> None:

        query = update.callback_query
        querydata = query.data
        result, key, step = DetailedTelegramCalendar().process(querydata)

        # scelta anno, mese, giorno
        if not result and key:
            text = f'Seleziona {self.__LSTEP[step]}'
            keyboard = key
            self.__editMessage(update, text, keyboard)
            return c.COLLECT_DATE

        # strada intrapresa dopo la scelta del giorno
        else:

            res = str(result)  # data scelta dall'utente = str(result)
            parsedRes = date_parser.dateParser(res)

            context.user_data[c.MONTH] = parsedRes[0]
            context.user_data[c.DAY] = parsedRes[1]

            text = f"Hai selezionato {result} \n Dimmi cosa fare👇"
            keyboard = keyboards.dateConfirmationKeyboard

        self.__editMessage(update, text, keyboard)

        return c.COLLECT_HALL_INFO
Пример #8
0
def cal(c):
    result, key, step = DetailedTelegramCalendar(locale='ru',
                                                 calendar_id=2).process(c.data)
    if not result and key:
        bot.edit_message_text(f"Выберите конец периода",
                              c.message.chat.id,
                              c.message.message_id,
                              reply_markup=key)
    elif result:
        bot.edit_message_text(f"Конец периода: {result}", c.message.chat.id,
                              c.message.message_id)
        finish_date = result.strftime("%Y.%m.%d")
        group_id = bk.output(c.message.chat.id)
        global start_date
        s = bk.get_schedule(str(group_id), start_date, finish_date)
        bot.send_message(c.message.chat.id, s)
Пример #9
0
def query_to_result(update: Update, context: CallbackContext):
    query: CallbackQuery = update.callback_query
    date, key, step = DetailedTelegramCalendar().process(query.data)
    if not date and key:
        query.edit_message_text(f"Please, select {LSTEP[step]}",
                                reply_markup=key)
        return
    if date is None:
        return
    datetime_now = datetime.datetime.now()
    if date < datetime_now.date():
        context.bot.answer_callback_query(query.id,
                                          "Start date cannot be in the past.",
                                          show_alert=True)
        return
    elif date > add_one_month(datetime_now).date():
        context.bot.answer_callback_query(
            query.id,
            "Start date should be more than one month from now.",
            show_alert=True)
        return
    period = context.chat_data['period']
    msg = context.chat_data['scheduled_msg']
    message = ScheduledMessage(
        msg, period,
        datetime.datetime.combine(date, update.effective_message.date.time()))
    context.bot_data['db'].add_scheduled_message(update.effective_chat.id,
                                                 message)
    run_job(context.job_queue, message, update.effective_chat.id)
    query.edit_message_text("Done. Message successfully scheduled")
Пример #10
0
    def start(m, v_string):
        calendar, step = DetailedTelegramCalendar().build()
        bot.send_message(m.chat.id,
                         f"{v_string} {LSTEP[step]}",
                         reply_markup=calendar)


        return message.message_id
Пример #11
0
def cal(c):
    result, key, step = DetailedTelegramCalendar(locale='ru',
                                                 calendar_id=1).process(c.data)
    if not result and key:
        bot.edit_message_text(f"Выберите начало периода",
                              c.message.chat.id,
                              c.message.message_id,
                              reply_markup=key)
    elif result:
        bot.edit_message_text(f"Начало периода: {result}", c.message.chat.id,
                              c.message.message_id)
        global start_date
        start_date = result.strftime("%Y.%m.%d")
        calendar, step = DetailedTelegramCalendar(locale='ru',
                                                  calendar_id=2).build()
        bot.send_message(c.message.chat.id,
                         f"Выберите конец периода",
                         reply_markup=calendar)
Пример #12
0
 def cal(c):
     result, key, step = DetailedTelegramCalendar(max_date=date.today()).process(c.data)
     if not result and key:
         bot.edit_message_text(f"Select {LSTEP[step]}",
                               c.message.chat.id,
                               c.message.message_id,
                               reply_markup=key)
     elif result:
         global update_dt
         update_dt = result
Пример #13
0
def cal(c):
    result, key, step = DetailedTelegramCalendar().process(c.data)
    if not result and key:
        bot.edit_message_text(f"Select {LSTEP[step]}",
                              c.message.chat.id,
                              c.message.message_id,
                              reply_markup=key)
    elif result:
        bot.edit_message_text(f"You selected {result}", c.message.chat.id,
                              c.message.message_id)
def cal1(c):
    # calendar_id is used here too, since the new keyboard is made
    result, key, step = DetailedTelegramCalendar(calendar_id=1).process(c.data)
    if not result and key:
        bot.edit_message_text(f"Calendar 1: Select {LSTEP[step]}",
                              c.message.chat.id,
                              c.message.message_id,
                              reply_markup=key)
    elif result:
        bot.edit_message_text(f"You selected {result} in calendar 1",
                              c.message.chat.id, c.message.message_id)
Пример #15
0
def cal(c):
    result, key, step = DetailedTelegramCalendar().process(c.data)
    if not result and key:
        bot.edit_message_text(f"Select {LSTEP[step]}",
                              c.message.chat.id,
                              c.message.message_id,
                              reply_markup=key)
    elif result:
        bot.edit_message_text(
            f"Ты выбрал {result}, теперь пора выбрать наш маршрут НАПИШИ /city ",
            c.message.chat.id, c.message.message_id)
async def inline_kb_answer_callback_handler(query):
    result, key, step = DetailedTelegramCalendar().process(query.data)

    if not result and key:
        await bot.edit_message_text(f"Select {LSTEP[step]}",
                                    query.message.chat.id,
                                    query.message.message_id,
                                    reply_markup=key)
    elif result:
        await bot.edit_message_text(f"You selected {result}",
                                    query.message.chat.id,
                                    query.message.message_id)
Пример #17
0
def start(m):
    user_dict = {}
    chat_id = m.chat.id
    try:
        calendar, step = DetailedTelegramCalendar(
            min_date=datetime.date.today()).build()
        bot.send_message(m.chat.id,
                         f"Select {LSTEP[step]}",
                         reply_markup=calendar)
    except KeyError:
        bot.send_message(
            chat_id,
            f"You will need a name to book a slot. Please press /start to input your name."
        )
Пример #18
0
def in_date(message):
    # функция календаря, принимает мессендж
    def start(m, v_string):
        calendar, step = DetailedTelegramCalendar().build()
        bot.send_message(m.chat.id,
                         f"{v_string} {LSTEP[step]}",
                         reply_markup=calendar)


        return message.message_id

    # Настройки календаря
    @bot.callback_query_handler(func=DetailedTelegramCalendar.func())
    def cal(c):
        result, key, step = DetailedTelegramCalendar(locale='ru', min_date=d1, max_date=d2).process(c.data)
        if not result and key:
            bot.edit_message_text(f"Select {LSTEP[step]}",
                                  c.message.chat.id,
                                  c.message.message_id,
                                  reply_markup=key)
        elif result:
            bot.edit_message_text(f"Min: {result.strftime('%d.%m.%Y')}",
                                  c.message.chat.id,
                                  c.message.message_id)

            # функция построения диапазона дат от d1 до d2
            def date_range(d1, d2):
                return (d1 + datetime.timedelta(days=i) for i in range((d2 - d1).days + 1))

            first_date = result
            # вывод всех
            for d in date_range(first_date, d2):
                print(d.strftime('%Y.%m.%d'))

    markup = telebot.types.InlineKeyboardMarkup()
    button = telebot.types.InlineKeyboardButton(text='Выбрать начало', callback_data='first_date')
    markup.add(button)
    button = telebot.types.InlineKeyboardButton(text='Выбрать конец', callback_data='second_date')
    markup.add(button)
    bot.send_message(chat_id=message.chat.id, text='Выберите начальную и конечную даты', reply_markup=markup)

    @bot.callback_query_handler(func=lambda call: True)
    def query_handler(call):
        if call.data == 'first_date':
            bot.answer_callback_query(callback_query_id=call.id, text='Hello world')
            start(message, v_string='Выберите начальную дату')
        if call.data == 'second_date':
            bot.answer_callback_query(callback_query_id=call.id, text='Sad world')
Пример #19
0
def cal(c):
    result, key, step = DetailedTelegramCalendar(
        min_date=datetime.date.today()).process(c.data)
    if not result and key:
        bot.edit_message_text(f"Select {LSTEP[step]}",
                              c.message.chat.id,
                              c.message.message_id,
                              reply_markup=key)
    elif result:
        isDuplicate = checkDuplicate(c.message.chat.id, result)
        if isDuplicate:
            bot.edit_message_text(
                f"Your have already requested for a slot on {result}.",
                c.message.chat.id, c.message.message_id)
        else:
            user_dict['dateSpecified'] = result
            msg = bot.edit_message_text(
                f"Please type your reason for returning to office on the {result}.",
                c.message.chat.id, c.message.message_id)
            bot.register_next_step_handler(msg, process_reason_step)
Пример #20
0
    def cal(c):
        result, key, step = DetailedTelegramCalendar(locale='ru', min_date=d1, max_date=d2).process(c.data)
        if not result and key:
            bot.edit_message_text(f"Select {LSTEP[step]}",
                                  c.message.chat.id,
                                  c.message.message_id,
                                  reply_markup=key)
        elif result:
            bot.edit_message_text(f"Min: {result.strftime('%d.%m.%Y')}",
                                  c.message.chat.id,
                                  c.message.message_id)

            # функция построения диапазона дат от d1 до d2
            def date_range(d1, d2):
                return (d1 + datetime.timedelta(days=i) for i in range((d2 - d1).days + 1))

            first_date = result
            # вывод всех
            for d in date_range(first_date, d2):
                print(d.strftime('%Y.%m.%d'))
Пример #21
0
    def check_old_mood(message):
        print('check_old_mood')
        if message.text.lower() in mood_list:
            #выбрана дата, потом статус
            try:
                user_id = message.from_user.id
                global dt
                dt = update_dt
                status = mood_dict[message.text.lower()]

                conn = sqlite3.connect('mood.db')
                cur = conn.cursor()

                if check_recording(user_id, dt) == 'insert':
                    cur.execute(f'''
                            INSERT INTO mood_status(userid, date, status) 
                               VALUES({user_id}, '{dt}', '{status}')
                               ''')
                    conn.commit()
                    msg = bot.send_message(message.chat.id, 'Напиши комментарий', reply_markup=comment_keyboard)
                    bot.register_next_step_handler(msg, add_commentary)
                else:
                    cur.execute(f'''
                            update mood_status
                            set status = '{status}'
                            where userid = {user_id}
                            and date = '{dt}'
                            ''')
                    conn.commit()
                    msg = bot.send_message(message.chat.id, 'Напиши комментарий', reply_markup=comment_keyboard)
                    bot.register_next_step_handler(msg, add_commentary)
            except:
                calendar, step = DetailedTelegramCalendar(max_date=date.today()).build()
                bot.send_message(message.chat.id, f"Select {LSTEP[step]}", reply_markup=calendar)
                msg = bot.send_message(message.chat.id,
                                       '''Не так, выбери СНАЧАЛА ДАТУ, потом настроение, которое было в тот день, ван мо трай''',
                                       reply_markup=mood_keyboard)
                bot.register_next_step_handler(msg, check_old_mood)
Пример #22
0
        'C:/Users/sergey/PycharmProjects/pythonProject2/telegram/static/sticker.webp',
        'rb')
    bot.send_sticker(message.chat.id, img)
    bot.reply_to(
        message,
        f"Привет, сейчас я предложу выбрать дату поездки. Для этого НАПИШИ /date, "
        f"{message.from_user.first_name}")


@bot.message_handler(commands=['date'])
def start(m):
    calendar, step = DetailedTelegramCalendar().build()
    bot.send_message(m.chat.id, f"Select {LSTEP[step]}", reply_markup=calendar)


@bot.callback_query_handler(func=DetailedTelegramCalendar.func())
def cal(c):
    result, key, step = DetailedTelegramCalendar().process(c.data)
    if not result and key:
        bot.edit_message_text(f"Select {LSTEP[step]}",
                              c.message.chat.id,
                              c.message.message_id,
                              reply_markup=key)
    elif result:
        bot.edit_message_text(
            f"Ты выбрал {result}, теперь пора выбрать наш маршрут НАПИШИ /city ",
            c.message.chat.id, c.message.message_id)


start_city = ''
end_city = ''
Пример #23
0
async def run_dt(event):  # запуск выбора времени даты
    calendar, step = DetailedTelegramCalendar(telethon=True, min_date=date.today()).build()
    await event.respond(f"Select {LSTEP[step]}", buttons=calendar)
    bot.send_message(m.chat.id,
                     f"Calendar 1: Select {LSTEP[step]}",
                     reply_markup=calendar)


@bot.message_handler(commands=['start2'])
def start2(m):
    # do not forget to put calendar_id
    calendar, step = DetailedTelegramCalendar(calendar_id=2,
                                              locale='ru').build()
    bot.send_message(m.chat.id,
                     f"Calendar 2: Select {LSTEP[step]}",
                     reply_markup=calendar)


@bot.callback_query_handler(func=DetailedTelegramCalendar.func(calendar_id=1))
def cal1(c):
    # calendar_id is used here too, since the new keyboard is made
    result, key, step = DetailedTelegramCalendar(calendar_id=1).process(c.data)
    if not result and key:
        bot.edit_message_text(f"Calendar 1: Select {LSTEP[step]}",
                              c.message.chat.id,
                              c.message.message_id,
                              reply_markup=key)
    elif result:
        bot.edit_message_text(f"You selected {result} in calendar 1",
                              c.message.chat.id, c.message.message_id)


@bot.callback_query_handler(func=DetailedTelegramCalendar.func(calendar_id=2))
def cal1(c):
Пример #25
0
api_id = 123456
api_hash = "1233456789"
bot_token = '1219481769:AAFrlaSczx4xa0OtsBGp51dESfNmoJrH6zg'

bot = TelegramClient("bot", api_id, api_hash)

class MyStyleCalendar(DetailedTelegramCalendar):
    empty_month_button = ""
    empty_year_button = ""


@bot.on(events.NewMessage(pattern="/start"))
async def reply_handler(event):
    calendar, step = DetailedTelegramCalendar(telethon=True, min_date=date.today()).build()
    await event.respond(f"Select {LSTEP[step]}", buttons=calendar)


@bot.on(events.CallbackQuery(pattern=DetailedTelegramCalendar.func(telethon=True)))
async def calendar_handler(event):
    result, key, step = DetailedTelegramCalendar(telethon=True, min_date=date.today()).process(event.data.decode("utf-8"))

    if not result and key:
        await event.edit(f"Select {LSTEP[step]}", buttons=key)
    elif result:
        await event.edit(f"You selected {result}")


bot.start(bot_token=bot_token)
with bot:
    bot.run_until_disconnected()
Пример #26
0
async def reply_handler(event):
    calendar, step = DetailedTelegramCalendar(telethon=True, min_date=date.today()).build()
    await event.respond(f"Select {LSTEP[step]}", buttons=calendar)
Пример #27
0
def start(m):
    calendar, step = DetailedTelegramCalendar().build()
    bot.send_message(m.chat.id, f"Select {LSTEP[step]}", reply_markup=calendar)
Пример #28
0
def start(m):
    calendar, step = DetailedTelegramCalendar(locale='ru',
                                              calendar_id=1).build()
    bot.send_message(m.chat.id,
                     f"Выберите начало периода",
                     reply_markup=calendar)
from telegram_bot_calendar import DetailedTelegramCalendar, LSTEP

bot = Bot(token="token")
dp = Dispatcher(bot)


@dp.message_handler(commands='start')
async def start(message):
    calendar, step = DetailedTelegramCalendar().build()
    await bot.send_message(message.chat.id,
                           f"Select {LSTEP[step]}",
                           reply_markup=calendar)


@dp.callback_query_handler(DetailedTelegramCalendar.func())
async def inline_kb_answer_callback_handler(query):
    result, key, step = DetailedTelegramCalendar().process(query.data)

    if not result and key:
        await bot.edit_message_text(f"Select {LSTEP[step]}",
                                    query.message.chat.id,
                                    query.message.message_id,
                                    reply_markup=key)
    elif result:
        await bot.edit_message_text(f"You selected {result}",
                                    query.message.chat.id,
                                    query.message.message_id)


executor.start_polling(dp, skip_updates=True)
Пример #30
0
def main():
    # Create the Updater and pass it your bot's token.
    TOKEN = "your token here"

    bot = SbaBot(TOKEN)

    # Set up third level ConversationHandler (collecting sub/booking features)
    add_user_to_database = ConversationHandler(
        entry_points=[CallbackQueryHandler(bot.update_database, pattern='^' + str(c.COMPLETE_SUB) + '$')],

        states={
            c.MODIFY_DATA: [CallbackQueryHandler(bot.modify_user_data, pattern='^' + str(c.MODIFY) + '$')],
            c.END: [bot.end]
        },

        fallbacks=[CallbackQueryHandler(bot.back_to_main_menu, pattern='^' + str(c.BACK) + '$'),
                   CommandHandler('stop', bot.stop_nested),
                   ],

        map_to_parent={
            c.BACK: c.BACK,
            c.STOPPING: c.STOPPING,
        },

    )

    delete_user_from_db = ConversationHandler(
        entry_points=[MessageHandler(Filters.text & ~Filters.command, bot.delete_user)],

        states={
            c.DELETE_USER: [CallbackQueryHandler(bot.id_to_delete, pattern='^' + str(c.DELETE_SUB) + '$')],
        },

        fallbacks=[
            # CallbackQueryHandler(bot.back_to_main_menu, pattern='^' + str(c.BACK) + '$'),
            # CommandHandler('stop', bot.stop_nested),
        ],

        map_to_parent={
            c.DELETE_USER: c.DELETE_USER,
            c.END: c.END,
            c.STOPPING: c.END,

        },

    )

    # Set up second level ConversationHandler (sub to Sba Autofiller)
    collect_user_data = ConversationHandler(
        entry_points=[CallbackQueryHandler(bot.hall_confirmation, pattern='[0-9]+$')],

        states={
            c.COLLECT_NAME: [CallbackQueryHandler(bot.ask_for_name, pattern='^' + str(c.CONFIRM_HALL) + '$')],
            c.COLLECT_EMAIL: [MessageHandler(Filters.text & ~Filters.command, bot.ask_for_email)],
            c.COLLECT_ID: [MessageHandler(Filters.text & ~Filters.command, bot.ask_for_id)],
            c.COLLECT_PHONE: [MessageHandler(Filters.text & ~Filters.command, bot.ask_for_phone)],
            c.DATA_CONFIRMATION: [MessageHandler(Filters.text & ~Filters.command, bot.confirm_data)],
            c.ADD_USER_TO_DATABASE: [add_user_to_database],
            c.BOOKING_CONFIRMATION: [CallbackQueryHandler(bot.reserve_seat, pattern='^' + str(c.BOOK) + '$')],
        },
        fallbacks=[
            CallbackQueryHandler(bot.back_to_main_menu, pattern='^' + str(c.BACK) + '$'),
            CallbackQueryHandler(bot.autofiller_options, pattern='^' + str(c.SUB_MENU) + '$'),
            # CallbackQueryHandler(bot.autofiller_options, pattern='^' + str(c.RESTART) + '$'),
            CallbackQueryHandler(bot.ask_for_hall, pattern='^' + str(c.CHANGE_HALL) + '$'),
            CallbackQueryHandler(bot.ask_for_name, pattern='^' + str(c.CONFIRM_HALL) + '$'),
            CommandHandler('stop', bot.stop_nested),
        ],
        map_to_parent={
            # Return to top level menu
            c.END: c.COLLECT_HALL_INFO,

            # End conversation alltogether
            c.SELECTING_OPTION: c.SELECTING_OPTION,
            c.STOPPING: c.END,
            c.COLLECT_HALL_INFO: c.COLLECT_HALL_INFO,
            c.COLLECT_USER_DATA: c.COLLECT_USER_DATA,
        },
    )

    # Set up top level ConversationHandler (selecting main command)
    # Because the states of the third level conversation map to the ones of the second level
    # conversation, we need to make sure the top level conversation can also handle them
    user_info_handlers = [
        collect_user_data,
    ]

    delete_user_handlers = [
        delete_user_from_db,
    ]

    conv_handler = ConversationHandler(
        entry_points=[CommandHandler('start', bot.start)],
        states={
            c.SELECTING_OPTION: [
                CallbackQueryHandler(bot.autofiller_options, pattern='^' + str(c.SUB) + '$'),
                CallbackQueryHandler(bot.ask_for_date, pattern='^' + str(c.BOOK) + '$'),
                CallbackQueryHandler(bot.id_to_delete, pattern='^' + str(c.DELETE_SUB) + '$'),
                CallbackQueryHandler(bot.end, pattern='^' + str(c.END) + '$'),
                CallbackQueryHandler(bot.get_user_info, pattern='^' + str(c.SHOW_INFO) + '$')

            ],
            c.COLLECT_HALL_INFO: [CallbackQueryHandler(bot.ask_for_hall,
                                                       pattern='^' + str(c.MODIFY) + '$|^' + str(
                                                           c.NEW_SUB) + '$|^' + str(c.SELF_SUB) + '$|^' + str(
                                                           c.COLLECT_HALL_INFO) + '$')],
            c.COLLECT_USER_DATA: user_info_handlers,
            c.COLLECT_DATE: [CallbackQueryHandler(bot.date_handler, DetailedTelegramCalendar().func())],
            c.DELETE_USER: delete_user_handlers,
            c.STOPPING: [CommandHandler('start', bot.start)],

        },

        fallbacks=[CommandHandler('stop', bot.stop_bot),
                   CallbackQueryHandler(bot.autofiller_options, pattern='^' + str(c.SUB) + '$'),
                   CallbackQueryHandler(bot.ask_for_hall, pattern='^' + str(c.MODIFY) + '$'),
                   CallbackQueryHandler(bot.end, pattern='^' + str(c.END) + '$'),
                   CallbackQueryHandler(bot.back_to_main_menu, pattern='^' + str(c.BACK) + '$'),
                   CallbackQueryHandler(bot.ask_for_date, pattern='^' + str(c.BOOK) + '$'),
                   ]

    )

    bot.dispatcher.add_handler(conv_handler)

    bot.updater.start_polling()

    bot.updater.idle()