def answer_message(message, query, chat_id, user_id, user_config, is_group, user,message_type): if message_type == 'inline': answer_inline(message, query, chat_id, user_id, user_config, is_group, user) else: preview = False response = [] if message.lower() == '/start': user.set_field(chat_id, 'mode', 'normal') text = get_template('start_answer.md').render() m = Message( chat_id, text, disable_web_page_preview=(not preview), parse_mode='Markdown') bot.sendMessage(m) elif 'location' in query['message']: if user_config is not None and 'mode' in user_config and user_config['mode'] == 'map': MapCommand( message, chat_id, user_id, user, zoom=user_config["zoom"], imgformat=user_config['format'], lat=float(query['message']['location']['latitude']), lon=float(query['message']['location']['longitude'])) elif user_config.get('mode', None) == 'nearest': NearestCommand( message, chat_id, user_id, user, lat=float(query['message']['location']['latitude']), lon=float(query['message']['location']['longitude']), distance=user_config['distance'], type=user_config['type'], config=user_config ) elif user_config['mode'] == 'settings': if message == 'Language': response += LanguageCommand(message, user_id, chat_id, user, is_group) elif message == 'Answer only when mention?': AnswerCommand(message, user_id, chat_id, user) else: text = get_template('seting_not_recognized_message.md').render() m = Message( chat_id, text, disable_web_page_preview=(not preview), parse_mode='Markdown' ) bot.sendMessage(m) user.set_field(chat_id, 'mode', 'normal', group=is_group) elif user_config['mode'] == 'setlanguage': response += SetLanguageCommand(message, user_id, chat_id, user, is_group) elif user_config['mode'] == 'setonlymention': response += SetOnlyMention(message, user_id, chat_id, user, is_group) elif 'text' in query['message']: if re.match(".*geo:-?\d+(\.\d*)?,-?\d+(\.\d*)?", message) is not None and "mode" in user_config and user_config['mode'] == 'map': m = re.match( ".*geo:(?P<lat>-?\d+(\.\d*)?),(?P<lon>-?\d+(\.\d*)?).*", message) lat = m.groupdict()['lat'] lon = m.groupdict()['lon'] response += MapCommand( message, chat_id, user_id, user, zoom=user_config['zoom'], imgformat=user_config['format'], lat=float(lat), lon=float(lon)) elif message == 'Language': response += LanguageCommand(message, user_id, chat_id, user, is_group) elif message == 'Answer only when mention?': response += AnswerCommand(message, user_id, chat_id, user) elif message.lower().startswith('/settings'): SettingsCommand(message, user_id, chat_id, user, is_group) elif message.lower().startswith('/nearest'): NearestCommand(message, chat_id, user_id, user) elif message.lower().startswith('/map'): MapCommand(message, chat_id, user_id, user) elif re.match('/phone.*', message.lower()): PhoneCommand(message, chat_id) elif re.match('/details.*', message.lower()): try: DetailsCommand(message, user_config, chat_id) except: pass elif re.match("/raw.*", message.lower()): try: RawCommand(message, chat_id) except Exception as e: current_app.logger.debug(e.message) import traceback current_app.logger.debug(traceback.format_exc()) pass elif message.lower().startswith('/legend'): LegendCommand(message, chat_id) elif message.lower().startswith('/about'): text = get_template('about_answer.md').render() m = Message( chat_id, text, disable_web_page_preview=(not preview), parse_mode='Markdown') bot.sendMessage(m) elif message.lower().startswith('/help'): text = get_template('help_message.md').render() response = [text] response[-1] = response[-1].replace('_', '\_') elif re.match('/search.*', message.lower()) is not None and message[8:] != '': SearchCommand(message, user_config, chat_id) elif re.match('/search', message.lower()) is not None: m = Message( chat_id, _('Please indicate what are you searching with command /search <search_term>') ) bot.sendMessage(m) else: m = Message( chat_id, _('Use /search <search_term> command to indicate what you are searching') ) bot.sendMessage(m) if response: m = Message(chat_id, response, disable_web_page_preview=(not preview), parse_mode='Markdown' ) bot.sendMessage(m)
def MapCommand(message, chat_id, user_id, user, zoom=None, imgformat='png', lat=None, lon=None): response = [] message = message[4:] if lat is not None and lon is not None: bbox = genBBOX(lat, lon, 0.1) try: data = download(bbox, _, imageformat=imgformat, zoom=zoom) except ValueError as v: response.append(Message(chat_id, v.message)) else: if imgformat == 'pdf': bot.sendDocument(chat_id, data, 'map.pdf') elif imgformat == 'jpeg': bot.sendPhoto(chat_id, data, 'map.jpg', '©' + _('OSM contributors')) elif imgformat == 'png': bot.sendPhoto(chat_id, data, 'map.png', '©' + _('OSM contributors')) user.set_field(user_id, 'mode', 'normal') else: if re.match(" ?(png|jpg|pdf)? ?(\d?\d)?$", message): m = re.match(" ?(?P<imgformat>png|jpg|pdf)? ?(?P<zoom>\d{0,2})$", message) zoom = m.groupdict()["zoom"] imgformat = m.groupdict()["imgformat"] m = Message( chat_id, _('Please send me your location') + " \xF0\x9F\x93\x8D " + _("to receive the map.") + '.\n' + _("You can do it with the Telegram paperclip button") + " \xF0\x9F\x93\x8E." ) response.append(m) if imgformat is None: imgformat = 'png' if zoom == '': zoom = 19 user.set_field(user_id, 'format', imgformat) user.set_field(user_id, 'zoom', zoom) user.set_field(user_id, 'mode', 'map') elif re.match(" -?\d+(\.\d*)?,-?\d+(\.\d*)? (png|jpg|pdf)? ?(\d?\d)?", message): m = re.match(" (?P<lat>-?\d+(\.\d*)?),(?P<lon>-?\d+(\.\d*)?) ?(?P<imgformat>png|jpeg|pdf)? ?(?P<zoom>\d{0,2})",message) lat = float(m.groupdict()['lat']) lon = float(m.groupdict()['lon']) imgformat = m.groupdict()['imgformat'] zoom = m.groupdict()['zoom'] bbox = genBBOX(lat, lon, 0.1) if imgformat is None: imgformat = 'png' if zoom == '': zoom = 19 try: user_config = user.get_user(user_id, group=False) lang = gettext.translation('messages', localedir='./bot/locales/', languages=[user_config['lang'], 'en']) data = download(bbox, lang.gettext, imageformat=imgformat, zoom=zoom) except ValueError as v: response.append(v.message) else: if imgformat == 'pdf': bot.sendDocument(chat_id, data, 'map.pdf') elif imgformat == 'jpeg': bot.sendPhoto( chat_id, data, 'map.jpg', '©' + _('OSM contributors')) elif imgformat == 'png': bot.sendPhoto( chat_id, data, 'map.png', '©' + _('OSM contributors')) elif re.match(" -?\d+(\.\d*)?,-?\d+(\.\d*)?,-?\d+(\.\d*)?,-?\d+(\.\d*)? ?(png|jpeg|pdf)? ?\d{0,2}",message): m = re.match(" (?P<bb1>-?\d+(\.\d*)?),(?P<bb2>-?\d+(\.\d*)?),(?P<bb3>-?\d+(\.\d*)?),(?P<bb4>-?\d+(\.\d*)?) ?(?P<format>png|jpg|pdf)? ?(?P<zoom>\d{0,2})",message) if m is not None: bbox1 = m.groupdict()['bb1'] bbox2 = m.groupdict()['bb2'] bbox3 = m.groupdict()['bb3'] bbox4 = m.groupdict()['bb4'] imgformat = m.groupdict()['format'] zoom = m.groupdict()['zoom'] if imgformat is None: imgformat = 'png' if zoom == '': zoom = 19 try: data = download( [bbox1, bbox2, bbox3, bbox4], _, imgformat, zoom=zoom) except ValueError as v: response.append(v.message) else: if imgformat == 'pdf': bot.sendDocument(chat_id, data, 'map.pdf') elif imgformat == 'jpeg': bot.sendPhoto( chat_id, data, 'map.jpg', '©' + _('OSM contributors')) elif imgformat == 'png': bot.sendPhoto( chat_id, data, 'map.png', '©' + _('OSM contributors')) else: text = get_template('cant_understand_message.md').render() response.append(text) else: res = nom.query(message) if res: bbox = res[0]['boundingbox'] auto_scale = getScale([bbox[0], bbox[2], bbox[1], bbox[3]]) try: data = download([bbox[2], bbox[0], bbox[3], bbox[1]], _, scale=auto_scale ) except ValueError as v: m = Message(chat_id, v.message) response.append(m) else: bot.sendPhoto(chat_id, data, 'map.png', '©' + _('OSM contributors')) else: text = get_template('cant_understand_message.md').render() m = Message(chat_id,text) response.append(m) bot.sendMessage(response)