示例#1
0
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)
示例#4
0
    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
示例#6
0
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
示例#10
0
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