Ejemplo n.º 1
0
 def make_subscriber(self, viber_user_profile: ViberUserProfile):
     subscriber, created = models.ViberSubscriber.objects.get_or_create(
         uid=viber_user_profile.id,
         defaults={
             "name": viber_user_profile.name,
             "avatar": viber_user_profile.avatar
         })
     if created and hasattr(self, "object"):
         msg = KeyboardMessage(
             keyboard={
                 "Type":
                 "keyboard",
                 "DefaultHeight":
                 True,
                 "Buttons": ({
                     "ActionType": "share-phone",
                     "ActionBody": "reply to me",
                     "Text": gettext("My telephone number"),
                     "TextSize": "medium",
                 }, ),
             },
             min_api_version=3,
         )
         viber = self.object
         viber.send_message_to_id(viber_user_profile.id, msg)
     return subscriber, created
Ejemplo n.º 2
0
def example(game, number):
    bot_response = TextMessage(text=f'{game.word["examples"][number]}',
                               keyboard=CreateKBD(game),
                               tracking_data='tracking_data')
    keyboard = KeyboardMessage(tracking_data='tracking_data',
                               keyboard=CreateKBD(game))
    viber.send_messages(game.viber_id, [bot_response])
Ejemplo n.º 3
0
def task_handler(r, user):
    task = Task.objects.get(id=r.message.text.split('#')[1])
    messages = get_task_messages(task)
    messages.append(
        KeyboardMessage(keyboard=get_default_keyboard(user.employee),
                        min_api_version=MIN_API_VERSION))
    viber.send_messages(r.sender.id, messages)
def create_keyboard(buttons: list) -> KeyboardMessage:
    return KeyboardMessage(
        keyboard={
            'DefaultHeight': False,
            'BgColor': '#FFFFFF',
            'Type': 'keyboard',
            'Buttons': buttons
        })
Ejemplo n.º 5
0
    def __get__disable__(self):

        if self.current_user.id not in KeysWords:
            keyboard = self.__get__keys_start__()
        else:
            keyboard = KeysWords[self.current_user.id]['keyboard']
        if self.current_user.is_notice_need:
            message = \
                [TextMessage(text="Включить напоминание можно будет в конце каждого раунда"),
                 KeyboardMessage(keyboard=keyboard)]
        else:
            message = \
                [TextMessage(text="Я о вас не забуду."),
                 KeyboardMessage(keyboard=keyboard)]
        self.current_user.is_notice_need = not self.current_user.is_notice_need
        self.session.commit()
        return message
def test_from_dict():
    message_dict = dict(tracking_data=SAMPLE_TRACKING_DATA,
                        keyboard=SAMPLE_KEYBOARD)

    keyboard_message = KeyboardMessage().from_dict(message_dict)

    assert keyboard_message.tracking_data == SAMPLE_TRACKING_DATA
    assert keyboard_message.keyboard == SAMPLE_KEYBOARD
def test_to_dict():
    message_dict = dict(tracking_data=SAMPLE_TRACKING_DATA,
                        keyboard=SAMPLE_KEYBOARD)

    keyboard_message_dict = KeyboardMessage(
        tracking_data=SAMPLE_TRACKING_DATA,
        keyboard=SAMPLE_KEYBOARD).to_dict()

    assert message_dict == keyboard_message_dict
Ejemplo n.º 8
0
def botton_menu(viber_request):
    simple_keyboard = {
        "Type":
        "keyboard",
        "Buttons": [{
            "Columns": 3,
            "Rows": 1,
            "BgColor": "#e6f5ff",
            "BgMedia": "http://link.to.button.image",
            "BgMediaType": "picture",
            "BgLoop": True,
            "ActionType": "reply",
            "ActionBody": "balances",
            "ReplyType": "message",
            "Text": _("Балансы")
        }, {
            "Columns": 3,
            "Rows": 1,
            "BgColor": "#e6f5ff",
            "BgMedia": "http://link.to.button.image",
            "BgMediaType": "picture",
            "BgLoop": True,
            "ActionType": "reply",
            "ActionBody": "transactions",
            "ReplyType": "message",
            "Text": _("Транзакции")
        }, {
            "Columns": 6,
            "Rows": 1,
            "BgColor": "#e6f5ff",
            "BgMedia": "http://link.to.button.image",
            "BgMediaType": "picture",
            "BgLoop": True,
            "ActionType": "reply",
            "ActionBody": "points",
            "ReplyType": "message",
            "Text": _("Точки")
        }, {
            "Columns": 6,
            "Rows": 1,
            "BgColor": "#e6f5ff",
            "BgMedia": "http://link.to.button.image",
            "BgMediaType": "picture",
            "BgLoop": True,
            "ActionType": "reply",
            "ActionBody": "change_positive",
            "ReplyType": "message",
            "Text": _("Изменить позитив")
        }]
    }
    keyboard_message = KeyboardMessage(tracking_data='tracking_data',
                                       keyboard=simple_keyboard,
                                       min_api_version=3)
    viber.send_messages(viber_request.sender.id, [keyboard_message])
Ejemplo n.º 9
0
def notice_job():
    session = Session()
    us = session.query(bot_users) \
        .outerjoin(bot_users.bot_users_answers) \
        .group_by(bot_users) \
        .having(and_(func.current_timestamp(type_=types.DateTime) - func.max(bot_users_answers.answer_date) > coalesce(
        bot_users.notice_time, '00:30:00'), bot_users.is_notice_need)) \
        .all()
    for u in us:
        message = [TextMessage(text=random.choice(hello_messages) + " " + u.name + "! Вы не забыли об обучении? (hmm)"),
                   KeyboardMessage(keyboard=__get__keys_notice__(u))]
        viber.send_messages(u.viber_id, message)
Ejemplo n.º 10
0
 def send_keyboard(self, message, buttons, whom=None):
     """
         Отправка клавиатуры
     :param message: Текст для отправки
     :param buttons: Кнопки для отправки в формате массива
     :param whom: id чата для отправки
     :return: None
     """
     keyboard = make_keyboard(buttons)
     key_message = KeyboardMessage(tracking_data='tracking data',
                                   keyboard=keyboard)
     txt_message = TextMessage(text=message)
     self._send_messages([txt_message, key_message], whom)
Ejemplo n.º 11
0
    def __example_message__(self):
        # Если примеры кончились
        if len(KeysWords[self.current_user.id]['examples']) == 0:
            return [
                TextMessage(text='Это все примеры, что у меня есть...'),
                KeyboardMessage(
                    keyboard=KeysWords[self.current_user.id]['keyboard'])
            ]

        # Выбираем случайный пример
        message_text = random.choice(
            KeysWords[self.current_user.id]['examples'])

        # Удаляем полученный пример
        KeysWords[self.current_user.id]['examples'].remove(message_text)

        # Возвращаем сообщение с примеров
        return [
            TextMessage(text=message_text),
            KeyboardMessage(
                keyboard=KeysWords[self.current_user.id]['keyboard'])
        ]
Ejemplo n.º 12
0
    def __unknown__message__(self):
        self.session = Session()
        if self.current_user.id not in KeysWords:
            keyboard = self.__get__keys_start__()
        else:
            keyboard = KeysWords[self.current_user.id]['keyboard']

        return [
            TextMessage(text=(self.__unknown_messages_collection[
                random.randint(0,
                               len(self.__unknown_messages_collection) - 1)])),
            KeyboardMessage(keyboard=keyboard)
        ]
Ejemplo n.º 13
0
 def __get__aside__(self):
     if self.current_user.id not in KeysWords:
         keyboard = self.__get__keys_start__()
     else:
         keyboard = KeysWords[self.current_user.id]['keyboard']
     if self.current_user.notice_time is None:
         self.current_user.notice_time = timedelta(minutes=30)
     self.current_user.notice_time = self.current_user.notice_time + timedelta(
         minutes=30)
     self.session.commit()
     return [
         TextMessage(text="Оки-доки"),
         KeyboardMessage(keyboard=keyboard)
     ]
Ejemplo n.º 14
0
def showExample(viber_id):
    session = Session()
    val = (session.query(Word).join(User).filter(User.viber_id == viber_id)).first().examples
    user = session.query(User).filter(User.viber_id == viber_id).first()
    session.close()
    print('showExample inner')
    temp = copy.copy(portion_words)
    random.shuffle(temp)
    for button, w in zip(SAMPLE_KEYBOARD["Buttons"], temp):
        temp_question = {'question_number': f'{user.questionCount_session}',
                         'answer': f"{w.translation}"}
        button["Text"] = w.translation
        button["ActionBody"] = f'{[user.questionCount_session, w.translation]}'
    messageKeyboard = KeyboardMessage(tracking_data='tracking_data', keyboard=SAMPLE_KEYBOARD)
    viber.send_messages(viber_id, [
        TextMessage(text=val), messageKeyboard
    ])
Ejemplo n.º 15
0
    def send_message(self,
                     receiver: str,
                     message: str,
                     button_list: list = None,
                     **kwargs) -> str:
        kb = self._get_keyboard(button_list) if button_list else None

        if message:
            vb_message = TextMessage(text=message, keyboard=kb)
        else:
            vb_message = KeyboardMessage(keyboard=kb)

        try:
            return self.bot.send_messages(receiver, [vb_message])[0]
        except Exception as err:
            if str(err) == 'failed with status: 6, message: notSubscribed':
                raise NotSubscribed(err)
            raise MessengerException(err)
Ejemplo n.º 16
0
def registration(viber_request):
    vuser, created = ViberUser.objects.update_or_create(
        viber_id=viber_request.user.id,
        defaults={
            'is_active': True,
            'name': viber_request.user.name,
            'country': viber_request.user.country,
            'language': viber_request.user.language
        })
    if vuser.phone_number is None:
        simple_keyboard = {
            "Type":
            "keyboard",
            "Buttons": [{
                "Columns":
                6,
                "Rows":
                1,
                "BgColor":
                "#e6f5ff",
                "BgMedia":
                "http://link.to.button.image",
                "BgMediaType":
                "picture",
                "BgLoop":
                True,
                "ActionType":
                "share-phone",
                "ActionBody":
                "This will be sent to your bot in a callback",
                "ReplyType":
                "message",
                "Text":
                "Для начала давай знакомиться. Что-бы дать номер телефона нажми сюда"
            }]
        }

        keyboard_message = KeyboardMessage(tracking_data='tracking_data',
                                           keyboard=simple_keyboard,
                                           min_api_version=3)
        viber.send_messages(vuser.viber_id, [keyboard_message])
    else:
        print(viber_request)
        botton_main_disp(viber_request)
Ejemplo n.º 17
0
def makeQuestion(viber_request_sender_id, portion_words):
    session = Session()
    # заполнение клавиатуры
    user = session.query(User).filter(
        User.viber_id == viber_request_sender_id).first()
    curWord = portion_words[0]
    user.currentword_id = curWord.id
    user.last_answer_time = datetime.datetime.utcnow()
    session.commit()
    session.close()
    whichWordMessage = f'Как переводится слово {curWord.word}?'
    temp = copy.copy(portion_words)
    random.shuffle(temp)
    for button, w in zip(SAMPLE_KEYBOARD["Buttons"], temp):
        button["Text"] = w.translation
        button["ActionBody"] = w.translation
    messageKeyboard = KeyboardMessage(tracking_data='tracking_data',
                                      keyboard=SAMPLE_KEYBOARD)
    viber.send_messages(viber_request_sender_id,
                        [TextMessage(text=whichWordMessage), messageKeyboard])
Ejemplo n.º 18
0
def botton_back(viber_request):
    # text = _("Вернуться в предыдущее меню")
    simple_keyboard = {
        "Type":
        "keyboard",
        "Buttons": [{
            "Columns": 6,
            "Rows": 1,
            "BgColor": "#e6f5ff",
            "BgMedia": "http://link.to.button.image",
            "BgMediaType": "picture",
            "BgLoop": True,
            "ActionType": "reply",
            "ActionBody": "back",
            "ReplyType": "message",
            "Text": _("Вернуться в предыдущее меню")
        }]
    }
    keyboard_message = KeyboardMessage(tracking_data='tracking_data',
                                       keyboard=simple_keyboard,
                                       min_api_version=3)
    viber.send_messages(viber_request.sender.id, [keyboard_message])
Ejemplo n.º 19
0
def botton_languages(viber_request, hostname):
    # hostname = "%s://%s" % (request.scheme, request.scheme.get_host())
    photo_ua = urljoin(hostname, 'media/ua4.jpg')
    photo_en = urljoin(hostname, 'media/en4.jpg')
    photo_ru = urljoin(hostname, 'media/ru4.jpg')
    simple_keyboard = {
        "Type":
        "keyboard",
        "Buttons": [{
            "Columns": 2,
            "Rows": 1,
            "BgColor": "#e6f5ff",
            "Image": photo_ua,
            "ActionType": "reply",
            "ActionBody": "language_uk",
            "ReplyType": "message"
        }, {
            "Columns": 2,
            "Rows": 1,
            "BgColor": "#e6f5ff",
            "Image": photo_en,
            "ActionType": "reply",
            "ActionBody": "language_en",
            "ReplyType": "message"
        }, {
            "Columns": 2,
            "Rows": 1,
            "BgColor": "#e6f5ff",
            "Image": photo_ru,
            "ActionType": "reply",
            "ActionBody": "language_ru",
            "ReplyType": "message"
        }]
    }
    keyboard_message = KeyboardMessage(tracking_data='tracking_data',
                                       keyboard=simple_keyboard,
                                       min_api_version=3)
    viber.send_messages(viber_request.sender.id, [keyboard_message])
Ejemplo n.º 20
0
    def __change__difficulty__message__(self):
        self.current_user.is_difficulty_need = not self.current_user.is_difficulty_need

        if not self.current_user.is_difficulty_need:
            message = [
                TextMessage(
                    text=
                    'Жаль что вы не хотите помочь улучшить каество предлагаемых слов '
                ),
                TextMessage(
                    text=
                    'Если вы передумаете - нажмите на ОТМЕЧАТЬ СЛОЖНОСТЬ ПОСЛЕ ОТВЕТА. Спасибо!'
                )
            ]
        else:
            message = [TextMessage(text='Спасибо за помощь')]

        message = message + [
            KeyboardMessage(keyboard=self.__get__keys_start__())
        ]

        self.session.commit()
        return message
Ejemplo n.º 21
0
 def make_subscriber(self, viber_user_profile: ViberUserProfile):
     subscriber, created = ViberSubscriber.objects.get_or_create(
         uid=viber_user_profile.id,
         defaults={
             'name': viber_user_profile.name,
             'avatar': viber_user_profile.avatar
         })
     if created and hasattr(self, 'object'):
         msg = KeyboardMessage(keyboard={
             'Type':
             'keyboard',
             'DefaultHeight':
             True,
             'Buttons': ({
                 'ActionType': 'share-phone',
                 'ActionBody': 'reply to me',
                 "Text": gettext('My telephone number'),
                 "TextSize": "medium"
             }, )
         },
                               min_api_version=3)
         viber = self.object
         viber.send_message_to_id(viber_user_profile.id, msg)
     return subscriber, created
Ejemplo n.º 22
0
def incoming():
    Base.metadata.create_all(engine)
    global init
    if (init == False):
        initWords()
        init = True
    global portion_words
    viber_request = viber.parse_request(request.get_data())

    if isinstance(viber_request, ViberConversationStartedRequest):
        session = Session()
        if (session.query(User).filter(
                User.viber_id == viber_request.user.id).first() == None):
            user_0 = User(full_name=viber_request.user.name,
                          viber_id=viber_request.user.id)
            session.add(user_0)
            session.commit()
        viber.send_messages(viber_request.user.id, [
            TextMessage(text=HELLO_MESSAGE,
                        keyboard=START_KEYBOARD,
                        tracking_data='tracking_data')
        ])

    elif isinstance(viber_request, ViberMessageRequest):
        message = viber_request.message
        session = Session()
        user = session.query(User).filter(
            User.viber_id == viber_request.sender.id).first()
        if isinstance(message, TextMessage):
            text = message.text
            print(text)
            if text == "Start":
                stat = getStat(viber_request.sender.id)
                user.time_reminder = datetime.datetime.utcnow(
                ) + datetime.timedelta(minutes=TIME_INTERVAL)
                session.commit()
                viber.send_messages(viber_request.sender.id,
                                    [TextMessage(text=stat)])
                portion_words = get_four_words_for_user(user.id)
                # заполнение клавиатуры
                makeQuestion(viber_request.sender.id, portion_words)
            elif text == "showExample":
                print("!!!!!!!!")
                resp = showExample(viber_request.sender.id)
                viber.send_messages(viber_request.sender.id,
                                    [TextMessage(text=resp)])
                # заполнение клавиатуры
                makeQuestion(viber_request.sender.id, portion_words)
            elif text == "Dismiss":
                user.time_reminder = datetime.datetime.utcnow(
                ) + datetime.timedelta(minutes=TIME_INTERVAL)
                session.commit()
                viber.send_messages(viber_request.sender.id, [
                    TextMessage(
                        text=f"Жду тебя! Нажми на Start как будешь готов"),
                    KeyboardMessage(tracking_data='tracking_data',
                                    keyboard=START_KEYBOARD)
                ])
            else:
                # проверка на правильность ответа
                checkAnswer(viber_request.sender.id, text)
                if (checkEndSession(viber_request.sender.id)):
                    willContinue = TextMessage(text=f"Сыграем ещё раз?")
                    messageKeyboard = KeyboardMessage(
                        tracking_data='tracking_data', keyboard=START_KEYBOARD)
                    viber.send_messages(viber_request.sender.id,
                                        [willContinue, messageKeyboard])
                else:
                    portion_words = get_four_words_for_user(user.id)
                    # заполнение клавиатуры
                    makeQuestion(viber_request.sender.id, portion_words)
        session.close()
    return Response(status=200)
Ejemplo n.º 23
0
def menu_handler(r, user):
    viber.send_messages(r.sender.id, [
        KeyboardMessage(keyboard=get_default_keyboard(user.employee),
                        min_api_version=MIN_API_VERSION)
    ])
Ejemplo n.º 24
0
def report_handler(r, user):
    data = json.loads(user.state.split('#')[2])
    report_step = user.state.split('#')[1]
    next_step = ''
    next_state = ''
    messages = []
    if report_step == 'w-text':
        data['text'] = r.message.text
        messages.append(TextMessage(text='Текст принят'))
    elif report_step == 'w-photo':
        filename = get_random_string(32) + '.jpg'
        with open(f'media/{filename}', 'wb') as handle:
            response = requests.get(r.message.media, stream=True)
            for block in response.iter_content(1024):
                if not block:
                    break

                handle.write(block)
        data[
            'photo'] = settings.VIBER_MEDIA_HOST + settings.MEDIA_URL + filename
        messages.append(TextMessage(text='Фото принято'))

    if (r.message.text or '').startswith('/report_task#'):
        report_step = r.message.text.split('#')[1]
        if report_step == 'photo':
            messages.append(TextMessage(text='Приложите фото'))
            next_step = 'w-photo'
        elif report_step == 'delete':
            next_state = BotUser.default_state
            messages.append(
                TextMessage(text='Отчет удален',
                            keyboard=get_default_keyboard(user.employee)))
        elif report_step == 'send':
            te = TaskEmployee.objects.get(task_id=data['id'],
                                          employee=user.employee,
                                          finished=False)
            TaskReport.objects.create(task_employee=te,
                                      text=data['text'],
                                      photo=data['photo'])
            next_state = BotUser.default_state
            messages.append(
                TextMessage(text='Отчет отправлен на утверждение',
                            keyboard=get_default_keyboard(user.employee)))

    if not next_state:
        if not next_step:
            report_keyboard = {
                "Buttons": [{
                    **DEFAULT_BUTTON,
                    "BgColor": "#2cc429",
                    "ActionBody": f"/report_task#send",
                    "Text": "<b>Отправить</b>",
                }, {
                    **DEFAULT_BUTTON,
                    "BgColor": "#2cc429",
                    "ActionBody": f"/report_task#photo",
                    "Text": "<b>Приложить фото</b>",
                }, {
                    **DEFAULT_BUTTON,
                    "BgColor": "#2cc429",
                    "ActionBody": f"/report_task#delete",
                    "Text": "<b>Удалить отчёт</b>",
                }]
            }
            messages.append(
                KeyboardMessage(keyboard=report_keyboard,
                                min_api_version=MIN_API_VERSION))
        user.state = f"report_task#{next_step}#{json.dumps(data)}"
        user.save()
    else:
        user.state = next_state
        user.save()
    if messages:
        viber.send_messages(r.sender.id, messages)
Ejemplo n.º 25
0
def process_form(chat_id, form_key, user, text=None):
    form = FORMS[form_key]
    if user.state.startswith('form#'):
        data = json.loads(user.state.split('#')[2])
    else:
        data = {}
    questions = form['questions']
    fields = list(questions.keys())
    field = data.get('current')
    change_field = True
    field_value = text
    if not field:
        field = fields[0]
    else:
        valid = False
        if questions[field]['type'] == 're':
            match = re.fullmatch(questions[field]['regex'], text)
            valid = bool(match)
        elif questions[field]['type'] == 'choices':
            multi = questions[field]['multi']
            change_field = not multi
            if text:
                if not text.startswith('/form_choice_end'):
                    checked = data.get(field) or []
                    try:
                        choice_id = text.split('#')[1]
                        if choice_id not in checked:
                            checked.append(choice_id)
                        else:
                            checked.remove(choice_id)
                        data[field] = checked
                        print(checked)
                    except IndexError:
                        pass
                else:
                    change_field = True
                    valid = True
                    field_value = data.get(field) or []
        else:
            try:
                questions[field]['type'](text)
                valid = True
            except (ValueError, TypeError):
                pass
        if valid and change_field:
            data[field] = field_value
            try:
                field = fields[fields.index(field) + 1]
            except IndexError:
                field = None

    if field:
        field_changed = data.get('current') != field
        data['current'] = field
        user.state = f'form#{form_key}#{json.dumps(data)}'
        user.save()
        messages = [TextMessage(text=questions[field]['question'])]
        if questions[field].get('choices'):
            checked = data.get(field) or []
            choices = questions[field]['choices']
            keyboard = {
                "Buttons": [
                    *[{
                        **DEFAULT_BUTTON, "Columns":
                        6,
                        "Rows":
                        1,
                        "ActionBody":
                        f"/form_choice#{k}",
                        "Text":
                        ('✅' if str(k) in checked else '') + f"<b>{v}</b>"
                    } for k, v in choices], {
                        **DEFAULT_BUTTON,
                        "BgColor": "#2cc429",
                        "ActionBody": f"/form_choice_end",
                        "Text": "<b>Завершить</b>",
                    }
                ]
            }
            keyboard_message = KeyboardMessage(keyboard=keyboard,
                                               min_api_version=MIN_API_VERSION)
            if field_changed:
                messages.append(keyboard_message)
            else:
                messages = [keyboard_message]
        viber.send_messages(chat_id, messages)
    else:
        viber.send_messages(chat_id, [
            TextMessage(text=form['final_text'],
                        keyboard=get_default_keyboard(user.employee),
                        min_api_version=MIN_API_VERSION)
        ])
        user.state = BotUser.default_state
        user.save()

        del data['current']
        if form_key == 'register':
            viber.send_messages(chat_id, [
                TextMessage(text=f'Ваш ID: {chat_id}',
                            keyboard=get_default_keyboard(user.employee))
            ])
            e = Employee.objects.create(full_name=data['full_name'],
                                        phone=data['phone'],
                                        bot_user=user)
            print(data['departments'])
            e.departments.set(data['departments'])
        elif form_key == 'create-weekend':
            DayOff.objects.create(
                employee=user.employee,
                start_date=datetime.strptime(data['start_date'], '%d.%m.%Y'),
                end_date=datetime.strptime(data['end_date'], '%d.%m.%Y'))
Ejemplo n.º 26
0
def callback(request):
    if request.method == 'POST':
        viber_request = viber.parse_request(request.body)

        if isinstance(viber_request, ViberConversationStartedRequest):
            viber.send_messages(viber_request.user.id,
                                [TextMessage(text='Вас приветствует бот!')])

        elif isinstance(viber_request, ViberSubscribedRequest):
            # user_detail = viber.get_user_details(viber_request.user.id)
            # ViberUser.objects.update_or_create(viber_id=viber_request.user.id,
            #                                    name=viber_request.user.name,
            #                                    language=viber_request.user.language,
            #                                    country=viber_request.user.country,
            #                                    api_version=viber_request.user.api_version,
            #                                    defaults={'is_active': True})
            viber.send_messages(viber_request.user.id,
                                [TextMessage(text='Thanks')])

        elif isinstance(viber_request, ViberMessageRequest):
            if isinstance(viber_request.message, TextMessage):
                ViberUser.objects.update_or_create(
                    viber_id=viber_request.sender.id,
                    name=viber_request.sender.name,
                    language=viber_request.sender.language,
                    country=viber_request.sender.country,
                    api_version=viber_request.sender.api_version,
                    defaults={'is_active': True})
                keyboard_home = {
                    "Type":
                    "keyboard",
                    "Buttons": [
                        {
                            "Columns": 3,
                            "Rows": 1,
                            "Text": "Prezentacje",
                            "ActionType": "reply",
                            "ActionBody": "prezentacje",
                        },
                        {
                            "Columns": 3,
                            "Rows": 1,
                            "Text": "Wydarzenia",
                            "ActionType": "reply",
                            "ActionBody": "wydarzenia",
                        },
                        {
                            "Columns": 3,
                            "Rows": 1,
                            "Text": "Zmartwiony",
                            "ActionType": "reply",
                            "ActionBody": "zmartwiony",
                        },
                        {
                            "Columns": 3,
                            "Rows": 1,
                            "Text": "Uczyć się polskiego",
                            "ActionType": "reply",
                            "ActionBody": "uczyć się polskiego",
                        },
                        {
                            "Columns": 3,
                            "Rows": 1,
                            "Text": "Rozkład jazdy",
                            "ActionType": "reply",
                            "ActionBody": "rozkład jazdy",
                        },
                        {
                            "Columns": 3,
                            "Rows": 1,
                            "Text": "Jesteśmy",
                            "ActionType": "reply",
                            "ActionBody": "jesteśmy",
                        },
                    ]
                }

                # keyboard_home = {
                #     "Type": "keyboard",
                #     "Buttons": [{
                #         "Columns": 3,
                #         "Rows": 1,
                #         "Text": "locations",
                #         "ActionType": "location-picker",
                #         "ActionBody": "",
                #
                #     }]
                # }
                message = KeyboardMessage(tracking_data='tracking_data',
                                          keyboard=keyboard_home)
                viber.send_messages(viber_request.sender.id, [message])

                keyboard_exit = {
                    "Type":
                    "keyboard",
                    "Buttons": [{
                        "Columns": 6,
                        "Rows": 1,
                        "Text": "Wróć",
                        "ActionType": "reply",
                        "ActionBody": "wróć",
                    }]
                }

                if str(viber_request.message.text) == 'prezentacje':
                    # keyboard_exit = {
                    #     "Type": "keyboard",
                    #     "Buttons": [{
                    #         "Columns": 6,
                    #         "Rows": 1,
                    #         "Text": "Wróć",
                    #         "ActionType": "reply",
                    #         "ActionBody": "wróć",
                    #
                    #     }]
                    # }
                    keyboard_message = KeyboardMessage(
                        tracking_data='tracking_data', keyboard=keyboard_exit)
                    message = URLMessage(
                        media=
                        "https://drive.google.com/open?id=1iirBXn0AXtddNkVv-OX5bwbzWwjErjYw"
                    )
                    viber.send_messages(viber_request.sender.id,
                                        [message, keyboard_message])

                elif str(viber_request.message.text) == 'wydarzenia':
                    keyboard_message = KeyboardMessage(
                        tracking_data='tracking_data', keyboard=keyboard_exit)
                    message = PictureMessage(
                        media='https://5fd86f1e.ngrok.io/media/marafon2.jpg',
                        text="")
                    viber.send_messages(viber_request.sender.id,
                                        [message, keyboard_message])

            elif isinstance(viber_request.message, LocationMessage):
                location = str(viber_request.message.location)
                lat = re.search('(?:lat=)(.................)', location)
                lon = re.search('(?:lon=)(.................)', location)
                location_user = {'lat': '', 'lon': ''}

                if lat:
                    location_user['lat'] = lat[1]

                if lon:
                    location_user['lon'] = lon[1]

                list_object(location_user['lat'], location_user['lon'], 1,
                            viber_request.sender.id)

    # if isinstance(viber_request, ViberMessageRequest):
    #     message = viber_request.message
    #     text = message.text
    #     text = text.split('|')
    #     text_type = text[0]
    #     text_message = ''
    #     SAMPLE_KEYBOARD = {
    #         "Type": "keyboard",
    #         "Buttons": [{
    #             "Columns": 2,
    #             "Rows": 2,
    #             "Text": "<br><font color=\"#494E67\"><b>ASIAN</b></font>",
    #             "TextSize": "large",
    #             "TextHAlign": "center",
    #             "TextVAlign": "middle",
    #             "ActionType": "reply",
    #             "ActionBody": "ASIAN",
    #             "BgColor": "#f7bb3f",
    #             "Image": "https://s18.postimg.org/9tncn0r85/sushi.png"
    #         }, {
    #             "Columns": 2,
    #             "Rows": 2,
    #             "Text": "<br><font color=\"#494E67\"><b>FRENCH</b></font>",
    #             "TextSize": "large",
    #             "TextHAlign": "center",
    #             "TextVAlign": "middle",
    #             "ActionType": "open-url",
    #             "ActionBody": "tel:+380966600745",
    #             "BgColor": "#7eceea",
    #             "Image": "https://s18.postimg.org/ntpef5syd/french.png"
    #         }, {
    #             "Columns": 2,
    #             "Rows": 2,
    #             "Text": "<br><font color=\"#494E67\"><b>MEXICAN</b></font>",
    #             "TextSize": "large",
    #             "TextHAlign": "center",
    #             "TextVAlign": "middle",
    #             "ActionType": "reply",
    #             "ActionBody": "Mexican",
    #             "BgColor": "#f6f7f9",
    #             "Image": "https://s18.postimg.org/t8y4g4kid/mexican.png"
    #         }, {
    #             "Columns": 2,
    #             "Rows": 2,
    #             "Text": "<br><font color=\"#494E67\"><b>ITALIAN</b></font>",
    #             "TextSize": "large",
    #             "TextHAlign": "center",
    #             "TextVAlign": "middle",
    #             "ActionType": "reply",
    #             "ActionBody": "Italian",
    #             "BgColor": "#dd8157",
    #             "Image": "https://s18.postimg.org/x41iip3o5/itallian.png"
    #         }, {
    #             "Columns": 2,
    #             "Rows": 2,
    #             "Text": "<br><font color=\"#494E67\"><b>INDIE</b></font>",
    #             "TextSize": "large",
    #             "TextHAlign": "center",
    #             "TextVAlign": "middle",
    #             "ActionType": "reply",
    #             "ActionBody": "Indie",
    #             "BgColor": "#f6f7f9",
    #             "Image": "https://s18.postimg.org/wq06j3jkl/indi.png"
    #         }, {
    #             "Columns": 2,
    #             "Rows": 2,
    #             "Text": "<br><font color=\"#494E67\"><b>MORE</b></font>",
    #             "TextSize": "large",
    #             "TextHAlign": "center",
    #             "TextVAlign": "middle",
    #             "ActionType": "reply",
    #             "ActionBody": "More",
    #             "BgColor": "#a8aaba",
    #             "Image": "https://s18.postimg.org/ylmyu98et/more_Options.png",
    #
    #         }]
    #     }
    #     text_message = TextMessage(text='Это бот')
    #     message = KeyboardMessage(tracking_data='tracking_data', keyboard=SAMPLE_KEYBOARD)
    #
    #     viber.send_messages(viber_request.sender.id, [
    #         text_message, message
    #     ])
    #
    #     if text_type == 'More':
    #         SAMPLE_RICH_MEDIA = {
    #             "BgColor": "#69C48A",
    #             "Buttons": [
    #                 {
    #                     "Columns": 6,
    #                     "Rows": 1,
    #                     "BgColor": "#454545",
    #                     "BgMediaType": "gif",
    #                     "BgMedia": "http://www.url.by/test.gif",
    #                     "BgLoop": "true",
    #                     "ActionType": "open-url",
    #                     "Silent": "true",
    #                     "ActionBody": "www.tut.by",
    #                     "Image": "www.tut.by/img.jpg",
    #                     "TextVAlign": "middle",
    #                     "TextHAlign": "left",
    #                     "Text": "<b>example</b> button",
    #                     "TextOpacity": 10,
    #                     "TextSize": "regular"
    #                 }
    #             ]
    #         }
    #         SAMPLE_ALT_TEXT = "upgrade now!"
    #         message = RichMediaMessage(rich_media=SAMPLE_RICH_MEDIA, alt_text=SAMPLE_ALT_TEXT, min_api_version=2)
    #         viber.send_messages(viber_request.sender.id, [
    #             message
    #         ])
    #         print(viber_request.sender.api_version)
    #
    #     elif text_type == 'Asian':
    #         viber.send_messages(viber_request.sender.id, [
    #             TextMessage(text='Asian')
    #         ])
    #
    #     elif text_type == 'Mexican':
    #         viber.send_messages(viber_request.sender.id, [
    #             TextMessage(text='Mexican')
    #         ])
    #
    #
    # elif isinstance(viber_request, ViberConversationStartedRequest):
    #     print(viber_request)
    #     viber.send_messages(viber_request.user.id, [
    #         TextMessage(text="Welcome!")
    #     ])

    return HttpResponse(status=200)
Ejemplo n.º 27
0
    "keyboard",
    "Buttons": [{
        "Columns": 6,
        "Rows": 1,
        "BgColor": "#e6f5ff",
        "BgMedia": "http://link.to.button.image",
        "BgMediaType": "picture",
        "BgLoop": True,
        "ActionType": "reply",
        "ActionBody": "Старт",
        "ReplyType": "message",
        "Text": "Старт"
    }]
}

message = KeyboardMessage(tracking_data='tracking_data', keyboard=START_KBD)


def next_word(game):
    db = MyDataBase('database.db')
    user_id = db.find_user(game.viber_id)[0][0]
    game.word = data[random.choice(range(50))]
    learning = db.find_learning(user_id, game.word['word'])
    if len(learning) == 0:
        db.add_learning(user_id, game.word['word'], datetime.datetime.now())
    else:
        correct_answer = learning[0]['correct_answer']
        if correct_answer >= 3:
            next_word(game)
    db.close()
Ejemplo n.º 28
0
def HandleText(req):
    msg = req.message.text
    userId = req.sender.id

    # Нажата клавиша "Заказать такси"
    if msg == 'order_taxi':
        dbworker.set_state(userId, config.States.S_START_BOOKING.value)
        return TextMessage(
            text=
            'Просто отправьте своё местоположение или напишите адрес\n(Например: ул. Новокшонова, 6)',
            keyboard=config.cancel_kb)

    # Нажата клавиша "Да"
    elif msg == 'yes_answer':
        dbworker.set_state(userId, config.States.S_DONE.value)
        return TextMessage(text='Ваш заказ обрабатывается. Мы уведомим Вас.',
                           keyboard=config.main_kb)

    # Нажата клавиша "Назад"
    elif msg == 'cancel_answer' or msg == 'no_answer':
        dbworker.set_state(userId, config.States.S_DONE.value)
        return KeyboardMessage(keyboard=config.main_kb)

    # Нажата клавиша "Назад"
    elif msg == 'back_answer':
        dbworker.set_state(userId, config.States.S_START_BOOKING.value)
        return TextMessage(
            text=
            'Просто отправьте своё местоположение или напишите адрес\n(Например: ул. Новокшонова, 6)',
            keyboard=config.cancel_kb)

    # Нажата клавиша "Пропустить"
    elif msg == 'pass_answer':
        dbworker.set_state(userId, config.States.S_DONE.value)
        return TextMessage(text='Вызвать такси по этому адресу?\n' +
                           config.temp_addr,
                           keyboard=config.yes_no_kb)

    ####
    elif dbworker.get_current_state(
            userId) == config.States.S_START_BOOKING.value:
        dbworker.set_state(userId, config.States.S_ADDITION.value)
        config.temp_addr = msg
        return TextMessage(
            text=
            'Напишите дополнительную информацию (например, номер подъезда) или нажмите на кнопку "Пропустить"',
            keyboard=config.back_pass_kb)

    # Прислан адрес
    elif dbworker.get_current_state(
            userId) == config.States.S_CONFIRM_ORDER.value:
        #location = message
        dbworker.set_state(userId, config.States.S_CONFIRM_ORDER.value)
        return TextMessage(text='Вызвать такси по этому адресу?\n' +
                           config.temp_addr +
                           '\n\nДополнительная информация:\n' + msg,
                           keyboard=config.yes_no_kb)

    # Прислана доп. информация
    elif dbworker.get_current_state(userId) == config.States.S_ADDITION.value:
        dbworker.set_state(userId, config.States.S_CONFIRM_ORDER.value)
        return

    # Нажата клавиша "Контакты"
    elif msg == 'contacts':
        return TextMessage(text='Пример обработки кнопки',
                           keyboard=config.main_kb)

    # Нажата клавиша "Написать отзыв"
    elif msg == 'feedback':
        return TextMessage(text='Пример обработки кнопки',
                           keyboard=config.main_kb)

    return TextMessage(text='Некорректный запрос', keyboard=config.main_kb)
Ejemplo n.º 29
0
def callback(request):
    if request.method == 'POST':
        viber_request = viber.parse_request(request.body)
        print(viber_request)
        print("1")
        if isinstance(viber_request, ViberConversationStartedRequest):
            #print(viber_request.user.id)
            v_user, created = ViberUser.objects.get_or_create(
                viber_id=viber_request.user.id,
                defaults={
                    "name": viber_request.user.name,
                    "country": viber_request.user.country,
                    "language": viber_request.user.language,
                    "viber_api_version": viber_request.user.api_version,
                })
            if created:
                welcome_message = {
                    "sender": {
                        "name":
                        " Чебуратор",
                        "avatar":
                        "https://i.ytimg.com/vi/zpqghz36wfg/maxresdefault.jpg"
                    },
                    "tracking_data": "tracking data",
                    "type": "text",
                    "text": "Welcome to our bot!",
                    "keyboard": {
                        "Type":
                        "keyboard",
                        "Buttons": [{
                            "ActionType": "reply",
                            "ActionBody": "reply to me",
                            "Text": "Подписаться",
                            "TextSize": "regular",
                            "BgColor": "#780000",
                        }]
                    }
                }
                return JsonResponse(welcome_message)
            viber.send_messages(v_user.viber_id,
                                [TextMessage(text="Привет снова")])

        elif isinstance(viber_request, ViberMessageRequest):
            viber_user, created = ViberUser.objects.get_or_create(
                viber_id=viber_request.sender.id,
                defaults={
                    "name": viber_request.sender.name,
                    "country": viber_request.sender.country,
                    "language": viber_request.sender.language,
                    "viber_api_version": viber_request.sender.api_version,
                })
            viber.send_messages(
                viber_user.viber_id,
                [TextMessage(text="I listen you", min_api_version=1)])

            main_choice = ('Меню', 'Саит', 'Help')
            keyb_main = Keyboard()

            for but_name in main_choice:
                action_body = f"menu{but_name}"
                but = Button(text=but_name,
                             action_type="reply",
                             action_body=action_body,
                             col=6,
                             row=1)
                keyb_main.add_button(but)

            keyb_main = keyb_main.to_dict()

            viber.send_messages(
                viber_user.viber_id,
                [
                    KeyboardMessage(keyboard=keyb_main,
                                    min_api_version=6,
                                    tracking_data="main")
                ],
            )

            # faq = FAQ.objects.all()
            # if viber_request.message.text.startswith("faq"):
            #     idd = viber_request.message.text.replace("faq", "")
            #     fa = faq.get(id=int(idd))
            #     print(fa.answer)
            #     #print(viber_request.message.text)
            #     mkey = KeyboardMessage(tracking_data=fa.answer)
            #
            #     print(mkey.tracking_data)
            #     viber.send_messages(viber_user.viber_id, [TextMessage(text=fa.answer)])
            #
            # keyb_faq = Keyboard()
            # for faq_line in faq:
            #     action_body = f"faq{faq_line.id}"
            #     but = Button(text=faq_line.question, action_type="reply", action_body=action_body, col=6, row=1)
            #     keyb_faq.add_button(but)
            # keyb_faq = keyb_faq.to_dict()
            #
            # viber.send_messages(
            #     viber_user.viber_id,
            #     [KeyboardMessage(keyboard=keyb_faq, min_api_version=6, tracking_data="help")],
            # )

        elif isinstance(viber_request, ViberSubscribedRequest):
            user_id = viber_request.user.id
            viber_user, created = ViberUser.objects.update_or_create(
                viber_id=user_id, defaults={"is_active": True})
            if viber_user.is_blocked:
                viber.send_messages(user_id, [TextMessage(text="F**k off")])
            if hasattr(viber_user, 'user') and not hasattr(
                    viber_user.user, 'phone_nomber'):
                key_number = Keyboard()
                but_num = Button(text="give num",
                                 action_type="share-phone",
                                 action_body="give me you phone number",
                                 col=6,
                                 row=1)
                key_number.add_button(but_num)
                key_number = key_number.to_dict()  # !!!!

                viber.send_messages(
                    user_id,
                    [KeyboardMessage(keyboard=key_number, min_api_version=3)],
                )
        elif isinstance(viber_request, ViberUnsubscribedRequest):
            v_user = ViberUser.objects.update_or_create(
                viber_id=viber_request.user_id, defaults={"is_active": False})

    return HttpResponse(200)
Ejemplo n.º 30
0
        },
        {
            "Columns": 2,
            "Rows": 1,
            "BgColor": "#e6f5ff",
            "BgMedia": "http://link.to.button.image",
            "BgMediaType": "picture",
            "BgLoop": True,
            "ActionType": "reply",
            "ActionBody": cmd_anekdot_v2,
            "ReplyType": "message",
            "Text": "Анекдоты про животных"
        },
    ]
}
MAIN_KEYBOARD = KeyboardMessage(tracking_data='tracking_data', keyboard=_kbd1)


def process(id, msg) -> bool:
    # Мы обрабатываем ТОЛЬКО свои метки и шлем команды. Возвращает True если надо отправить главное меню.
    if msg == cmd_main:
        viber_api.send_messages(
            id, [TextMessage(text='Какой анекдот?'), MAIN_KEYBOARD])
        return False

    if msg == cmd_anekdot_v1:
        viber_api.send_messages(id, [
            TextMessage(text=anekdot() + ' :)' + '(crazy)'),
        ])
        return True