def get_all_places(user):
    all_queries = ['', 'ресторан', 'музей', 'парк', 'кино',
                   'магазин']  # '' - все места

    for query in all_queries:
        params = dict(
            client_id='2LT5KTOBNMCSHSNDC51KL5CPYOADWAL4GKUH1GNMIA2WF23S',
            client_secret='RCOAJRQUS2XEK3FK2TIWIZVIETYKEWQQWWPFLPLAXZT45XBA',
            v='20201125',
            ll='{},{}'.format(user.location.latitude, user.location.longitude),
            query=query,
            locale='ru',
            limit=15)

        req = requests.get(url=url, params=params)
        data = json.loads(req.text)['response']

        places = data['groups'][0]['items']
        places = sort_arr(places)

        if query == '':
            user.all_places = places
        if query == 'ресторан':
            user.food = places
        if query == 'музей':
            user.museums = places
        if query == 'парк':
            user.parks = places
        if query == 'кино':
            user.cinemas = places
        if query == 'магазин':
            user.shops = places

        users.save_users()
 def get_places_for_opros(user):
     try:
         # print('try')
         places.get_all_places(user)
         users.save_users()
     except:
         pass
    def handle_loc(message):
        check_user(message)
        cid = message.chat.id
        uid = message.from_user.id
        user = users.get_user(uid)

        bot.send_message(cid,
                         'Мы получили геолокацию',
                         reply_markup=global_markup)
        user.location = message.location
        user.is_have_location = True
        users.save_users()
Beispiel #4
0
def settings(path, params, env):
    allusers = users.load_users()
    user = __get_user(env, allusers)
    userid = str(user["sina_id"])

    if user:
        print "authorized"
        # authorized
        try:
            request_body_size = int(env.get("CONTENT_LENGTH", 0))
        except (ValueError):
            request_body_size = 0

        if request_body_size:
            # save settings
            request_body = env["wsgi.input"].read(request_body_size)
            d = parse_qs(request_body)
            allusers[userid]["twitter_name"] = twitter_name = d["twitter_name"][0]
            allusers[userid]["activated"] = d.get("activated") and True or False
            allusers[userid]["ignore_tag"] = d.get("ignore_tag", [""])[0]
            allusers[userid]["no_trunc"] = not d.get("keep_original")
            allusers[userid]["rasterize"] = d.get("rasterize") and True or False
            users.save_users(allusers)
            # redirect to synced
            status = "302 Found"
            headers = [
                ("Content-Type", "text/plain"),
                ("Location", "/synced"),
                ("Set-Cookie", "twitter_name=%s" % twitter_name),
            ]
            content = ""
        else:
            # render settings
            status = "200 OK"
            headers = [("Content-Type", "text/html;charset=UTF-8")]
            user["activated_checked"] = user["activated"] and 'checked="1"' or ""
            user["userinfo"] = __render_userinfo(user)
            user["ignore_tag"] = user["ignore_tag"].replace('"', """)
            user["keep_original"] = (not user.get("no_trunc", True)) and 'checked="1"' or ""
            user["rasterize_checked"] = user.get("rasterize") and 'checked="1"' or ""
            content = __template(dirname + "/settings.html", user).encode("utf-8")
    else:
        # unauthorized
        logger.info("unauthorized")
        status = "302 Found"
        headers = [("Content-Type", "text/plain"), ("Location", "/")]
        content = ""

    return (status, headers, content)
def get_places(user, bot, message, choice=0, lim=5):
    query = ''
    if choice == 1:
        query = 'ресторан'  # и кафе
    elif choice == 2:
        query = 'музей'
    elif choice == 3:
        query = 'парк'
    elif choice == 4:
        query = 'кино'
    elif choice == 5:
        query = 'магазин'
    # выбор места для запроса

    params = dict(
        client_id='2LT5KTOBNMCSHSNDC51KL5CPYOADWAL4GKUH1GNMIA2WF23S',
        client_secret='RCOAJRQUS2XEK3FK2TIWIZVIETYKEWQQWWPFLPLAXZT45XBA',
        v='20201125',
        ll='{},{}'.format(user.location.latitude, user.location.longitude),
        query=query,
        locale='ru')
    req = requests.get(url=url, params=params)
    data = json.loads(req.text)['response']
    # запрос к апи

    user.places_count[choice] = data["totalResults"]
    # всего мест

    if data["totalResults"] == 0:
        bot.send_message(message.chat.id, 'Мест не найдено')
        return 0

    how_many_show = lim if user.saw_counter[choice] + lim < user.places_count[choice] \
        else user.places_count[choice] - user.saw_counter[choice]
    # сколько мест показывать (чтобы не выходить за массив)

    text = f'В радиусе {data["suggestedRadius"]} метров от вас нашлось {data["totalResults"]} места\n\n'
    text += f'Вот *{how_many_show}* из них:'
    bot.send_message(message.chat.id, text, parse_mode='Markdown')
    # вывод информации

    places = data['groups'][0]['items']
    places = sort_arr(places)
    # все места

    for i in range(how_many_show):
        while "address" not in places[user.saw_counter[choice]]["venue"][
                "location"]:  # выводить места только с адресом
            user.saw_counter[choice] += 1
            if user.saw_counter[choice] >= user.places_count[choice] - 1:
                user.saw_counter[choice] = 0

        place = places[user.saw_counter[choice]]  # текущее место

        # text = f'*{place["venue"]["name"]}*\n'
        # text += f'Находится по адресу: {place["venue"]["location"]["address"]}\n'
        # text += f'В {place["venue"]["location"]["distance"]} метрах от вас\n'
        # bot.send_message(message.chat.id, text, parse_mode='Markdown')
        # старый вариант вывода

        bot.send_venue(message.chat.id,
                       place["venue"]["location"]["lat"],
                       place["venue"]["location"]["lng"],
                       disable_notification=True,
                       title=place["venue"]["name"],
                       address=place["venue"]["location"]["address"])
        # новый вариант вывода (можно вернуть старый)

        user.saw_counter[choice] += 1

    if user.saw_counter[choice] >= user.places_count[choice] - 1:
        user.saw_counter[choice] = 0
    # проверка, чтобы сбрасывать счетчик, когда места заканчиваются

    users.save_users()
    return 1
    def callback_inline(call):
        global secreat_txt, arr_answer, query
        cid = call.message.chat.id
        uid = call.from_user.id
        user = users.get_user(uid)
        max_num = 0

        try:
            if call.message.text == 'Какая валюта вас интересует?':
                print()
                if int(call.data) == 5:
                    bot.send_message(
                        cid, 'Полная информация находится на сайте\n'
                        ' https://www.banki.ru/products/currency/cash/moskva/#bank-rates'
                    )

                else:
                    arr_valua = [
                        'доллар', 'евро', 'резервная валюта мира',
                        'английский фунт', 'швейцарский франк'
                    ]
                    bot.send_message(
                        cid,
                        'Курс валюты _{}_ \n*{:.2f}* рублей'.format(
                            arr_valua[int(call.data)],
                            converter.converter_1(int(call.data))),
                        parse_mode='Markdown')
            elif call.data == 'clear_history':
                user.normalized()
                bot.send_message(
                    cid,
                    'Вы очистили историю, теперь все старые запросы вам попадутся вновь'
                )

            elif call.data == 'test_1121':
                number = random.randint(0, user.setting[5])
                if int(weather.get_temp(user)) <= user.min_temp:
                    number = random.randint(0, user.setting[4])

                x, y = 0, 0
                for i in user.setting:
                    if i >= number and x == 0:
                        x = y
                    y += 1

                arc = {0: 5, 1: 5, 2: 2, 3: 1, 4: 4, 5: 3}

                places.get_places(user, bot, call.message, arc[x], 2)
                markup = types.InlineKeyboardMarkup()
                markup.add(
                    types.InlineKeyboardButton("Посмотреть ещё",
                                               callback_data='test_1121'))
                bot.send_message(cid,
                                 'Хотите посмотреть ещё??',
                                 reply_markup=markup)

            elif call.message.text == 'Какие места найти? 🚶':
                send_places(call, user, cid)
            elif call.message.text == 'Хотите посмотреть ещё?':
                send_places(call, user, cid)
            elif call.message.text == 'Выберите вариант погоды ⛅':
                # weather.get_weather(user, bot, message)
                if int(call.data) == 0:
                    weather.simple_weather(user, bot, call.message)
                if int(call.data) == 1:
                    weather.detailed_weather(user, bot, call.message)
                if int(call.data) == 2:
                    weather.three_days_weather(user, bot, call.message)

            elif call.message.text == 'Как обновить геолокацию?':
                get_geo(cid, int(call.data))

            elif 'опрос_00' == call.data[:-1]:
                # get_places_for_opros(user)

                num = int(call.data[-1:])
                max_num = 4 - num
                user.setting[1] = max_num
                arr_answer[call.data[0:-1]] = num
                secreat_txt = call.data[0:-1]
                markup = types.InlineKeyboardMarkup()
                item1 = types.InlineKeyboardButton("Да",
                                                   callback_data='опрос_010')
                item5 = types.InlineKeyboardButton("Иногда",
                                                   callback_data='опрос_011')
                item2 = types.InlineKeyboardButton("Почти никода",
                                                   callback_data='опрос_012')
                item3 = types.InlineKeyboardButton("Совершенно нет",
                                                   callback_data='опрос_013')
                markup.add(item1, item3)
                markup.add(item5, item2)
                users.save_users()
                bot.send_message(cid,
                                 'Вам нравится спонтанно посещать музеи?',
                                 reply_markup=markup)
            elif 'опрос_01' == call.data[:-1]:

                num = int(call.data[-1:])
                max_num = user.setting[1] + 4 - num
                user.setting[2] = max_num
                arr_answer[call.data[0:-1]] = num
                secreat_txt = call.data[0:-1]
                markup = types.InlineKeyboardMarkup()
                item1 = types.InlineKeyboardButton("Да",
                                                   callback_data='опрос_020')
                item5 = types.InlineKeyboardButton("Иногда",
                                                   callback_data='опрос_021')
                item2 = types.InlineKeyboardButton("Почти никогда",
                                                   callback_data='опрос_022')
                item3 = types.InlineKeyboardButton("Совершенно нет",
                                                   callback_data='опрос_023')
                markup.add(item1, item3)
                users.save_users()
                markup.add(item5, item2)
                bot.send_message(cid,
                                 'Ходите ли вы в неизвестные вам рестораны?',
                                 reply_markup=markup)
            elif 'опрос_02' == call.data[:-1]:
                num = int(call.data[-1:])
                arr_answer[call.data[0:-1]] = num
                secreat_txt = call.data[0:-1]
                max_num = user.setting[2] + 4 - num
                user.setting[3] = max_num
                markup = types.InlineKeyboardMarkup()
                item1 = types.InlineKeyboardButton("Да",
                                                   callback_data='опрос_030')
                item5 = types.InlineKeyboardButton("Иногда",
                                                   callback_data='опрос_031')
                item2 = types.InlineKeyboardButton("Почти никогда",
                                                   callback_data='опрос_032')
                item3 = types.InlineKeyboardButton("Совершенно нет",
                                                   callback_data='опрос_033')
                markup.add(item1, item3)
                markup.add(item5, item2)
                users.save_users()
                bot.send_message(cid,
                                 'Вам нравится спонтанно посещать кинотеатры?',
                                 reply_markup=markup)
            elif 'опрос_03' == call.data[:-1]:
                num = int(call.data[-1:])
                arr_answer[call.data[0:-1]] = num
                secreat_txt = call.data[0:-1]
                max_num = user.setting[3] + 4 - num
                user.setting[4] = max_num
                markup = types.InlineKeyboardMarkup()
                item1 = types.InlineKeyboardButton("Да",
                                                   callback_data='опрос_040')
                item5 = types.InlineKeyboardButton("Иногда",
                                                   callback_data='опрос_041')
                item2 = types.InlineKeyboardButton("Почти никогда",
                                                   callback_data='опрос_042')
                item3 = types.InlineKeyboardButton("Совершенно нет",
                                                   callback_data='опрос_043')
                markup.add(item1, item3)
                markup.add(item5, item2)
                users.save_users()
                bot.send_message(cid,
                                 'Хотите ли вы гулять в парки?',
                                 reply_markup=markup)
            elif 'опрос_04' == call.data[:-1]:
                num = int(call.data[-1:])
                arr_answer[call.data[0:-1]] = num
                secreat_txt = call.data[0:-1]
                max_num = user.setting[4] + 4 - num
                user.setting[5] = max_num
                users.save_users()

                markup = types.InlineKeyboardMarkup()
                item1 = types.InlineKeyboardButton("0",
                                                   callback_data='опрос_050')
                item5 = types.InlineKeyboardButton("-5",
                                                   callback_data='опрос_051')
                item2 = types.InlineKeyboardButton("-10",
                                                   callback_data='опрос_052')
                item3 = types.InlineKeyboardButton("-15",
                                                   callback_data='опрос_053')
                item6 = types.InlineKeyboardButton("-20",
                                                   callback_data='опрос_054')
                item7 = types.InlineKeyboardButton("-25",
                                                   callback_data='опрос_055')
                markup.add(item1, item5)
                markup.add(item2, item3)
                markup.add(item6, item7)
                bot.send_message(
                    cid,
                    'При какой темпиратуре вы не хотите выходить на прогулку?',
                    reply_markup=markup)
            elif 'опрос_05' == call.data[:-1]:
                num = int(call.data[-1:])
                user.min_temp = -5 * num
                arr_answer[call.data[0:-1]] = num
                secreat_txt = call.data[0:-1]
                user.flag = True
                users.save_users()
                bot.send_message(
                    cid,
                    'Спасибо за пройденный тест, теперь вы можете использовать поиск учитывая ваши приоритеты'
                )

        except:
            pass