コード例 #1
0
def station_search(message):
    result = dbworker.fetch_stations(message.text, message.chat.id)
    if not result:
        bot.send_message(message.chat.id,
                         'К сожалению такую станцию найти не удалось')
        dbworker.set_state(message.chat.id, config.States.S_START.value)
    else:
        keyboard = types.InlineKeyboardMarkup()
        result_message = 'Выберите станцию из списка:\n\n'
        # Цикл for для создания колбек клавиш, для переходя по станциям
        # Переход по нужной станции производится нажатием на колбек кнопку с определенной информацией о станции
        for station in result:
            result_message += station[1] + '\n' + station[2] + '\n\n'
            if dbworker.get_state(
                    message.chat.id) == config.States.S_STATIONSEARCH.value:
                keyboard.add(
                    types.InlineKeyboardButton(text=station[1],
                                               callback_data='Some_station ' +
                                               str(station[0])))
            if dbworker.get_state(
                    message.chat.id) == config.States.S_THROUGHSTATIONS.value:
                keyboard.add(
                    types.InlineKeyboardButton(text=station[1],
                                               callback_data='First_station ' +
                                               str(station[0])))
        keyboard.add(
            types.InlineKeyboardButton(text='Назад',
                                       callback_data='Back_to_start'))
        bot.send_message(message.chat.id,
                         result_message,
                         reply_markup=keyboard)
コード例 #2
0
async def what_answ(msg: types.Message):
	text = msg.text
	text = text.lower()
	changes = {change['word']: change['s'][0] for change in speller.spell(text)}
	for word, suggestion in changes.items():
		text = text.replace(word, suggestion)
	if dbworker.get_state(msg.chat.id) == int(config.States.S_TRAIN): #человек в тренировке
		 if text in list_0m:
		 	t = dbworker.get_answ(msg.chat.id)
		 	if t == "amusement":
		 		ino = list_1m
		 	elif t == "excitement":
		 		ino = list_1m
		 	elif t == "anger":
		 		ino = list_2m
		 	elif t == "awe":
		 		ino = list_3m
		 	elif t == "fear":
		 		ino = list_3m
		 	elif t == "contentment":
		 		ino = list_4m
		 	elif t == "disgust":
		 		ino = list_5m
		 	elif t == "sadness":
		 		ino = list_6m
		 	if text in ino:
		 		await bot.send_message(chat_id = msg.chat.id, text = "Правильный ответ!")
		 		ann = True
		 	else:
		 		ann = False
		 		answ = await true_answ(t)
		 		y = "Неправильно."
		 		file = dbworker.get_cur_file(msg.chat.id)
		 		#dbworker.change_one(msg.chat.id, file, ann)
		 		te = y + answ
		 		await bot.send_message(chat_id = msg.chat.id, text = te)
		 else:
		 	file = dbworker.get_cur_file(msg.chat.id)
		 	t = dbworker.get_answ(msg.chat.id)
		 	#change_one(msg.chat.id, file, ann)
		 	answ = await true_answ(t)
		 	y = "Неправильно."
		 	te = y + answ
		 	await bot.send_message(chat_id = msg.chat.id, text = te)
		 await in_training(msg.chat.id)
	elif dbworker.get_state(msg.chat.id) == int(config.States.S_THEME): #человек в темах для разговора
		text1 = azuretext.suggest(text)
		await bot.send_message(chat_id = msg.chat.id,text = text1, reply_markup = kb.inline_kb_back)
	elif dbworker.get_state(msg.chat.id) == int(config.States.S_OTV): #человек в обратной связи
		text1 = 'Спасибо, что поделился.'
		await bot.send_message(chat_id = msg.chat.id,text = text1, reply_markup = kb.inline_kb_back)
	else:
		pass
コード例 #3
0
def get_journals(message):
    strpd_text = message.text.strip(',;_\'"').lower()
    user_id = message.chat.id
    if strpd_text not in ['lancet']:
        if not re.search('[a-zA-z]', strpd_text):
            bot.send_message(
                user_id, 'I\'m pretty sure no journal in the world is '
                'named like that. A letter is worth a thousand '
                'numbers in this case.\n'
                'If you\'re somehow stuck - just do a new /search'
                ' or even /start, I promise, I will still '
                ' remember you.')
        else:
            bot.send_message(user_id, 'Cmon man, just type in "lancet"')
    else:
        user_state = db.get_state(user_id)
        keywords_type = ''
        if user_state == sts.S_SEARCH_KEYWORDS.value:
            keywords_type = 'SEARCH'
        elif user_state == sts.S_SUB_KEYWORDS.value:
            keywords_type = 'SUB'

        db.set_user_terms(user_id, strpd_text, keywords_type, 'JOURNALS')
        next_state = f'sts.S_{keywords_type}_JOURNALS.value'
        exec(f'db.set_user_state(user_id, {next_state})')

        if db.get_state(user_id) == sts.S_SEARCH_JOURNALS.value:
            collected_articles = collect_articles(user_id, keywords_type)
            send_articles(user_id, collected_articles, keywords_type)
            db.set_user_state(user_id, sts.S_START.value)

        elif db.get_state(user_id) == sts.S_SUB_JOURNALS.value:
            user_keywords = db.get_keywords(user_id, 'SUB').split()
            user_journals = db.get_journals(user_id, 'SUB').split()

            collected_data = db.articles_by_keywords(user_keywords,
                                                     user_journals)
            if not collected_data:
                bot.send_message(
                    user_id, 'Fair warning:\nI have no  '
                    'matches with those keywords'
                    ' in my archive. Your '
                    'subscription probably won\'t'
                    'yield any results.')
            else:
                schedule_job(user_id)
                bot.send_message(user_id, 'Great! You have '
                                 'successfully subscribed!')
                db.set_user_state(user_id, sts.S_START.value)
コード例 #4
0
def cmd_start(message):
    state = dbworker.get_state(message.chat.id)
    if state == dbworker.S_START:
        bot.send_message(
            message.chat.id,
            "Кажется, кто-то обещал отправить своё имя, но так и не сделал этого :( Жду..."
        )
    elif state == dbworker.S_NAME:
        bot.send_message(
            message.chat.id,
            "Кажется, кто-то обещал отправить свой телефон, но так и не сделал этого :( Жду..."
        )
    elif state == dbworker.S_PHONE:
        bot.send_message(
            message.chat.id,
            "Кажется, кто-то обещал отправить свою почту, но так и не сделал этого :( Жду..."
        )
    elif state == dbworker.S_EMAIL:
        bot.send_message(
            message.chat.id,
            "Кажется, кто-то обещал отправить свое местопооложение, но так и не сделал этого :( Жду...",
            reply_markup=keyboard2)
    elif state == dbworker.S_ADDRESS:
        bot.send_message(
            message.chat.id,
            "Кажется, кто-то обещал отправить свои пожелания, но так и не сделал этого :( Жду..."
        )
    elif state == dbworker.S_WISH:
        bot.send_message(message.chat.id,
                         "Я все про вас знаю:)")  #, reply_markup=keyboard3)
    else:
        bot.send_message(message.chat.id,
                         "Привет! Введи свои ФИО",
                         reply_markup=keyboard1)
コード例 #5
0
def get_keywords(message):
    strpd_text = message.text.strip(',;_\'"')

    if not re.search('[A-Z a-z]', strpd_text):
        bot.send_message(
            message.chat.id, 'Sorry, I won\'t be able to find those keywords, '
            'try leaning more towards letters, not numbers.\n'
            'For example: instead of "covid-19 try "covid".\n'
            'If you\'re somehow stuck - just do a new /search'
            ' or even /start, I promise, I will still '
            ' remember you.')
    else:
        user_state = db.get_state(message.chat.id)
        keywords_type = ''
        if user_state == sts.S_SEARCH.value:
            keywords_type = 'SEARCH'
        elif user_state == sts.S_SUB_TIME.value:
            keywords_type = 'SUB'

        db.set_user_terms(message.chat.id, strpd_text, keywords_type,
                          'KEYWORDS')
        bot.send_message(
            message.chat.id,
            'Nice! Now send me the names of the journals you want'
            ' me to search in. Sadly at moment I can only '
            'look for things in one journal - \'Lancet\'. But I '
            'promise to become more diligent in the future. ')

        next_state = f'sts.S_{keywords_type}_KEYWORDS.value'
        exec(f'db.set_user_state(message.chat.id, {next_state})')
コード例 #6
0
ファイル: new_bot.py プロジェクト: rgalyeon/bot_for_test
def cmd_start(message):
    # Проверяем состояние игрока
    state = dbworker.get_state(message.chat.id)
    if state == States.S_TEST.value:
        bot.send_message(message.chat.id, "Кажется, ты хотел выбрать тест. Пиши /test[номер задания] "
                                          "и следуй дальнейшим инструкциям")
    elif state == States.S_SWITCH.value:
        bot.send_message(message.chat.id, "Кажется, ты забыл включить/выключить проверку задания")
    elif state == States.S_DOC.value:
        bot.send_message(message.chat.id, "Кажется, кто-то хотел отправить txt файл с заданием, "
                                          "но так и не сделал этого :( Жду...")
    elif state == States.S_START.value:
        bot.send_message(message.chat.id, "Ты можешь выбрать следующее задание с помощью команды"
                                          "/test[номер задания]")
        dbworker.update_state(message.chat.id, States.S_TEST.value)
    else:  # Под "остальным" понимаем состояние "0" - начало диалога
        bot.send_message(message.chat.id, "Привет! Выбирай задание с помощью команды "
                                          "/test[номер задания]")
        dbworker.remove_id(message.chat.id)
        dbworker.add_states(message.chat.id, States.S_TEST.value)
コード例 #7
0
    keyboard = types.InlineKeyboardMarkup()
    callback1 = types.InlineKeyboardButton(text='Вывести портфель', callback_data='Show crypto')
    callback2 = types.InlineKeyboardButton(text='Добавить', callback_data='Add')
    callback3 = types.InlineKeyboardButton(text='Удалить', callback_data='Delete')
    keyboard.add(callback1)
    keyboard.add(callback2, callback3)
    if dbworker.get_status(message.chat.id) is True:
        status = ['включены', 'отключения', '/off']
    else:
        status = ['выключены', 'включения', '/on']
    bot.send_message(message.chat.id, 'Уведомления о изменении ' + status[0] + ', для ' +
                     status[1] + ' используйте команду ' + status[2], reply_markup=keyboard)


@bot.message_handler(func=lambda message: (message.text and
                                           dbworker.get_state(message.chat.id) == config.States.S_ADD_CRYPTO.value))
def add_crypto(message):
    #  Поиск криптовалюты в базе данных. Если найдено, то добавляем пользователю криптовалюту в портфель и выводим:
    db_result = dbworker.add_crypto(message.chat.id, message.text)
    if db_result is False:
        bot.send_message(message.chat.id, 'К сожалению такая криптовалюта не найдена. Возможно вы допустили ошибку, '
                                          'попробуйте еще раз.')
    else:
        keyboard = types.InlineKeyboardMarkup()
        callback1 = types.InlineKeyboardButton(text='Вывести портфель', callback_data='Show crypto')
        callback2 = types.InlineKeyboardButton(text='Добавить', callback_data='Add')
        callback3 = types.InlineKeyboardButton(text='Удалить', callback_data='Delete')
        keyboard.add(callback1)
        keyboard.add(callback2, callback3)
        bot.send_message(message.chat.id, db_result, reply_markup=keyboard)
        dbworker.set_state(message.chat.id, config.States.S_CLEAR_STATE.value)
コード例 #8
0
async def send(callback_query: types.CallbackQuery):
    code = callback_query.data
    code = int(code)
    if code == 1:
    	await bot.edit_message_text(chat_id=callback_query.message.chat.id, message_id=callback_query.message.message_id,text = "Эмоции", reply_markup = kb.inline_kb_emotion)
    elif code == 2:
    	await bot.edit_message_text(chat_id=callback_query.message.chat.id, message_id=callback_query.message.message_id,text = "Темы для разговора. Напиши мне последнее, о чем ты говорил с собеседником или перешли его сообщение, и я подскажу, как продолжить разговор :)", reply_markup = kb.inline_kb_back)
    	dbworker.set_state(callback_query.message.chat.id, int(config.States.S_THEME), "_", 0)
    elif code == 3:
    	await bot.edit_message_text(chat_id=callback_query.message.chat.id, message_id=callback_query.message.message_id,text = "Описание", reply_markup = kb.inline_kb_des)
    elif code == 4:
    	dbworker.set_state(callback_query.message.chat.id, int(config.States.S_TRAIN), "_", 0)
    	chat = callback_query.message.chat.id
    	if dbworker.was1(callback_query.message.chat.id) == True:
    		dbworker.was(callback_query.message.chat.id)
    	await bot.delete_message(callback_query.message.chat.id, callback_query.message.message_id)
    	await bot.send_message(chat_id=callback_query.message.chat.id, text = "На фотографии изображен либо человек, либо ситуация, описывающая эмоции. Давай попробуем определить, какие")
    	await in_training(chat)
    elif code == 5:
    	if dbworker.get_state(callback_query.message.chat.id) == int(config.States.S_TRAIN):
    		await bot.send_message(chat_id = callback_query.message.chat.id,text = "Привет :) я могу помочь тебе в общении с людьми. Чтобы получить подробную информацию нажми на команду /help. ", reply_markup=kb.inline_kb_start)
    	else:
    		await bot.edit_message_text(chat_id=callback_query.message.chat.id, message_id=callback_query.message.message_id,text = "Привет :) я могу помочь тебе в общении с людьми. Чтобы получить подробную информацию нажми на команду /help.", reply_markup = kb.inline_kb_start)
    	dbworker.set_state(callback_query.message.chat.id, int(config.States.S_START), "_", 0)
    elif code == 6:
    	captio = '<b>Радость</b>\n<i>Аналоги</i>: Восторг, Ликование, Блаженство, Восхищение\n\nСчастливый человек улыбается. Это самый верный признак радости, удовлетворенности и всех сопряженных эмоций. В настоящей улыбке счастливого человека участвует все лицо: от бровей до подбородка. Этим она отличается от улыбки фальшивой: притворщик поднимает уголки губ, не задействуя щеки и мышцы вокруг глаз. \n\n<i>Выражение лица</i>: Губы растянуты за счет поднятия щек, в уголках глаз появляются морщинки, человек как будто немного жмурится от удовольствия.\n\n<i>Положение тела</i>: Люди двигаются легко и энергично, шагают широко и позволяют рукам раскачиваться.'
    	await bot.delete_message(callback_query.message.chat.id, callback_query.message.message_id)
    	ran = dbworker.photo_des('happy1.png')
    	await bot.send_photo(chat_id=callback_query.message.chat.id,photo = ran,caption= captio,parse_mode=types.ParseMode.HTML, reply_markup = kb.inline_kb_des1)
    elif code == 7:
    	captio = '<b>Злость</b>\n<i>Аналоги</i>: Гнев, Раздражение, Ярость, Неистовство, Ненависть\n\n<i>Выражение лица</i>: брови нахмурены, глубокая складка на стыке бровей над переносицей;зубы стиснуты, скулы напряжены;рот закрыт, губы немного поджаты и сужены;глаза «страшные», т. е. открыты так широко, насколько позволяют опущенные брови;лицо немного наклонено вперед, взгляд исподлобья. \n\n<i>Положение тела</i>: Показывая пальцем на кого-то, человек демонстрирует агрессию; скрещенные руки на груди; сжатые в кулаки руки; корпус направлен вперед.'
    	ran = dbworker.photo_des('anger1.png')
    	await bot.delete_message(callback_query.message.chat.id, callback_query.message.message_id)
    	await bot.send_photo(chat_id=callback_query.message.chat.id,photo = ran,caption= captio,parse_mode=types.ParseMode.HTML, reply_markup = kb.inline_kb_des1)
    elif code == 8:
    	captio = '<b>Страх</b>\n<i>Аналоги</i>: Беспокойство, Опасение, Настороженность, Тревожность, Испуг, Ужас\n\n<i>Выражение лица</i>: Брови подняты, сужены и вытянуты; морщинка над переносицей на стыке бровей; приподнятые верхние веки; рот приоткрыт, губы напряжены и слегка растянуты; глаза могут быть широко открыты. \n\n<i>Положение тела</i>: Движения того, кто испытывает страх, резкие и нерешительные. Он склонен поворачиваться боком к другим, пряча уязвимый торс, съеживаться, трястись.'
    	ran = dbworker.photo_des('fear1.png')
    	await bot.delete_message(callback_query.message.chat.id, callback_query.message.message_id)
    	await bot.send_photo(chat_id=callback_query.message.chat.id,photo = ran,caption= captio,parse_mode=types.ParseMode.HTML, reply_markup = kb.inline_kb_des1)
    elif code == 9:
    	captio = '<b>Отвращение</b>\n<i>Аналоги</i>: Омерзение, Гадливость, Неприязнь\n\nВыражение отвращения называют «гримасой», т. к. в нем участвуют все лицевые мышцы, лицо человека резко преображается. Гримасу отвращения трудно с чем-то спутать, т. к. ни одна эмоция не вызывает столько мышечных сокращений сразу: под воздействием отвратительного зрелища лицо буквально сморщивается. \n\n<i>Выражение лица</i>: щеки подняты, переносица наморщена; глаза сильно сужены; рот приоткрыт, обнажены верхние зубы за счет приподнятой верхней губы. \n\n<i>Положение тела</i>: Сведенные вперед плечи, закрывающаяся поза, "защищающающаяся" от неприятного, корпус отодведён назад.'
    	ran = dbworker.photo_des('disgust1.png')
    	await bot.delete_message(callback_query.message.chat.id, callback_query.message.message_id)
    	await bot.send_photo(chat_id=callback_query.message.chat.id,photo = ran,caption= captio,parse_mode=types.ParseMode.HTML, reply_markup = kb.inline_kb_des1)
    elif code == 10:
    	captio = '<b>Грусть</b>\n<i>Аналоги</i>: Грусть, Тоска, Ностальгия, Уныние, Безнадежность, Скорбь\n\nГрусть принято считать свойством взгляда, отсюда выражения вроде «грустные глаза», «тоска во взгляде» и т. п. На самом деле, единственная роль взгляда в грустном выражении лица – его отрешенность или направленность вниз в одну точку.\n\n<i>Выражение лица</i>: взгляд невидящий, рассеянный, направленный вовнутрь; глаза полуприкрыты; опущенные уголки губ в противоположность улыбке; рот закрыт, нижняя губа может быть немного выставлена вперед.\n\n<i>Положение тела</i>: Проявления грусти заметнее всего в верхней части торса — это слегка опущенные плечи и поникшая голова.'
    	ran = dbworker.photo_des('sadness1.png')
    	await bot.delete_message(callback_query.message.chat.id, callback_query.message.message_id)
    	await bot.send_photo(chat_id=callback_query.message.chat.id,photo = ran,caption= captio,parse_mode=types.ParseMode.HTML, reply_markup = kb.inline_kb_des1)
    elif code == 11:
    	captio = '<b>Спокойствие</b>\n<i>Аналоги</i>: Умиротворение, Довольство, Удовлетворение\n\n<i>Выражение лица</i>: Лицо малоэмоционально, можно спутать с грустью, но взгляд подвижен, может быть лёгкая улыбка без зубов. \n\n<i>Положение тела</i>: Тело расслаблено, спина не напряжена, у большинства свои отличительные позы расслабленности.'
    	ran = dbworker.photo_des('contentment1.png')
    	await bot.delete_message(callback_query.message.chat.id, callback_query.message.message_id)
    	await bot.send_photo(chat_id=callback_query.message.chat.id,photo = ran,caption= captio,parse_mode=types.ParseMode.HTML, reply_markup = kb.inline_kb_des1)
    elif code == 12:
    	t = dbworker.get_answ(callback_query.message.chat.id)
    	tex =  await true_answ(t)
    	await bot.send_message(chat_id=callback_query.message.chat.id, text = tex)
    	await in_training(callback_query.message.chat.id)
    elif code == 13:
    	cha = callback_query.message.chat.id
    	await bot.delete_message(callback_query.message.chat.id, callback_query.message.message_id)
    	await bot.send_message(chat_id=cha, text = "Описание", reply_markup = kb.inline_kb_des)
    elif code == 14:
    	await bot.delete_message(callback_query.message.chat.id, callback_query.message.message_id)
    	dbworker.set_state(callback_query.message.chat.id, int(config.States.S_OTV), "_", 0)
    	await bot.send_message(chat_id=callback_query.message.chat.id, text = "Если тебе есть, что сказать, напиши это сюда", reply_markup = kb.inline_kb_back)
コード例 #9
0
    elif state == dbworker.S_WISH:
        bot.send_message(message.chat.id,
                         "Я все про вас знаю:)")  #, reply_markup=keyboard3)
    else:
        bot.send_message(message.chat.id,
                         "Привет! Введи свои ФИО",
                         reply_markup=keyboard1)


@bot.message_handler(commands=['reset'])
def user_delete_all(message):
    dbworker.del_all(message.chat.id)
    bot.send_message(message.chat.id, "Удалил все. Введи /start")


@bot.message_handler(func=lambda message: dbworker.get_state(message.chat.id)
                     == dbworker.S_START)
def user_entering_name(message):
    bot.send_message(
        message.chat.id,
        "Отличное имя, запомню! Теперь укажи, пожалуйста, свой телефон")
    dbworker.save_name_value(message.chat.id, message.text, dbworker.S_NAME)


@bot.message_handler(
    func=lambda message: dbworker.get_state(message.chat.id) == dbworker.S_NAME
)
def user_entering_phone(message):
    if dbworker.check_value(message.text, dbworker.phone_pattern):
        bot.send_message(message.chat.id,
                         "Спасибо! Теперь укажи, пожалуйста, свой e-mail.")
コード例 #10
0
ファイル: new_bot.py プロジェクト: rgalyeon/bot_for_test
        bot.send_message(message.chat.id, "Ты можешь выбрать следующее задание с помощью команды"
                                          "/test[номер задания]")
        dbworker.update_state(message.chat.id, States.S_TEST.value)
    else:  # Под "остальным" понимаем состояние "0" - начало диалога
        bot.send_message(message.chat.id, "Привет! Выбирай задание с помощью команды "
                                          "/test[номер задания]")
        dbworker.remove_id(message.chat.id)
        dbworker.add_states(message.chat.id, States.S_TEST.value)

"""
Этот хэндлер работает с командами /test[n].
Админов он перенаправляет на On/Off теста
Игроков на отправку документа
"""
@bot.message_handler(commands=exercises_list,
                     func=lambda message: dbworker.get_state(message.chat.id) == States.S_TEST.value)
def cmd_start(message):
    global index
    # Считывание номера задания
    index = ''.join(map(str, message.text.split('/test')))
    if members_dict[message.chat.id] == "admin":
        bot.send_message(message.chat.id, " Тест {} \n"
                                                 "On - включить проверку \n"
                                                 "Off - выключить проверку ".format(index))
        dbworker.update_state(message.chat.id, States.S_SWITCH.value)
    elif members_dict[message.chat.id] == "player":
        if ex_dict['ex' + index]['enable'] is True:
            bot.send_message(message.chat.id, "Жду от тебя задание №{} в формате txt".format(index))
            dbworker.update_state(message.chat.id, States.S_DOC.value)
        elif ex_dict['ex' + index]['enable'] is False:
            bot.send_message(message.chat.id, "Проверка задания №{} пока закрыта".format(index))
コード例 #11
0
    department = dbworker.get_department_value(call.message.chat.id)
    if department == 1:
        result_message = GetSchedule.print_data_schedule(
            station_ids[2], station_ids[1])
    else:
        result_message = GetSchedule.print_lviv_schedule(
            station_ids[2], station_ids[1])
    for i in range(len(result_message) - 1):
        bot.send_message(call.message.chat.id, result_message[i])
    bot.send_message(call.message.chat.id,
                     result_message[-1],
                     reply_markup=keyboard)
    dbworker.set_state(call.message.chat.id, config.States.S_START.value)


@bot.message_handler(func=lambda message: (message.text and dbworker.get_state(
    message.chat.id) == config.States.S_SECONDSTATION.value))
def schedule_search(message):
    result = dbworker.fetch_stations(message.text, message.chat.id)
    if not result:
        bot.send_message(message.chat.id,
                         'К сожалению такую станцию найти не удалось')
        dbworker.set_state(message.chat.id, config.States.S_START.value)
    else:
        keyboard = types.InlineKeyboardMarkup()
        result_message = 'Выберите станцию из списка:\n\n'
        for station in result:
            result_message += station[1] + '\n' + station[2] + '\n\n'
            keyboard.add(
                types.InlineKeyboardButton(text=station[1],
                                           callback_data='Second_station ' +
                                           str(station[0])))
コード例 #12
0
        if selected_days:
            db.set_user_state(user_id, sts.S_SUB_DAYS.value)
            db.set_mailing_days(user_id, ','.join(selected_days))
            bot.send_message(
                user_id, 'We are on track! '
                'Next order of business - time. '
                'To simplify the whole ordeal - '
                'just send me one number from 0 to 23 '
                '- that would be the hour of day at '
                'which you would want to recieve your '
                'articles.')
        else:
            bot.send_message(user_id, 'Please select at least one day.')


@bot.message_handler(func=lambda message: db.get_state(message.chat.id) == sts.
                     S_SUB_DAYS.value and message.text.strip().lower() not in
                     ('/search', '/subscribe', '/help', '/unsub'))
def get_time(message):
    user_id = message.chat.id
    time = message.text.strip()
    if not time.isnumeric():
        bot.send_message(
            user_id, 'That\'s not a very good input. '
            'I only need a time of day '
            'right now. One number from 0 to 23 '
            'will do nicely.')
    elif int(time) not in range(24):
        bot.send_message(
            user_id, 'So close! It\'s now a number, '
            'but it\'s still not in 0-23 range. '