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
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])
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 })
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
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])
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)
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)
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']) ]
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) ]
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) ]
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 ])
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)
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)
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])
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])
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])
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
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
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)
def menu_handler(r, user): viber.send_messages(r.sender.id, [ KeyboardMessage(keyboard=get_default_keyboard(user.employee), min_api_version=MIN_API_VERSION) ])
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)
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'))
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)
"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()
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)
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)
}, { "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