Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.02.2021, 15:57   #1
Liliya_01
Новичок
Джуниор
 
Регистрация: 25.02.2021
Сообщений: 1
По умолчанию Не открывается следующая клавиатура в чат-боте ВК

Не открывается следующая клавиатура при нажатии кнопки в первой клавиатуре. В чем может быть проблема? То есть после нажатии кнопки "Добавить достижение" должна появится другая клавиатура. Прикладываю код.

Код:
import vk_api, json
from vk_api.longpoll import VkLongPoll, VkEventType
from toks import main_token

vk_session = vk_api.VkApi(token = main_token)
vk = vk_session.get_api()
long_poll = VkLongPoll(vk_session)


class User():

    def __init__(self, id, mode):
        self.id = id
        self.mode = mode


def get_keyboard(buts):
    nb = []
    color = ''
    for i in range(len(buts)):
        nb.append([])
        for k in range(len(buts[i])):
            nb[i].append(None)
    for i in range(len(buts)):
        for k in range(len(buts[i])):
            text = buts[i][k][0]
            color = {'зеленый' : 'positive', 'красный' : 'negative', 'синий' : 'primary'}[buts[i][k][1]]
            nb[i][k] = {"action": {"type": "text", "payload": "{\"button\": \"" + "1" + "\"}", "label": f"{text}"}, "color": f"{color}"}
    first_keyboard = {'one_time': False, 'buttons': nb}
    first_keyboard = json.dumps(first_keyboard, ensure_ascii=False).encode('utf-8')
    first_keyboard = str(first_keyboard.decode('utf-8'))
    return first_keyboard


start_key = get_keyboard([
    [('добавить достижение', 'синий'), ('посмотреть достижения', 'зеленый'), ('задать вопрос', 'красный')]
])


portfolio_key = get_keyboard([
    [('назад', 'красный'), ('научная деятельность', 'зеленый'), ('общественная деятельность', 'зеленый'), ('культурно-творческая деятельность', 'зеленый'),
    ('спортивная деятельность', 'зеленый'), ('учебная деятельность', 'зеленый')]

])


def sender(id, text, key):
    vk_session.method('messages.send', {'user_id' : id, 'message' : text, 'random_id' : 0, 'keyboard' : key})


users = []

for event in long_poll.listen():
    if event.type == VkEventType.MESSAGE_NEW:
        if event.to_me:

            id = event.user_id
            msg = event.text.lower()

            if msg == 'начать':
                flag1 = 0
                for user in users:
                    if user.id == id:
                        sender(id, 'Выберите действие', start_key)
                        user.mode = 'start'
                        flag1 = 1
                if flag1 == 0:
                    users.append(User(id, 'start'))
                    sender(id, 'Выберите действия:', start_key)

                for user in users:
                    if user.id == id:

                        if user.mode == 'start':
                            if msg == 'добавить достижение':

                                sender(id, 'Выберите сферу деятельности для продолжения', portfolio_key)
                                user.mode = 'portfolio'

                            if msg == 'посмотреть достижения':
                                sender(id, 'Введите вашу фамилию:')

                        if user.mode == 'portfolio':
                            if msg == 'назад':
                                sender(id, 'Выберите действие:', start_key)
                                user.mode = 'start'
Liliya_01 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как принять оплату в телеграм боте биткоином ray34 Python 1 05.01.2020 23:49
Автоматическое редактирование фото в чат-боте Rus30kan Помощь студентам 2 14.03.2019 20:46
Папка не открывается, а открывается командная строка, как исправить? Серёга07 Свободное общение 4 09.11.2012 22:30
Следующая дата neme4ta Общие вопросы по Java, Java SE, Kotlin 1 23.03.2010 06:58
сделать в боте список зарегистрированных пользователей Kukkk Компоненты Delphi 2 06.10.2007 18:01