From 40dd62c477db46e91ad7c27b271963aa3777598d Mon Sep 17 00:00:00 2001 From: Andreas Bielawski Date: Sat, 6 Aug 2016 23:11:53 +0200 Subject: [PATCH] =?UTF-8?q?-=20GPS:=20Inline=20-=20GMaps:=20Inline=20-=20g?= =?UTF-8?q?et=5Fcoords()=20gibt=20jetzt=20auch=20die=20Adresse=20zur=C3=BC?= =?UTF-8?q?ck?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- otouto/plugins/gMaps.lua | 42 ++++++++++++++++++++++++++-------------- otouto/plugins/gps.lua | 16 +++++++++++++++ otouto/utilities.lua | 30 ++++++++++++++-------------- 3 files changed, 58 insertions(+), 30 deletions(-) diff --git a/otouto/plugins/gMaps.lua b/otouto/plugins/gMaps.lua index 123c0c4..662ed4d 100644 --- a/otouto/plugins/gMaps.lua +++ b/otouto/plugins/gMaps.lua @@ -4,6 +4,9 @@ gMaps.command = 'loc ' function gMaps:init(config) gMaps.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('loc', true).table + gMaps.inline_triggers = { + "^loc (.*)" + } gMaps.doc = [[* ]]..config.cmd_pat..[[loc* __: Sendet Ort via Google Maps]] end @@ -16,22 +19,33 @@ function gMaps:get_staticmap(area, lat, lon) return file end +function gMaps:inline_callback(inline_query, config) + local place = matches[1] + local coords = utilities.get_coords(place, config) + if type(coords) == 'string' then utilities.answer_inline_query(self, inline_query) return end + + local results = '[{"type":"venue","id":"'..math.random(100000000000000000)..'","latitude":'..coords.lat..',"longitude":'..coords.lon..',"title":"Ort","address":"'..coords.addr..'"}]' + + utilities.answer_inline_query(self, inline_query, results, 10000) +end + function gMaps:action(msg, config) - local input = utilities.input(msg.text) - if not input then - if msg.reply_to_message and msg.reply_to_message.text then - input = msg.reply_to_message.text - else - utilities.send_message(self, msg.chat.id, gMaps.doc, true, msg.message_id, true) - return - end - end - utilities.send_typing(self, msg.chat.id, 'find_location') - local coords = utilities.get_coords(input, config) - if type(coords) == 'string' then - utilities.send_reply(self, msg, coords) - return + local input = utilities.input(msg.text) + if not input then + if msg.reply_to_message and msg.reply_to_message.text then + input = msg.reply_to_message.text + else + utilities.send_message(self, msg.chat.id, gMaps.doc, true, msg.message_id, true) + return end + end + + utilities.send_typing(self, msg.chat.id, 'find_location') + local coords = utilities.get_coords(input, config) + if type(coords) == 'string' then + utilities.send_reply(self, msg, coords) + return + end utilities.send_location(self, msg.chat.id, coords.lat, coords.lon, msg.message_id) utilities.send_photo(self, msg.chat.id, gMaps:get_staticmap(input, coords.lat, coords.lon), nil, msg.message_id) diff --git a/otouto/plugins/gps.lua b/otouto/plugins/gps.lua index a8e6e2e..86baac8 100644 --- a/otouto/plugins/gps.lua +++ b/otouto/plugins/gps.lua @@ -5,6 +5,13 @@ gps.command = 'gps ,' function gps:init(config) gps.triggers = { "^/gps ([^,]*)[,%s]([^,]*)$", + "google.de/maps/@([^,]*)[,%s]([^,]*)", + "google.com/maps/@([^,]*)[,%s]([^,]*)", + "google.de/maps/place/@([^,]*)[,%s]([^,]*)", + "google.com/maps/place/@([^,]*)[,%s]([^,]*)" + } + gps.inline_triggers = { + "^gps ([^,]*)[,%s]([^,]*)$", "google.de/maps/@([^,]*)[,%s]([^,]*)", "google.com/maps/@([^,]*)[,%s]([^,]*)", "google.de/maps/place/@([^,]*)[,%s]([^,]*)", @@ -14,6 +21,15 @@ function gps:init(config) ]]..config.cmd_pat..[[gps* __,__: Sendet Karte mit diesen Koordinaten]] end +function gps:inline_callback(inline_query, config) + local lat = matches[1] + local lon = matches[2] + + local results = '[{"type":"location","id":"'..math.random(100000000000000000)..'","latitude":'..lat..',"longitude":'..lon..',"title":"Standort"}]' + + utilities.answer_inline_query(self, inline_query, results, 10000) +end + function gps:action(msg, config, matches) utilities.send_typing(self, msg.chat.id, 'upload_photo') local lat = matches[1] diff --git a/otouto/utilities.lua b/otouto/utilities.lua index d65a94a..e9b9b6b 100644 --- a/otouto/utilities.lua +++ b/otouto/utilities.lua @@ -363,24 +363,22 @@ end -- Gets coordinates for a location. Used by gMaps.lua, time.lua, weather.lua. function utilities.get_coords(input, config) + local url = 'https://maps.googleapis.com/maps/api/geocode/json?address='..URL.escape(input)..'&language=de' + local jstr, res = https.request(url) + if res ~= 200 then + return config.errors.connection + end - local url = 'https://maps.googleapis.com/maps/api/geocode/json?address=' .. URL.escape(input) - - local jstr, res = https.request(url) - if res ~= 200 then - return config.errors.connection - end - - local jdat = json.decode(jstr) - if jdat.status == 'ZERO_RESULTS' then - return config.errors.results - end - - return { - lat = jdat.results[1].geometry.location.lat, - lon = jdat.results[1].geometry.location.lng - } + local jdat = json.decode(jstr) + if jdat.status == 'ZERO_RESULTS' then + return config.errors.results + end + return { + lat = jdat.results[1].geometry.location.lat, + lon = jdat.results[1].geometry.location.lng, + addr = jdat.results[1].formatted_address + } end -- Get the number of values in a key/value table.