def del_product(ev): global products x = ev for ev in longpoll.listen(): if ev.type == VkBotEventType.MESSAGE_NEW and ev.obj.message[ 'from_id'] == x.obj.message['from_id']: if ev.message['text'].lower() in [ 'начать', 'привет', 'здравствуй', 'здравствуйте', 'приветик', 'назад', 'заново', 'начать сначала', 'салам', 'хай' ]: start(vk, ev) tmp = products.split(',') try: tmp.remove(ev.message['text']) except Exception: vk.messages.send( user_id=ev.obj.message['from_id'], message=get_all_products() + "\n\nПеречислите через запятую продукты🥕" "🥛🧀, которые у Вас есть", random_id=random.randint(0, 2**64)) products = ','.join(sorted(tmp)) return
def start(vk, ev): global longpoll, products keyboard = create_keyborad(ev) keyboard.add_button('Возможные продукты', color=VkKeyboardColor.POSITIVE) keyboard.add_line() keyboard.add_button('Мои рецепты', color=VkKeyboardColor.PRIMARY) keyboard.add_line() keyboard.add_button('Все рецепты', color=VkKeyboardColor.DEFAULT) vk.messages.send( user_id=ev.obj.message['from_id'], message="Перечислите через запятую продукты🥕" "🥛🧀, которые есть у Вас и я подберу" "🔎 рецепт блюда😋, которое можно из них " "приготовить🍔🍳\n\nЕсли что-то пойдет не так😢, " "Вы в любой момент можете написать 'Начать сначала'🔄", random_id=random.randint(0, 2**64), keyboard=keyboard.get_keyboard()) ev_now = '' x = ev for ev in longpoll.listen(): if ev.type == VkBotEventType.MESSAGE_NEW and ev.obj.message[ 'from_id'] == x.obj.message['from_id']: if ev.message['text'].lower() in [ 'начать', 'привет', 'здравствуй', 'здравствуйте', 'приветик', 'назад', 'заново', 'начать сначала', 'салам', 'хай' ]: start(vk, ev) elif ev.message['text'] == 'Возможные продукты': vk.messages.send( user_id=ev.obj.message['from_id'], message=get_all_products() + "\n\nПеречислите через запятую продукты🥕" "🥛🧀, которые у Вас есть", random_id=random.randint(0, 2**64)) elif ev.message['text'].lower() == 'мои рецепты': print("---my foods---") return 'my_foods', ev elif ev.message['text'].lower() == 'все рецепты': ev_now = ev break else: ev_now = ev break print(ev.obj) products = ','.join( sorted(ev.message['text'].replace(' ', '').lower().split(','))) get_foods(vk, ev_now)
def add_product(ev): global products x = ev for ev in longpoll.listen(): if ev.type == VkBotEventType.MESSAGE_NEW and ev.obj.message[ 'from_id'] == x.obj.message['from_id']: if ev.message['text'].lower() in [ 'начать', 'привет', 'здравствуй', 'здравствуйте', 'приветик', 'назад', 'заново', 'начать сначала', 'салам', 'хай' ]: start(vk, ev) tmp = products.split(',') tmp.append(ev.message['text']) products = ','.join(sorted(tmp)) return
def my_foods(vk, ev): global foods, attachment global flag result = cur.execute( f"""SELECT * FROM food_list WHERE user_id={ev.obj.message['from_id']}""" ).fetchall() print(result) keyboard = create_keyborad(ev) keyboard.add_button('Назад') if not result: vk.messages.send( user_id=ev.obj.message['from_id'], keyboard=keyboard.get_keyboard(), message= "Здесь будут отображаться Ваши собственные🥴 рецепты и " "рецепты, которые Вы сохранили🧐.\nНо пока здесь " "пусто😔", random_id=random.randint(0, 2**64)) for ev in longpoll.listen(): if ev.type == VkBotEventType.MESSAGE_NEW: if ev.message['text'].lower() == 'назад': return False, ev else: foods = [x[1] for x in result] attachment = [x[3] for x in result] foods_zip = list(zip(numbers, [x[1] for x in result])) message = "Ваши рецепты🔪:\n" for x in foods_zip: message = message + x[0] + ' ' + x[1] + '\n' print(f"""---{list(foods_zip)}---""") keyboard = keyboard_number(ev, len(foods_zip)) keyboard.add_line() keyboard.add_button('Очистить', color=VkKeyboardColor.NEGATIVE) vk.messages.send(user_id=ev.obj.message['from_id'], message=message, random_id=random.randint(0, 2**64), keyboard=keyboard.get_keyboard()) flag = True return True, ev
def food_save(food, vk, ev): global con, cur keyboard = create_keyborad(ev) keyboard.add_button('Найти новый рецепт', color=VkKeyboardColor.POSITIVE) keyboard.add_line() keyboard.add_button('Мои рецепты', color=VkKeyboardColor.PRIMARY) result = cur.execute("""SELECT * FROM food_list WHERE name=?""", (food[0], )).fetchall() tmp = (result[0][1], result[0][2], result[0][3], False, food[1]) print('\n', tmp) result = cur.execute( f"""INSERT INTO food_list (name, products, link_photo, is_open, user_id) VALUES (?,?,?,?,?)""", tmp) con.commit() vk.messages.send(user_id=food[1], keyboard=keyboard.get_keyboard(), message="""Рецепт успешно сохранён в "Мои рецепты".""", random_id=random.randint(0, 2**64)) for ev in longpoll.listen(): if ev.type == VkBotEventType.MESSAGE_NEW: if ev.message['text'].lower() in [ 'найти новый рецепт', 'начать сначала' ]: start(vk, ev) elif ev.message['text'].lower() == 'мои рецепты': a = my_foods(vk, ev) if not a[0]: start(vk, a[1]) else: keyboard = create_keyborad(ev) keyboard.add_button('Начать сначала') vk.messages.send( user_id=ev.obj.message['from_id'], message= "Я Вас не понимаю🤨\nВы можете начать сначала😉", random_id=random.randint(0, 2**64), keyboard=keyboard.get_keyboard())
def main(): # token_file = open('token.txt') # vk_session = vk_api.VkApi(token=token_file.read()) # token_file.close() token = '...' vk_session = vk_api.VkApi(token=token) # авторизация vk_session._auth_token() # в вк # vk_session._auth_token() vk = vk_session.get_api() longpoll = vk_api.longpoll.VkLongPoll(vk_session) for event in longpoll.listen(): if event.type == vk_api.longpoll.VkEventType.MESSAGE_NEW and event.to_me: msg = vk.messages.getById(message_ids=event.message_id) photo_url = msg['items'][0]['attachments'][0]['photo'][ 'photo_2560'] req = urllib.request.urlopen(photo_url) arr = numpy.asarray(bytearray(req.read()), dtype=numpy.uint8) img = cv2.imdecode(arr, -1) img = cv2.bitwise_not(img) cv2.imwrite("1.jpg", img)
print("Ошибка !") text = 'Такой команды или страны нет ! Чтобы узнать список команд напиши : "что ты умеешь" ' try: # отправляем сообщение vk.messages.send( user_id=message.user_id, # кому message=text, # сообщение хранится в переменной 'text' attachment='photo{}_{}'.format( photo['owner_id'], photo['id']) # send image - отправляем картинку ) except: # отправляем сообщение vk.messages.send( user_id=message.user_id, # кому message=text # сообщение хранится в переменной 'text' ) # ожидаем события for event in longpoll.listen(): # если новое сообщение if event.type == VkEventType.MESSAGE_NEW and event.to_me: # получаем или создаём id пользователя в базе данных user, _ = User.get_or_create(vk_id=event.user_id) if user.state == 0: state0(event)
def main(): global vk_session, vk, longpoll, weather_key, search_text, products, foods, attachment, con, cur keyboard = VkKeyboard msg = '' for ev in longpoll.listen(): # print(f"""foods:\n{foods}\n\nattachment:\n{attachment}""") if ev.type == VkBotEventType.MESSAGE_NEW: print(ev.obj) vk = vk_session.get_api() if ev.message['text'].lower() in [ 'начать', 'привет', 'здравствуй', 'здравствуйте', 'приветик', 'заново', 'начать сначала', 'салам', 'хай', 'сначала' ]: vk.messages.send(user_id=ev.obj.message['from_id'], message="Здравствуйте", random_id=random.randint(0, 2**64)) tmp = start(vk, ev) if tmp: if tmp[0] == 'my_foods': print('my foods') a = my_foods(vk, tmp[1]) if not a[0]: start(vk, a[1]) elif 'geo' in ev.message.keys(): geo(longpoll, vk, ev) elif ev.message['text'].lower() == 'найти новый рецепт': start(vk, ev) elif ev.message['text'].lower() == 'очистить': keyboard = create_keyborad(ev) keyboard.add_button('Сначала') cur.execute( f"""DELETE FROM food_list WHERE user_id='{ev.message['from_id']}'""" ) vk.messages.send(user_id=ev.obj.message['from_id'], keyboard=keyboard.get_keyboard(), message="Ваши рецепты очищены", random_id=random.randint(0, 2**64)) con.commit() elif ev.message['text'].lower() == 'назад': a = my_foods(vk, ev) if not a[0]: start(vk, a[1]) elif ev.message['text'] in numbers: # print(foods, attachment, sep="\n") keyboard1 = create_keyborad(ev) keyboard1.add_button('Найти новый рецепт', color=VkKeyboardColor.PRIMARY) if not flag: keyboard1.add_line() keyboard1.add_button('Сохранить рецепт', color=VkKeyboardColor.POSITIVE) else: keyboard1.add_line() keyboard1.add_button('Назад') msg = (foods[numbers.index(ev.message['text'])], ev.message['from_id']) vk.messages.send(user_id=ev.obj.message['from_id'], keyboard=keyboard1.get_keyboard(), message=msg[0], random_id=random.randint(0, 2**64), attachment=attachment[numbers.index( ev.message['text'])]) elif ev.message['text'].lower() == 'сохранить рецепт': food_save(msg, vk, ev) else: keyboard = create_keyborad(ev) keyboard.add_button('Начать сначала') vk.messages.send( user_id=ev.obj.message['from_id'], message= "Я Вас не понимаю🤨\nВы можете начать сначала😉", random_id=random.randint(0, 2**64), keyboard=keyboard.get_keyboard())
def geo(longpoll, vk, ev): global geocode_key, weather_key geopos = str(ev.message['geo']['coordinates']['longitude']) + ',' + str( ev.message['geo']['coordinates']['latitude']) lon, lat = geopos.split(',') geocoder_request = f"http://geocode-maps.yandex.ru/1.x/?apikey={geocode_key}&geocode={geopos}&format=json" response = requests.get(geocoder_request) toponym = '' if response: json_response = response.json() toponym = json_response["response"]["GeoObjectCollection"][ "featureMember"][0]["GeoObject"]["metaDataProperty"][ "GeocoderMetaData"]["text"] else: vk.messages.send( user_id=ev.obj.message['from_id'], message= "Произошла какая-то ошибка\nПопробуйте отправить местоположение ещё раз)", random_id=random.randint(0, 2**64)) keyboard = create_keyborad(ev) keyboard.add_location_button() map_request = f"http://static-maps.yandex.ru/1.x/?ll={geopos}&spn=0.002,0.002&l=map&pt={geopos},ya_ru" response = requests.get(map_request) if not response: print("Ошибка выполнения запроса:") print("Http статус:", response.status_code, "(", response.reason, ")") vk.messages.send( user_id=ev.obj.message['from_id'], keyboard=keyboard.get_keyboard(), message= "Произошла какая-то ошибка\nПопробуйте отправить местоположение ещё раз)", random_id=random.randint(0, 2**64)) map_file = "map.png" keyboard = create_keyborad(ev) keyboard.add_button('Да', color=VkKeyboardColor.POSITIVE) keyboard.add_button('Нет', color=VkKeyboardColor.NEGATIVE) with open(map_file, "wb") as file: file.write(response.content) upload = vk_api.VkUpload(vk) photo = upload.photo_messages('map.png') owner_id = photo[0]['owner_id'] photo_id = photo[0]['id'] access_key = photo[0]['access_key'] attachment = f'photo{owner_id}_{photo_id}_{access_key}' vk.messages.send( user_id=ev.obj.message['from_id'], message=f"{toponym}\nЯ правильно определил Ваш адрес🏡?", attachment=attachment, keyboard=keyboard.get_keyboard(), random_id=random.randint(0, 2**64)) keyboard = create_keyborad(ev) keyboard.add_location_button() x = ev for ev in longpoll.listen(): if ev.type == VkBotEventType.MESSAGE_NEW and ev.obj.message[ 'from_id'] == x.obj.message['from_id']: if ev.message['text'].lower() in [ 'начать', 'привет', 'здравствуй', 'здравствуйте', 'приветик', 'назад', 'заново', 'начать сначала', 'салам', 'хай' ]: start(vk, ev) if ev.message['text'] == 'Нет': vk.messages.send( user_id=ev.obj.message['from_id'], keyboard=keyboard.get_keyboard(), message="Попробуйте отправить местоположение ещё раз)", random_id=random.randint(0, 2**64)) elif 'geo' in ev.message.keys(): geo(longpoll, vk, ev) else: break weather_request = f"https://api.weatherbit.io/v2.0/current?key={weather_key}&lang=ru&lat={lat}&lon={lon}" weather = dict(*requests.get(weather_request).json()["data"]) vk.messages.send( user_id=ev.obj.message['from_id'], message= f"""На улице неплохая погодка⛅ чтобы прогуляться до магазина""" f"""🚶:)\n\nТемпература: {round(float(weather['temp']))}°C\nОщущается как: """ f"""{round(float(weather['app_temp']))}°C\nВетер: {weather['wind_cdir_full']}, """ f"""{round(float(weather['wind_spd']))}м/c\nВлажность: """ f"""{round(float(weather['rh']))}%\nОблачность: """ f"""{round(float(weather['clouds']))}%\n\nP.S. Не забудьте взять """ f"""пропуск для похода в магазина по номеру:\n8 (800) 450-48-58""", random_id=random.randint(0, 2**64)) keyboard = create_keyborad(ev) keyboard.add_openlink_button( label='Магазины рядом', link=f"https://yandex.ru/maps/?text={search_text}&ll={str(geo)}&z=14") vk.messages.send(user_id=ev.obj.message['from_id'], message="Вот ближайшие к Вам магазины :)", random_id=random.randint(0, 2**64), keyboard=keyboard.get_keyboard())
def check_products(vk, ev): keyboard = create_keyborad(ev) keyboard.add_button("Да", color=VkKeyboardColor.DEFAULT) keyboard.add_line() keyboard.add_button("Добавить продукт", color=VkKeyboardColor.POSITIVE) keyboard.add_button("Убрать продукт", color=VkKeyboardColor.NEGATIVE) vk.messages.send( user_id=ev.obj.message['from_id'], message= f"Проверьте продукты которые Вы ввели, всё правильно?)\n\n{products}", random_id=random.randint(0, 2**64), keyboard=keyboard.get_keyboard()) x = ev for ev in longpoll.listen(): if ev.type == VkBotEventType.MESSAGE_NEW and ev.obj.message[ 'from_id'] == x.obj.message['from_id']: if ev.message['text'].lower() in [ 'начать', 'привет', 'здравствуй', 'здравствуйте', 'приветик', 'назад', 'заново', 'начать сначала', 'салам', 'хай' ]: start(vk, ev) return 'not' if ev.message['text'].lower() == 'добавить продукт': vk.messages.send( user_id=ev.obj.message['from_id'], message="Введите название продукта, который хотите " "добавить✔", random_id=random.randint(0, 2**64)) add_product(ev) return True if ev.message['text'].lower() == 'убрать продукт': keyboard = create_keyborad(ev) keyboard.add_button("Да", color=VkKeyboardColor.DEFAULT) keyboard.add_line() keyboard.add_button("Добавить продукт", color=VkKeyboardColor.POSITIVE) if len(products.split(',')) > 1: vk.messages.send( user_id=ev.obj.message['from_id'], message="Введите название продукта, который хотите " "убрать✖", random_id=random.randint(0, 2**64)) del_product(ev) return True else: vk.messages.send( user_id=ev.obj.message['from_id'], message=f"Нельзя убрать единственный продукт!", random_id=random.randint(0, 2**64), keyboard=keyboard.get_keyboard()) vk.messages.send( user_id=ev.obj.message['from_id'], message= f"Проверьте продукты которые Вы ввели, всё правильно?)" f"\n\n{products}", random_id=random.randint(0, 2**64), keyboard=keyboard.get_keyboard()) else: return False
def geteatlist(conf): now = datetime.datetime.now() #переменная для вывода времени longpoll = vk_api.longpoll.VkLongPoll(vk) for event in longpoll.listen(): #ловля сообщений time.sleep(0.5) if event.type == VkEventType.MESSAGE_NEW: msg = event.text inp = msg.lower().split() if (len(inp) != 0): if (inp[0] == 'eat'): if inp[1] == 'y' and len(inp) == 2 and ( str(event.peer_id) in conf.sections()): #отметка на акк отправляющего old_v = conf.get(str(event.peer_id), 'eat') conf.set(str(event.peer_id), 'eat', 'y') write_msg(event.peer_id, old_v + ' заменено на y') if inp[1] == 'n' and len(inp) == 2 and (str( event.peer_id) in conf.sections()): old_v = conf.get(str(event.peer_id), 'eat') conf.set(str(event.peer_id), 'eat', 'n') write_msg(event.peer_id, old_v + ' заменено на n') if inp[1] == 'list' and len(inp) == 2: #вывод всех данных write_msg(event.peer_id, list(conf)) if inp[1] == 'save' and len( inp) == 2: #сохранение значений write_msg(event.peer_id, save(event)) if inp[1] == 'archive' and len(inp) == 3: if inp[2] == 'list': outp = '' c = 0 for n in os.listdir('save'): outp += n + '(' + str(c) + ')' + '\n' c += 1 write_msg(event.peer_id, outp) else: try: cfg = cp.RawConfigParser() cfg.read('save/' + os.listdir('save')[int( inp[2])]) #имя конфиг файла outp = 'Архив на ' + os.listdir('save')[int( inp[2])] + ':\n' + list(cfg) except Exception as e: outp = 'Ошибка ' + str(e) write_msg(event.peer_id, outp) if inp[1] == 'am' and len( inp) == 4: #отметка другого человека try: num = int(inp[2]) if num > 0 and num < 25: id = conf.sections()[num - 1] if inp[3] == 'y': old_v = conf.get(id, 'eat') cfg_set(id, 'eat', 'y') write_msg(event.peer_id, old_v + ' заменено на y') if inp[3] == 'n': old_v = conf.get(id, 'eat') cfg_set(id, 'eat', 'n') write_msg(event.peer_id, old_v + ' заменено на n') except: write_msg(event.peer_id, 'Не а')