@Best_Loops

Не работает бот vk_api с БД.?

def event1():#ЦИКЛ 1 В ФУНКЦИИ ЧТОБЫ ВЫЙТИ ИЗ ВЛОЖ ЦИКЛОВ
    for event in longpoll.listen():
        if event.type == VkEventType.MESSAGE_NEW:
            if event.to_me:
                message = event.text.lower()
                id = event.user_id
                vk_session.method('messages.send', {'peer_id' : id, 'message' : 'Нажми на кнопоку', 'keyboard' : start_key, 'random_id' : 0})
                while True:
                    id = event.user_id
                    sql.execute("SELECT * FROM users WHERE id = ?", (id,))
                    # ПРОВЕРКА ЕСТЬ ЛИ id в БД
                    user = sql.fetchone()
                    if user == None:# ЕСЛИ НЕТ
                        for event in longpoll.listen():
                            if event.type == VkEventType.MESSAGE_NEW:
                                if event.to_me:
                                    message = event.text.lower()
                                    id = event.user_id
                                    if message == 'начать':
                                        vk_session.method('messages.send', {'peer_id' : id, 'message' : 'Вы ещё не зарегистрированы\n\nНапишите свой никнейм', 'random_id' : 0})
                                        break
                                    else:
                                        vk_session.method('messages.send', {'peer_id' : id, 'message' : 'Вы ещё не зарегистрированы\n\nНапишите свой никнейм', 'random_id' : 0})
                                        break
                        for event in longpoll.listen():
                            if event.type == VkEventType.MESSAGE_NEW:
                                if event.to_me:
                                    message = event.text.lower()
                                    id = event.user_id
                                    nik = message
                                    vk_session.method('messages.send', {'peer_id' : id, 'message' : 'Ваш профиль:\nID — '+str(id)+'\nНик — '+nik, 'random_id' : 0})
                                    user = (id, nik)
                                    sql.execute("INSERT INTO Users VALUES(?, ?);", user)
                                    db.commit()
                                    break
                    elif user != None:# ЕСЛИ ЕСТЬ, ТО ВЫХОДИМ ИЗ ВСЕХ ЦИКЛОВ И ПЕРЕХОДИМ НА ЦИКЛ 2
                        vk_session.method('messages.send', {'peer_id' : id, 'message' : 'Вы зарегистрированы', 'keyboard' : menu_key, 'random_id' : 0})
                        return

a = event1() # ЦИКЛ 1 ФУНКЦИИ


for event in longpoll.listen(): # ЦИКЛ 2
    if event.type == VkEventType.MESSAGE_NEW:
       if event.to_me:
          message = event.text.lower()
          id = event.user_id
          if message == 'меню':
              # ...
              # здесь чел должен оказаться если он есть в БД

Если первый чел напишет боту и дойдет до цикла 2, то другой чел, которого нет в БД, написавший боту, тоже окажется на цикле 2.
  • Вопрос задан
  • 77 просмотров
Решения вопроса 1
WolfInChains
@WolfInChains
Потому что вы используете бесконечный цикл, который блокирует поток. Вообще не понятно зачем он здесь, если можно обойтись без него.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы