Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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)