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()
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