Exemplo n.º 1
0
    async def _convert_facebook_location(
            self, intent: IntentAPI,
            location: LocationAttachment) -> LocationMessageEventContent:
        long, lat = location.longitude, location.latitude
        long_char = "E" if long > 0 else "W"
        lat_char = "N" if lat > 0 else "S"
        rounded_long = round(long, 5)
        rounded_lat = round(lat, 5)

        text = f"{rounded_lat}° {lat_char}, {rounded_long}° {long_char}"
        url = f"https://maps.google.com/?q={lat},{long}"

        thumbnail_url, mime, size = await self._reupload_fb_photo(
            location.image_url, intent)
        thumbnail_info = ThumbnailInfo(mimetype=mime,
                                       width=location.image_width,
                                       height=location.image_height,
                                       size=size)
        content = LocationMessageEventContent(
            body=f"{location.address}\nLocation: {text}\n{url}",
            geo_uri=f"geo:{lat},{long}",
            msgtype=MessageType.LOCATION,
            info=LocationInfo(thumbnail_url=thumbnail_url,
                              thumbnail_info=thumbnail_info))
        # Some clients support formatted body in m.location, so add that as well.
        content["format"] = Format.HTML
        content["formatted_body"] = (
            f"<p>{location.address}</p>"
            f"<p>Location: <a href='{url}'>{text}</a></p")
        return content
Exemplo n.º 2
0
    def handle_telegram_location(
            self,
            source: 'AbstractUser',
            intent: IntentAPI,
            evt: Message,
            relates_to: RelatesTo = None) -> Awaitable[EventID]:
        long = evt.media.geo.long
        lat = evt.media.geo.lat
        long_char = "E" if long > 0 else "W"
        lat_char = "N" if lat > 0 else "S"
        geo = f"{round(lat, 6)},{round(long, 6)}"

        body = f"{round(abs(lat), 4)}° {lat_char}, {round(abs(long), 4)}° {long_char}"
        url = f"https://maps.google.com/?q={geo}"

        content = LocationMessageEventContent(
            msgtype=MessageType.LOCATION,
            geo_uri=f"geo:{geo}",
            body=f"Location: {body}\n{url}",
            relates_to=relates_to,
            external_url=self._get_external_url(evt))
        content["format"] = str(Format.HTML)
        content["formatted_body"] = f"Location: <a href='{url}'>{body}</a>"

        return self._send_message(intent, content, timestamp=evt.date)
Exemplo n.º 3
0
    async def _handle_instagram_location(self, intent: IntentAPI,
                                         item: ThreadItem) -> EventID:
        loc = item.location
        long_char = "E" if loc.lng > 0 else "W"
        lat_char = "N" if loc.lat > 0 else "S"

        body = (f"{loc.name} - {round(abs(loc.lat), 4)}° {lat_char}, "
                f"{round(abs(loc.lng), 4)}° {long_char}")
        url = f"https://www.openstreetmap.org/#map=15/{loc.lat}/{loc.lng}"

        external_url = None
        if loc.external_source == "facebook_places":
            external_url = f"https://www.facebook.com/{loc.short_name}-{loc.facebook_places_id}"

        content = LocationMessageEventContent(
            msgtype=MessageType.LOCATION,
            geo_uri=f"geo:{loc.lat},{loc.lng}",
            body=f"Location: {body}\n{url}",
            external_url=external_url)
        content["format"] = str(Format.HTML)
        content["formatted_body"] = f"Location: <a href='{url}'>{body}</a>"

        return await self._send_message(intent,
                                        content,
                                        timestamp=item.timestamp // 1000)