def cmd_day(message): dbworker.del_state(str(message.chat.id) + 'day') if message.text.lower().strip() == '/yesterday': #day = 1 bot.send_message( message.chat.id, "Ok, we've specified the date of statistics. It's time to go further. \n" "Do you want to know things about /regions or /countries?\n" "You could also type /info to know more about me.\n" "Type /reset to start anew.") dbworker.set_property(str(message.chat.id) + 'day', 'yesterday') # запишем день в базу dbworker.set_state(message.chat.id, config.States.S_COUNTRY_OR_REGION.value) elif message.text.lower().strip() == '/today': # day = 0 bot.send_message( message.chat.id, "Ok, we've specified the date for statistics. It's time to go further. \n" "Do you want to know things about /regions or /countries?\n" "You could also type /info to know more about me.\n" "Type /reset to start anew.") dbworker.set_property(str(message.chat.id) + 'day', 'today') # запишем день в базу dbworker.set_state(message.chat.id, config.States.S_COUNTRY_OR_REGION.value) else: bot.send_message( message.chat.id, "Seems like you've already got acquainted with me.\n" "Now you gotta specify the date for statistics.\n" "I have information for /yesterday and /today \n" "To recollect what we are doing now type /info.\n" "Type /reset to start anew.")
def frame(message): if message.text.isdigit(): full_list = [] longitude_km = (1 / (math.cos(longitude) * 111.3)) * int( message.text ) #добавляю сюда имя операции а не поле!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! latitude_km = (1 / 111) * int(message.text) coord = str(longitude) + ',' + str(latitude) spn = str(longitude_km) + ',' + str(latitude_km) r = requests.get('https://search-maps.yandex.ru/v1/?apikey=' + config.apikey1 + '&format=json&text=бар&lang=ru_RU&ll=' + coord + '&spn=' + spn + '&rspn=1&results=10') if len(r.json()['type']) > 0: g = r.json()['features'] for i, k in enumerate(g): l = [ i + 1, k['properties']['name'], k['properties']['description'], k['geometry']['coordinates'] ] full_list.append(l) df = pd.DataFrame(full_list) df.rename({ 1: 'name', 2: 'description', 3: 'coordinates' }, axis=1, inplace=True) df[['longitude', 'latitude']] = pd.DataFrame(df.coordinates.tolist(), index=df.index) df['href'] = 'https://yandex.ru/maps/?pt=' + df.longitude.map( str) + ',' + df.latitude.map(str) bot.send_message(message.chat.id, 'Бары рядом:\n') for i, n in enumerate(full_list): d = df.href[i] bot.send_message(message.chat.id, f'*{n[1]}* [{n[2]}]({d})', parse_mode='Markdown') else: bot.send_message(message.chat.id, "Не удалось найти бары рядом.\n") bot.send_message( message.chat.id, "Используя бесплатную версию API яндекса, я не могу сохранять геоданные.\n" ) bot.send_message( message.chat.id, "Поэтому мы можем попробовать только сначала 😂 /reset.\n") dbworker.del_state(message.chat.id) else: bot.send_message(message.chat.id, "Не правильно введены границы поиска в км.\n") bot.send_message(message.chat.id, "Нужно ввести целое число.\n") bot.send_message( message.chat.id, "Я не смогла сохранить твои данные на предыдущем шаге из-за условий использования бесплатного API Яндекса.\n" ) bot.send_message(message.chat.id, "Попробуем еще раз? /geo.\n")
def enter_country_or_region(message): # global countries, country dbworker.del_state(str(message.chat.id) + 'countries') # Если в базе когда-то был выбор списка стран, удалим (мы же новый пишем) countries = [x.strip() for x in re.split(',', message.text)] country = dbworker.get_current_state(str(message.chat.id)+'country') bot.send_message(message.chat.id, 'Thank you, I\'m checkin\' your info.') x = stat()['Country'] if country.strip() == 'regions': lst = [i for i in list(x[:8]) if i != ''] else: lst = [i for i in x[8:220]] # bot.send_message(message.chat.id,', '.join(lst)) errors = [i for i in countries if i not in lst] if errors == []: if countries != []: bot.send_message(message.chat.id, "Ok, Now you gotta specify the information you need. \n" "Enter the list of fields\n" "Type /listfields to get the list of available fields.\n" "You could type /info to recollect what we are doing now.\n" "Type /reset to start anew.") dbworker.set_state(str(message.chat.id)+'countries', ', '.join(countries)) dbworker.set_state(message.chat.id, config.States.S_ENTER_FIELD_LIST.value) else: bot.send_message(message.chat.id, "Something has gone wrong! Enter the list of countries/regions properly") else: bot.send_message(message.chat.id, "There\'s a number of countries/regions with typos or something that\'s not in our list.\n" "Here they are:" + ", ".join(errors)+"\n" "To get lists of available regions/countries use /listcountries or /listregions")
def oldscool_or_newera(message): dbworker.del_state(str(message.chat.id)) if message.text.lower().strip() == '/oldschool': bot.send_message( message.chat.id, "Ok, you want to know more about Classic Doctor Who seasons from 1963 till 1989. \n" "Enter the Doctor's \"reincarnation\" name.\n" "Type /list_doctors to get the list of available fields.\n" "You could also type /info to recollect what we are doing now.\n" "Type /reset to start anew.") dbworker.set_state(str(message.chat.id), 'oldschool') # запишем день в базу dbworker.set_state(message.chat.id, config.States.S_NEWERA_OR_OLDSCHOOL.value) elif message.text.lower().strip() == '/newera': bot.send_message( message.chat.id, "Ok, you want to know more about Modern Doctor Who seasons, which srats since 2005. \n" "Enter the Doctor's \"new_reincarnation\" name.\n" "Type /list_new_doctors to get the list of available fields.\n" "You could also type /info to recollect what we are doing now.\n" "Type /reset to start anew.") dbworker.set_state(str(message.chat.id), 'newera') # запишем день в базу dbworker.set_state(message.chat.id, config.States.S_NEWERA_OR_OLDSCHOOL.value) else: bot.send_message( message.chat.id, "Something has gone wrong! Type either /oldschool or /newera.\n" "Type /info to recollect what we are doing now.\n" "Type /reset to start anew.")
def cmd_country_or_region(message): dbworker.del_state(str(message.chat.id) + 'content') if message.text.lower().strip() == '/doc': bot.send_message( message.chat.id, "Хорошо, я могу прислать статью.\n" "Чтобы посмотреть, о чём у меня есть информация, напиши /content.\n" "После этого выбери интересующие тебя темы и пришли мне их через запятую.\n" "Можешь написать /info, если забыл, как всё это работает.\n" "Чтобы начать заново, напиши /reset") dbworker.set_property(str(message.chat.id) + 'content', 'doc') # запишем день в базу dbworker.set_state(message.chat.id, config.States.S_ENTER_TYPE_OF_CONTENT.value) elif message.text.lower().strip() == '/vid': bot.send_message( message.chat.id, "Хорошо, я могу прислать видео.\n" "Чтобы посмотреть, о чём у меня есть информация, напиши /content.\n" "После этого выбери интересующие тебя темы и пришли мне их через запятую.\n" "Можешь написать /info, если забыл, как всё это работает.\n" "Чтобы начать заново, напиши /reset") dbworker.set_property(str(message.chat.id) + 'content', 'vid') dbworker.set_state(message.chat.id, config.States.S_ENTER_TYPE_OF_CONTENT.value) else: bot.send_message( message.chat.id, "Что-то пошло не так. Введи /doc или /vid.\n" "Напиши /info, чтобы я напомнил тебе, как я работаю.\n" "Напиши /reset, чтобы начать заново.")
def cmd_country_or_region(message): dbworker.del_state(str(message.chat.id) + 'country') if message.text.lower().strip() == '/countries': bot.send_message( message.chat.id, "Ok, you want to get statistics by country. \n" "Enter the list of countries delimited with a comma or just a single country.\n" "Type /listcountries to get the list of available fields.\n" "You could also type /info to recollect what we are doing now.\n" "Type /reset to start anew.") dbworker.set_property(str(message.chat.id) + 'country', 'countries') # запишем день в базу dbworker.set_state(message.chat.id, config.States.S_ENTER_COUNTRY_OR_REGION.value) elif message.text.lower().strip() == '/regions': # day = 0 bot.send_message( message.chat.id, "Ok, you want to get statistics by region. \n" "Enter the list of regions delimited with a comma or just a single region.\n" "Type /listregions to get the list of available fields.\n" "You could also type /info to recollect what we are doing now.\n" "Type /reset to start anew.") dbworker.set_property(str(message.chat.id) + 'country', 'regions') # запишем день в базу dbworker.set_state(message.chat.id, config.States.S_ENTER_COUNTRY_OR_REGION.value) else: bot.send_message( message.chat.id, "Something has gone wrong! Type either countries or regions.\n" "Type /info to recollect what we are doing now.\n" "Type /reset to start anew.")
def cmd_reset(message): dbworker.del_state(message.chat.id) bot.send_message( message.chat.id, "Давай попробуем еще раз!\n" "Поделись со мной своими геоданными и введи границы поиска бара.\n" "Я подберу несколько классных бара рядом.") bot.send_message(message.chat.id, "Давай начнем /start.\n" "Команда /reset начать заново.")
def cmd_reset(message): # удаляем записи из базы по идентификаторам dbworker.del_state(str(message.chat.id) + 'ccy') dbworker.del_state(str(message.chat.id) + 'BEGIN_DAY') bot.send_message( message.chat.id, "Давай сделаем новый график.\n" "1) Сначала нужно выбрать и ввести валютную пару.\n" "2) Затем требуется указать начальную дату в формате \"ДД.ММ.ГГГГ\".\n" "Используй /currencies для вывода списка валют или /commands для поиска команд." ) dbworker.set_state(message.chat.id, dbworker.States.S_ENTER_CCY.value)
def cmd_info(message): dbworker.del_state(message.chat.id) bot.send_message( message.chat.id, "*Я - Пятница!* 🎉\n" "Готова подобрать для тебя хороший барчик поблизости и проложить маршрут.\n" "Во-первых, тебе нужно поделиться со мной своими координатами без этого никак.\n" "Затем задать рамки поиска бара в км.\n" "Я подберу несколько классных бара рядом.", parse_mode='Markdown') bot.send_message( message.chat.id, "Ты выберишь один из них.\n" "А я провожу тебя до него.\n" "Давай начнем /start.\n" "Команда /reset начать заново.")
def about_doctor(message): n = message.text.strip() dbworker.del_state(str(message.chat.id)) if n in Classic_Docs: bot.send_message(message.chat.id, Classic_Doctors_About[n]) index = Classic_Docs.index(n) if index == 0: bot.send_photo(message.chat.id, pict1[randint(0, 5)]) elif index == 1: bot.send_photo(message.chat.id, pict2[randint(0, 2)]) elif index == 2: bot.send_photo(message.chat.id, pict3[randint(0, 3)]) elif index == 3: bot.send_photo(message.chat.id, pict4[randint(0, 2)]) elif index == 4: bot.send_photo(message.chat.id, pict5[randint(0, 7)]) elif index == 5: bot.send_photo(message.chat.id, pict6[randint(0, 4)]) elif index == 6: bot.send_photo(message.chat.id, pict7[randint(0, 3)]) elif index == 7: bot.send_photo(message.chat.id, pict8[randint(0, 2)]) dbworker.set_state(str(message.chat.id), n) dbworker.set_state(message.chat.id, config.States.S_ENTER_WHICH_DOCTOR.value) elif n in New_Docs: bot.send_message(message.chat.id, New_Doctors_About[n]) index = New_Docs.index(n) if index == 0: bot.send_photo(message.chat.id, pictNo[randint(0, 2)]) elif index == 1: bot.send_photo(message.chat.id, pict9[randint(0, 3)]) elif index == 2: bot.send_photo(message.chat.id, pict10[randint(0, 3)]) elif index == 3: bot.send_photo(message.chat.id, pict11[randint(0, 3)]) elif index == 4: bot.send_photo(message.chat.id, pict12[randint(0, 6)]) elif index == 5: bot.send_photo(message.chat.id, pict13[randint(0, 4)]) dbworker.set_state(str(message.chat.id), n) dbworker.set_state(message.chat.id, config.States.S_ENTER_WHICH_DOCTOR.value) else: bot.send_message( message.chat.id, "Something has gone wrong! Type name from /list_new_doctors or /list_doctors.\n" "Type /info to recollect what we are doing now.\n" "Type /reset to start anew.")
def cmd_start(message): dbworker.set_state(message.chat.id, dbworker.States.S_START.value) # удаляем записи из базы по идентификаторам dbworker.del_state(str(message.chat.id) + 'ccy') dbworker.del_state(str(message.chat.id) + 'BEGIN_DAY') # Под "остальным" понимаем состояние "0" - начало диалога bot.send_message( message.chat.id, "Привет, это FX-бот, он поможет тебе получить график валюты. \n" "1) Сначала нужно выбрать и ввести валютную пару.\n" "Список валютных пар можно посмотреть через /currencies.\n" "2) После выбора валюты требуется указать начальную дату в формате \"ДД.ММ.ГГГГ\"\n" "Напечатав /commands, ты увидишь набор доступных команд.\n" "Для возврата в начало используй /reset.") dbworker.set_state(message.chat.id, dbworker.States.S_ENTER_CCY.value)
def cmd_listregions(message): x = stat('https://cbr.ru/currency_base/daily/') curr_dict = {} for i in x.iterrows(): # print() curr_dict[i[1][0]] = [i[1][2], i[1][3], i[1][1]] msg_list = [] for i in curr_dict: msg_list.append(str(i) + ": " + str(round(float(curr_dict[i][1].replace(",",".")),2)) + " руб. за " + str(curr_dict[i][2]) + " " + str( curr_dict[i][0]) + "\n") mess_tosend = "" for i in msg_list: mess_tosend = mess_tosend + i # + "\n" #print(message) bot.send_message(message.chat.id, "Курсы валют, установленные ЦБ РФ на сегодня:") bot.send_message(message.chat.id, mess_tosend) #bot.send_message(message.chat.id, tabulate(x, headers=x.columns, tablefmt="grid")) dbworker.del_state(str(message.chat.id) + 'country')
def company_or_rating(message): # на всякий случай, очищаем выбор пользователя в базе dbworker.del_state(str(message.chat.id) + '_rating_or_company') # обрабатываем ввод пользователя if message.text.lower().strip() == '/company': bot.send_message( message.chat.id, "Отлично! Тебе нужна информация о компании.\n" "Пожалуйста, введи название компании.\n" "\n" "Набери /info, чтобы узнать чем я могу тебе помочь\n" "Набери /reset, чтобы сбросить выбранные параметры") # запишем выбор пользователя dbworker.set_state( str(message.chat.id) + '_rating_or_company', 'company') # Ждем от пользователя ввода названия компании или поля для формирования рейтинга dbworker.set_state(message.chat.id, config.States.S_ENTER_RATING_OR_COMPANY.value) elif message.text.lower().strip() == '/rating': bot.send_message( message.chat.id, "Отлично! Тебе нужен общий рейтинг компаний\n" "Пожалуйста, введи поле для формирования рейтинга.\n" "\n" "Набери /listfields, чтобы узнать список полей\n" "Набери /info, чтобы узнать чем я могу тебе помочь\n" "Набери /reset, чтобы сбросить выбранные параметры") # запишем выбор пользователя dbworker.set_state( str(message.chat.id) + '_rating_or_company', 'rating') # Ждем от пользователя ввода названия компании или поля для формирования рейтинга dbworker.set_state(message.chat.id, config.States.S_ENTER_RATING_OR_COMPANY.value) else: bot.send_message( message.chat.id, "Я так не играю. \"Не понимаю я по вашему.\"\n" "\n" "Набери /info, чтобы узнать чем я могу тебе помочь\n" "Набери /reset, чтобы сбросить выбранные параметры")
def get_CCY(message): dbworker.del_state( str(message.chat.id) + 'ccy') # Если в базе когда-то был CCY, удалим (мы же новый пишем) if message.text.upper().strip() in ccy_code_dict.keys(): dbworker.set_state( str(message.chat.id) + 'ccy', message.text.upper().strip()) bot.send_message( message.chat.id, "OK, ты выбрал валюту: " + message.text.upper() + "\n" "Теперь нужно указать начальную дату в формате \"ДД.ММ.ГГГГ\".\n" "Если ошибся, то жми /reset для запуска сначала.") dbworker.set_state(message.chat.id, dbworker.States.S_ENTER_BEGIN_DAY.value) else: bot.send_message( message.chat.id, "Либо валюта была введена с ошибками, либо её нет среди /currencies.\n" "Попробуй нажать /reset для запуска сначала.")
def cmd_day(message): dbworker.del_state(str(message.chat.id) + 'field') if message.text.lower().strip() == '/math': bot.send_message( message.chat.id, "Ок, математика. Давай дальше. \n" "Что тебе прислать? Статейку или видео?\n" "Для статьи напиши /doc, для видео - /vid.\n" "Не забудь, что /info показывает, что я могу делать.\n" "Напиши /reset, чтобы начать заново.") dbworker.set_property(str(message.chat.id) + 'field', 'math') # запишем день в базу dbworker.set_state(message.chat.id, config.States.S_TYPE_OF_INFO.value) elif message.text.lower().strip() == '/python': bot.send_message( message.chat.id, "Хорошо, давай по питону. \n" "Что тебе прислать? Статейку или видео?\n" "Для статьи напиши /doc, для видео - /vid.\n" "Не забудь, что /info показывает, что я могу делать.\n" "Напиши /reset, чтобы начать заново.") dbworker.set_property(str(message.chat.id) + 'field', 'python') # запишем день в базу dbworker.set_state(message.chat.id, config.States.S_TYPE_OF_INFO.value) elif message.text.lower().strip() == '/ml': bot.send_message( message.chat.id, "Ага, машинное обучение. \n" "Что тебе прислать? Статейку или видео?\n" "Для статьи напиши /doc, для видео - /vid.\n" "Не забудь, что /info показывает, что я могу делать.\n" "Напиши /reset, чтобы начать заново.") dbworker.set_property(str(message.chat.id) + 'field', 'ml') # запишем день в базу dbworker.set_state(message.chat.id, config.States.S_TYPE_OF_INFO.value) else: bot.send_message( message.chat.id, "Я не очень понял твой запрос.\n" "Сейчас тебе нужно выбрать, о чём ты хочешь получить информацию.\n" "Я могу прислать тебе информацию по математике, питону или машинному обучению. \n" "Напиши /math, /python или /ml.\n" "Не забудь, что /info показывает, что я могу делать.\n" "Напиши /reset, чтобы начать заново.")
def cmd_list_countries(message): dbworker.del_state(str(message.chat.id) + 'list_countries') countries = [x.strip() for x in re.split(',', message.text)] country = dbworker.get_current_state(str(message.chat.id) + 'country') bot.send_message(message.chat.id, 'Thank you, I\'m checkin\' your info.') x = stat()['Country'] if country.strip() == 'regions': lst = [i for i in list(x[:8]) if i != ''] else: lst = [i for i in list(x[8:231]) if i != ''] errors = [i for i in countries if i not in lst] if len(errors) == 0: if countries != list(): bot.send_message( message.chat.id, "Ok, Now you gotta specify the information you need. \n" "Enter the list of fields\n" "Type /listfields to get the list of available fields.\n" "You could type /info to recollect what we are doing now.\n" "Type /reset to start anew.") dbworker.set_property( str(message.chat.id) + 'list_countries', ', '.join(countries)) dbworker.set_state(message.chat.id, config.States.S_ENTER_FIELDS_LIST.value) else: bot.send_message( message.chat.id, "Something has gone wrong! Enter the list of countries/regions properly" ) else: bot.send_message( message.chat.id, "There\'s a number of countries/regions with typos or something that\'s not in our list.\n" "Here they are:" + ", ".join(errors) + "\n" "To get lists of available regions/countries use /listcountries or /listregions" )
def enter_the_day(message): dbworker.del_state(str(message.chat.id) + 'BEGIN_DAY') current_CCY = dbworker.get_current_state(str(message.chat.id) + 'ccy') current_date = message.text.lower().strip() if date_check(current_date): dbworker.set_state(str(message.chat.id) + 'BEGIN_DAY', current_date) bot.send_message( message.chat.id, 'Cпасибо за запрос, я ищу необходимые данные. Подожди несколько секунд.\n' ) if get_stat_from_finmarket(current_CCY, current_date) == "Error in Parsing": bot.send_message(message.chat.id, 'Данные на эту дату недоступны попробуй другую') else: my_f = open( current_CCY + '-' + str(current_date.replace('.', '-')) + '.png', 'rb') # создаем словарь фото files = {'photo': my_f} # отправляем это фото через сервер телеграма requests.post('https://api.telegram.org/bot' + config.token + '/sendPhoto?chat_id={}'.format(message.chat.id), files=files) # закрываем файл my_f.close() # удаляем файл os.remove(current_CCY + '-' + str(current_date.replace('.', '-')) + '.png') dbworker.set_state(message.chat.id, dbworker.States.S_START.value) else: bot.send_message( message.chat.id, "Дата была введена неверно, возможно год < 2010 или > 2020.\n" "Попробуй нажать /reset для запуска сначала.")
def cmd_reset(message): bot.send_message( message.chat.id, "Давай начнём заново.\n" "О чём ты хочешь получить информацию: /math, /python или /ml.\n" "Отправь /info или /commands, чтобы я напомнил тебе, что я умею.") bot.send_photo(message.chat.id, pict[randint(0, 9)]) dbworker.del_state(str(message.chat.id) + 'field') dbworker.del_state(str(message.chat.id) + 'content') dbworker.del_state(str(message.chat.id) + 'list_of_content') dbworker.set_state(message.chat.id, config.States.S_ENTER_FIELD.value)
def enter_field_list(message): # global fields fields = re.findall(r'\w+', message.text) bot.send_message(message.chat.id, 'Thank you, I\'m checkin\' your info.') lst = [ 'TotalCases', 'NewCases', 'TotalDeaths', 'NewDeaths', 'TotalRecovered', 'ActiveCases', 'SeriousCritical' ] # t = dbworker.get_current_state(str(message.chat.id) + 'day') if dbworker.get_current_state(str(message.chat.id) + 'day').strip() == 'today': day = 0 elif dbworker.get_current_state(str(message.chat.id) + 'day').strip() == 'yesterday': day = 1 else: pass # country = dbworker.get_current_state(str(message.chat.id) + 'country') countries = dbworker.get_current_state(str(message.chat.id) + 'countries').split(', ') errors = [i for i in fields if i not in lst] # print(errors) if errors == []: if fields != []: dbworker.set_state(message.chat.id, config_my.States.S_START.value) df = stat(day) for_sending = df[df.Country.isin(countries)][['Country', *fields]] dbworker.del_state(str(message.chat.id) + 'day') dbworker.del_state(str(message.chat.id) + 'country') dbworker.del_state(str(message.chat.id) + 'countries') bot.send_message( message.chat.id, tabulate(for_sending, headers=for_sending.columns, tablefmt="pipe")) else: bot.send_message( message.chat.id, "Something has gone wrong! Enter the list of fields properly") else: bot.send_message( message.chat.id, "There\'s a number of fields with typos or something that\'s not in our list.\n" "Here they are:" + ", ".join(errors) + "\n" "To get lists of available fields use /listfields")
def cmd_list_of_content(message): dbworker.del_state(str(message.chat.id) + 'list_of_content') if dbworker.get_current_state(str(message.chat.id) + 'field') == 'math' and \ dbworker.get_current_state(str(message.chat.id) + 'content') == 'doc': list_of_content = [ x.strip().lower() for x in re.split(',', message.text) ] bot.send_message(message.chat.id, 'Секунду, проверяю...') x = math_parsing() lst = [i for i in x.keys()] errors = [i for i in list_of_content if i not in lst] if len(errors) == 0: if list_of_content != list(): bot.send_message( message.chat.id, "Хорошо. Вы выбрали темы, которые Вам интересны.\n" "Теперь Вам нужно выбрать подтему, чтобы я мог прислать статью.\n" "Через пару секунд снизу появятся список этих самых подтем.\n" "Пришлите мне их через запятую.") time.sleep(5) for element in list_of_content: bot.send_message( message.chat.id, "Вы выбрали следующую тему: " + element.title() + "\n\n" + "- " + "\n- ".join(x[element].keys())) dbworker.set_property( str(message.chat.id) + 'list_of_content', ', '.join(list_of_content)) dbworker.set_state(message.chat.id, config.States.S_ENTER_SUBTOPICS_LIST.value) else: bot.send_message(message.chat.id, 'Введите список тем правильно!') else: bot.send_message( message.chat.id, "Ты где-то ошибся.\n" "Скорее всего здесь: " + ", ".join(errors) + "\n" "Чтобы посмотреть, как нужно вводить необходимую информацию, напиши /content" ) elif dbworker.get_current_state(str(message.chat.id) + 'field') == 'python' and \ dbworker.get_current_state(str(message.chat.id) + 'content') == 'doc': bot.send_message( message.chat.id, "Хорошо. Вы выбрали темы, которые Вам интересны.\n" "Теперь пришлите количество статей от 1 до 3") list_of_content = [ x.strip().lower() for x in re.split(',', message.text) ] dbworker.set_property( str(message.chat.id) + 'list_of_content', ', '.join(list_of_content)) dbworker.set_state(message.chat.id, config.States.S_ENTER_SUBTOPICS_LIST.value) elif dbworker.get_current_state(str(message.chat.id) + 'field') == 'ml' and \ dbworker.get_current_state(str(message.chat.id) + 'content') == 'doc': bot.send_message( message.chat.id, "Хорошо. Вы выбрали темы, которые Вам интересны.\n" "Теперь пришлите количество статей от 1 до 3") list_of_content = [ x.strip().lower() for x in re.split(',', message.text) ] dbworker.set_property( str(message.chat.id) + 'list_of_content', ', '.join(list_of_content)) dbworker.set_state(message.chat.id, config.States.S_ENTER_SUBTOPICS_LIST.value) elif dbworker.get_current_state(str(message.chat.id) + 'content') == 'vid': bot.send_message( message.chat.id, "Хорошо. Вы выбрали темы, которые Вам интересны.\n" "Теперь пришлите количество статей от 1 до 3") list_of_content = [ x.strip().lower() for x in re.split(',', message.text) ] dbworker.set_property( str(message.chat.id) + 'list_of_content', ', '.join(list_of_content)) dbworker.set_state(message.chat.id, config.States.S_ENTER_SUBTOPICS_LIST.value)
def cmd_topics(message): if dbworker.get_current_state(str(message.chat.id) + 'field') == 'math' and \ dbworker.get_current_state(str(message.chat.id) + 'content') == 'doc': subtopics = [x.strip().lower() for x in re.split(',', message.text)] bot.send_message(message.chat.id, 'Секунду, проверяю...') list_of_content = dbworker.get_current_state( str(message.chat.id) + 'list_of_content').split(', ') x = math_parsing() errors, links = [], [] info = [] for element in list_of_content: for j in x[element].keys(): info.append(j.replace(' ', ' ').lower()) for subtopic in subtopics: if subtopic.lower() not in info: errors.append(subtopic) print(x) if errors == []: if list_of_content != []: dbworker.set_state(message.chat.id, config.States.S_START.value) for element in list_of_content: for subtopic in subtopics: try: links.append( x[element.lower()][subtopic.title()].replace( ' ', '%20')) except: pass bot.send_message( message.chat.id, "Вот твои ссылки.\n" + '\n'.join(x for x in links)) dbworker.del_state(str(message.chat.id) + 'field') dbworker.del_state(str(message.chat.id) + 'content') dbworker.del_state(str(message.chat.id) + 'list_of_content') dbworker.set_state(message.chat.id, config.States.S_ENTER_FIELD.value) else: bot.send_message( message.chat.id, "Похоже, вы где-то ошиблись.\n" "Скорее всего здесь: " + ", ".join(errors) + "\n" "Я прислал тебе подтемы, тебе нужно выбрать из них.") elif dbworker.get_current_state(str(message.chat.id) + 'field') == 'python' and \ dbworker.get_current_state(str(message.chat.id) + 'content') == 'doc': py_topics = dbworker.get_current_state( str(message.chat.id) + 'list_of_content').split(', ') number_of_topics = message.text if number_of_topics.isdigit(): bot.send_message( message.chat.id, 'Секунду, проверяю...\n' 'Поиск может занять некоторое время...\n') x = py_parsing(number_of_topics, py_topics) if len(x) == 0: bot.send_message( message.chat.id, "Я ничего не нашёл.\n" "Возможно, ты ввёл запрос на русском.\n" "Либо я ничего не смог найти по твоей теме.\n" "Давай попробуем ещё раз.\n" "Введите интересующие вас темы через запятую.\n" "Введи /content, если запутался") dbworker.set_state(message.chat.id, config.States.S_ENTER_TYPE_OF_CONTENT.value) else: bot.send_message( message.chat.id, "Вот твои ссылки.\n" + '\n'.join(link for link in x)) dbworker.del_state(str(message.chat.id) + 'field') dbworker.del_state(str(message.chat.id) + 'content') dbworker.del_state(str(message.chat.id) + 'list_of_content') dbworker.set_state(message.chat.id, config.States.S_ENTER_FIELD.value) else: bot.send_message(message.chat.id, 'Нужно ввести цифру') elif dbworker.get_current_state(str(message.chat.id) + 'field') == 'ml' and \ dbworker.get_current_state(str(message.chat.id) + 'content') == 'doc': ml_topics = dbworker.get_current_state( str(message.chat.id) + 'list_of_content').split(', ') number_of_topics = message.text if number_of_topics.isdigit(): bot.send_message( message.chat.id, 'Секунду, проверяю...\n' 'Поиск может занять некоторое время...\n') x = ml_parsing(number_of_topics, ml_topics) if len(x) == 0: bot.send_message( message.chat.id, "Я ничего не нашёл.\n" "Возможно, ты ввёл запрос с ошибками.\n" "Либо я ничего не смог найти по твоей теме.\n" "Давай попробуем ещё раз.\n" "Введите интересующие вас темы через запятую.\n" "Введи /content, если запутался") dbworker.set_state(message.chat.id, config.States.S_ENTER_TYPE_OF_CONTENT.value) else: bot.send_message( message.chat.id, "Вот твои ссылки.\n" + '\n'.join(link for link in x)) dbworker.del_state(str(message.chat.id) + 'field') dbworker.del_state(str(message.chat.id) + 'content') dbworker.del_state(str(message.chat.id) + 'list_of_content') dbworker.set_state(message.chat.id, config.States.S_ENTER_FIELD.value) else: bot.send_message(message.chat.id, 'Нужно ввести цифру') elif dbworker.get_current_state(str(message.chat.id) + 'content') == 'vid': vid_topics = dbworker.get_current_state( str(message.chat.id) + 'list_of_content').split(', ') number_of_topics = message.text if number_of_topics.isdigit(): bot.send_message( message.chat.id, 'Секунду, проверяю...\n' 'Поиск может занять некоторое время...\n') x = youtube_parsing(number_of_topics, vid_topics) if len(x) == 0: bot.send_message( message.chat.id, "Я ничего не нашёл.\n" "Возможно, ты ввёл запрос с ошибками.\n" "Либо я ничего не смог найти по твоей теме.\n" "Давай попробуем ещё раз.\n" "Введите интересующие вас темы через запятую.") dbworker.set_state(message.chat.id, config.States.S_ENTER_TYPE_OF_CONTENT.value) else: bot.send_message( message.chat.id, "Вот твои ссылки.\n" + '\n'.join(link for link in x)) dbworker.del_state(str(message.chat.id) + 'field') dbworker.del_state(str(message.chat.id) + 'content') dbworker.del_state(str(message.chat.id) + 'list_of_content') dbworker.set_state(message.chat.id, config.States.S_ENTER_FIELD.value)