コード例 #1
0
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
コード例 #2
0
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)
コード例 #3
0
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
コード例 #4
0
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
コード例 #5
0
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())
コード例 #6
0
ファイル: bot_super.py プロジェクト: ivg97/vk_bot
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)
コード例 #7
0
            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)
コード例 #8
0
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())
コード例 #9
0
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())
コード例 #10
0
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
コード例 #11
0
ファイル: main.py プロジェクト: altUSER/eatBot
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, 'Не а')