@F_GLEB_O

Как создать список с возможными вариациями аргументов для функции?

Прошу прощения, если написал дичь в вопросе, просто не могу до конца точно описать свою проблему.
Создал функцию-шаблон для ответа на сообщения пользователя вк боту.
Теперь нужно как-то сделать базу (вопрос, ответ, клавиатура) с различными вариантами ответа.
Проблема в чём, если запускать код в этом виде, бот будет реагировать Только на слово "Начать", в остальных случаях он будет говорить, что команда не распознана и скидывать юзера обратно к выбору раздела (ну, тоесть выполнять кусок кода после elif).
Прошу о помощи, желательно с примером кода =)

key = VkKeyboard(one_time=False)
key2 = VkKeyboard(one_time=False)
key3 = VkKeyboard(one_time=False) #Пустая клавиатура, применяется там, где присутствие клавиатуры не нужно.


key.add_button('Нужная тема', color=VkKeyboardColor.POSITIVE)
key.add_button('Связаться с нами', color=VkKeyboardColor.PRIMARY)
key2.add_button('Назад', color=VkKeyboardColor.PRIMARY)

def template (question, answer, *KEY): #Функция ответа на сообщение пользователя.
    for event in longpoll.listen():
        if event.type == VkEventType.MESSAGE_NEW and event.text and event.to_me:
            if event.text == question: #Проверяем текст, введённый пользователем.
                vk.messages.send(
                    user_id = event.user_id,
                    message = answer, #Отвечаем пользователю, если текст сообщения распознан.
                    keyboard = KEY, #Подключаем нужную клавиатуру.
                    random_id = get_random_id()
                )
            elif event.text != '': #На случай, если текст пользователя не будет распознан
                vk.messages.send(
                    user_id = event.user_id,
                    random_id = get_random_id(),
                    message = 'Извините, у бота нет команды: "' + str(event.text) + '"',
                )
                time.sleep(0.5)
                vk.messages.send(
                    user_id = event.user_id,
                    random_id = get_random_id(),
                    message = 'Пожалуйста, выберите интересующий вас раздел.',
                    keyboard = key.get_keyboard()
                )

template ('Начать', 'Пожалуйста, выберите интересующий вас раздел.', key.get_keyboard())
template ('Назад', 'Пожалуйста, выберите интересующий вас раздел.', key.get_keyboard())
template ('Нужная тема', 'Нужный ответ', key2.get_keyboard())
  • Вопрос задан
  • 48 просмотров
Решения вопроса 1
@F_GLEB_O Автор вопроса
Вот в принципе рабочее решение, единственное у функции один аргумент лишний получился, но это так, на будущее, если буду опять полностью переписывать код=)))
def template (question, answer, *KEY): #Функция ответа на сообщение пользователя.
    vk.messages.send(
        user_id = event.user_id,
        message = answer, #Отвечаем пользователю, если текст сообщения распознан.
        keyboard = KEY, #Подключаем нужную клавиатуру.
        random_id = get_random_id()
    )

for event in longpoll.listen():
    if event.type == VkEventType.MESSAGE_NEW and event.text and event.to_me:
        if event.text == 'Начать':
            template ('Начать', 'Пожалуйста, выберите интересующий вас раздел.', key.get_keyboard())
        elif event.text == 'Назад':
            template ('Назад', 'Пожалуйста, выберите интересующий вас раздел.', key.get_keyboard())
        elif event.text == 'Выйти в меню':
            template ('Выйти в меню', 'Пожалуйста, выберите интересующий вас раздел.', key.get_keyboard())
        elif event.text == 'Нужная тема':
            template ('Нужная тема', 'Нужный ответ', key2.get_keyboard())
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
homus32
@homus32
учусь
ans = "Начать Го Вперед Давай"
if "Го" in ans:
...

Это хотел?
Ответ написан
Ваш ответ на вопрос

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

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