def get_several_details_messages(update, context): result_list = context.user_data['response']['result_list'] update.callback_query.edit_message_text( 'Ми знайшли медиків поряд з місцем вашого відправлення!') context.chat_data['info'] = {'count_of_active_messages': 0} for key, value in result_list.items(): context.chat_data['info']['count_of_active_messages'] += 1 location = Location(latitude=value['finish_point']['latitude'], longitude=value['finish_point']['longitude']) contact = Contact(phone_number=value['user_phone_number'], first_name=value['user_first_name'], last_name=value['user_last_name']) context.bot.send_message( update.effective_message.chat_id, text=f'Час відправлення: {value["time_of_departure"]}.\n' f'Дата відправлення: {value["date_of_departure"]}.\n' f'Місце призначення:') context.bot.send_location(chat_id=update.effective_message.chat_id, location=location) context.bot.send_contact(update.effective_message.chat_id, contact=contact) return ConversationHandler.END
def contact(): return Contact( TestContact.phone_number, TestContact.first_name, TestContact.last_name, TestContact.user_id, )
def test_equality(self): a = Contact(self.phone_number, self.first_name) b = Contact(self.phone_number, self.first_name) c = Contact(self.phone_number, '') d = Contact('', self.first_name) e = Voice('', 'unique_id', 0) assert a == b assert hash(a) == hash(b) assert a is not b assert a == c assert hash(a) == hash(c) assert a != d assert hash(a) != hash(d) assert a != e assert hash(a) != hash(e)
def test_contact(self): con = Contact("0612345", "testman") u = self.mg.get_message(contact=con) self.assertEqual(con.phone_number, u.message.contact.phone_number) u = self.mg.get_message(contact=True) self.assertIsInstance(u.message.contact, Contact) with self.assertRaisesRegexp(BadMessageException, r"telegram\.Contact"): self.mg.get_message(contact="contact")
def get_several_details_messages(update, context): result_list = context.user_data['response'] update.callback_query.edit_message_text( 'Ми знайшли медиків поряд з місцем вашого відправлення!') for route in result_list: location = Location(latitude=route['finish_point']['latitude'], longitude=route['finish_point']['longitude']) contact = Contact(phone_number=route['user']['phone_number'], first_name=route['user']['first_name'], last_name=route['user']['last_name']) if route.get('date_and_time'): date = route['date_and_time'][:10] time = route['date_and_time'][11:16] text = f'Час та дата відправлення: {date}, {time}.\n' \ f'Місце призначення:' else: text = 'Регулярна поїздка.\n' \ 'Місце призначення:' context.bot.send_message(update.effective_message.chat_id, text=text) context.bot.send_location(chat_id=update.effective_message.chat_id, location=location) context.bot.send_contact(update.effective_message.chat_id, contact=contact) context.bot.send_message( update.effective_message.chat_id, "Перегляньте місця призначення. Якщо вам по дорозі, " "будь ласка, зв'яжіться з медиком, аби домовитися про " "поїздку!") context.user_data.clear() return ConversationHandler.END
def start(update: Update, context: CallbackContext) -> None: global state user = getUser(update.message.chat_id, state.users) if user is None: if str(update.message.from_user.id) in admins: user = User(Contact("", update.message.from_user.first_name, user_id=update.message.from_user.id), 7) state.users.append(user) saveState() else: kb = [[KeyboardButton('/start')]] kb_markup = ReplyKeyboardMarkup(kb) message = "No access rights. Contact an admin." context.bot.send_message(chat_id=update.message.chat_id, text=message, reply_markup=kb_markup) return if user.permissions == 0: kb = [[KeyboardButton('/start')]] kb_markup = ReplyKeyboardMarkup(kb) message = "No access rights. Contact an admin." context.bot.send_message(chat_id=update.message.chat_id, text=message, reply_markup=kb_markup) return message = buildMessage("Welcome") result = context.bot.send_message(chat_id=update.message.chat_id, text=message, reply_markup=makeKeyboard(user)) user.message_id = result['message_id']
}, { 'video': Video('video_id', 'unique_id', 12, 12, 12), 'caption': 'video_file' }, { 'voice': Voice('voice_id', 'unique_id', 5) }, { 'video_note': VideoNote('video_note_id', 'unique_id', 20, 12) }, { 'new_chat_members': [User(55, 'new_user', False)] }, { 'contact': Contact('phone_numner', 'contact_name') }, { 'location': Location(-23.691288, 46.788279) }, { 'venue': Venue(Location(-23.691288, 46.788279), 'some place', 'right here') }, { 'left_chat_member': User(33, 'kicked', False) }, { 'new_chat_title': 'new title' }, {
def _get_contact(self, user): return Contact("06123456789", user.first_name)
def _handle_attachments( self, audio, contact, document, location, photo, sticker, user, venue, video, voice, caption, ): attachments = [ x for x in [ photo, venue, location, contact, voice, video, sticker, document, audio, ] if x ] if caption and not attachments: raise BadMessageException("Can't have a caption without attachment") if len(attachments) > 1: raise BadMessageException("can't add more than one attachment") if photo: if isinstance(photo, list): if all([isinstance(x, PhotoSize) for x in photo]): pass else: raise BadMessageException( "photo must either be True or list(telegram.PhotoSize)" ) elif isinstance(photo, bool): photo = self._get_photosize() else: raise BadMessageException( "photo must either be True or list(telegram.PhotoSize)" ) if location: if isinstance(location, Location): pass elif isinstance(location, dict): location = Location(**location) elif isinstance(location, bool): location = self._get_location() else: raise BadMessageException( "location must either be True or telegram.Location" ) if venue: if isinstance(venue, Venue): pass elif isinstance(venue, bool): venue = self._get_venue() elif isinstance(venue, dict): venue["location"] = Location(**venue) venue = Venue(**venue) else: raise BadMessageException("venue must either be True or telegram.Venue") if contact: if isinstance(contact, Contact): pass elif isinstance(contact, dict): contact = Contact(**contact) elif isinstance(contact, bool): contact = self._get_contact(user) else: raise BadMessageException( "contact must either be True or telegram.Contact" ) if voice: if isinstance(voice, Voice): pass elif isinstance(voice, bool): voice = self._get_voice() elif isinstance(voice, dict): voice = Voice(**voice) else: raise BadMessageException("voice must either be True or telegram.Voice") if video: if isinstance(video, Video): pass elif isinstance(video, bool): video = self._get_video() elif isinstance(video, dict): video = self._get_video(data=video) else: raise BadMessageException("video must either be True or telegram.Video") if sticker: if isinstance(sticker, Sticker): pass elif isinstance(sticker, bool): sticker = self._get_sticker() elif isinstance(sticker, dict): sticker = self._get_sticker(sticker) else: raise BadMessageException( "sticker must either be True or telegram.Sticker" ) if document: if isinstance(document, Document): pass elif isinstance(document, dict): document = Document(**document) elif isinstance(document, bool): document = self._get_document() else: raise BadMessageException( "document must either be True or telegram.Document" ) if audio: if isinstance(audio, Audio): pass elif isinstance(audio, bool): audio = self._get_audio() elif isinstance(audio, dict): audio = Audio(**audio) else: raise BadMessageException("audio must either be True or telegram.Audio") return audio, contact, document, location, photo, sticker, venue, video, voice
def get_db_response(update, context): # отправляем запрос на наличие совпадений -- GET if context.user_data['ride_type'] == 'ONE_TIME': response = get_similar_routes_request( telegram_id=context.user_data['telegram_id'], time_of_departure=context.user_data['time_of_departure'], date_of_departure=context.user_data['date_of_departure'], start_latitude=context.user_data['start_latitude'], start_longitude=context.user_data['start_longitude'], finish_latitude=context.user_data["finish_latitude"], finish_longitude=context.user_data["finish_longitude"]) else: response = get_similar_routes_request( telegram_id=context.user_data['telegram_id'], start_latitude=context.user_data['start_latitude'], start_longitude=context.user_data['start_longitude'], finish_latitude=context.user_data["finish_latitude"], finish_longitude=context.user_data["finish_longitude"]) context.user_data['response'] = response if len(context.user_data['response']): user_type = context.user_data['response'][0]['user']['type'] if user_type == 'doctor': keyboard = [[ InlineKeyboardButton("Деталі", callback_data=str(GET_DETAILS)) ]] reply_markup = InlineKeyboardMarkup(keyboard) update.message.reply_text( 'Ми знайшли медиків поряд з місцем вашого відправлення!', reply_markup=reply_markup) for route in response: medic_telegram_id = route['user']['telegram_id'] context.bot.send_message( chat_id=medic_telegram_id, text="Поряд з місцем вашого відправлення знайшлися водії!\n" "Ми відправили їм ваши контакти, та інформацію про ваш маршрут.\n" "Можливо скоро з вами зв'яжуться!") # после отправки запроса перезаписываем содержимое user_data, чтобы передать их в get_details context.user_data.clear() context.user_data['response'] = response return GET_RESULT_LIST else: # отправка сообщения медику update.message.reply_text( "Поряд з місцем вашого відправлення знайшлися водії!\n" "Ми відправили їм ваши контакти, та інформацію про ваш маршрут.\n" "Можливо скоро з вами зв'яжуться!") # рассылка уведомлений водителям for route in response: driver_telegram_id = route['user']['telegram_id'] medic_user_instance = get_user(update.effective_user.id) data = medic_user_instance.content.decode('utf-8') user_instance = json.loads(data) location = Location( latitude=context.user_data['finish_latitude'], longitude=context.user_data['finish_longitude']) user_contact = Contact( phone_number=user_instance['phone_number'], first_name=user_instance['first_name'], last_name=user_instance['last_name'], user_id=user_instance['telegram_id']) if context.user_data.get('time_of_departure'): date = context.user_data['date_of_departure'] time = context.user_data['time_of_departure'] text = f'Ми знайшли нове співпадіння за маршрутом!\n' \ f'Час та дата відправлення: {date}, {time}.\n' \ f'Місце призначення:' else: text = 'Ми знайшли нове співпадіння за маршрутом!\n' \ 'Регулярна поїздка.\n' \ 'Місце призначення:' context.bot.send_message(chat_id=driver_telegram_id, text=text) context.bot.send_location(chat_id=driver_telegram_id, location=location) context.bot.send_contact(chat_id=driver_telegram_id, contact=user_contact) context.bot.send_message( chat_id=driver_telegram_id, text="Перегляньте місця призначення. Якщо вам по дорозі, " "будь ласка, зв'яжіться з медиком, аби домовитися про " "поїздку!") context.user_data.clear() return ConversationHandler.END else: update.message.reply_text( 'Наразі у систумі немає Ваших попутників. Ми повідомимо, коли такі знайдуться.' ) context.user_data.clear() return ConversationHandler.END