예제 #1
0
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.")
예제 #2
0
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")
예제 #3
0
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")
예제 #4
0
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.")
예제 #5
0
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, чтобы начать заново.")
예제 #6
0
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.")
예제 #7
0
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 начать заново.")
예제 #8
0
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)
예제 #9
0
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 начать заново.")
예제 #10
0
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.")
예제 #11
0
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)
예제 #12
0
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')
예제 #13
0
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, чтобы сбросить выбранные параметры")
예제 #14
0
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 для запуска сначала.")
예제 #15
0
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, чтобы начать заново.")
예제 #16
0
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"
        )
예제 #17
0
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 для запуска сначала.")
예제 #18
0
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)
예제 #19
0
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")
예제 #20
0
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)
예제 #21
0
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)