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
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)
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)