Exemplo n.º 1
0
def hello():
    global chat
    TOKEN = "303253879:AAGlGdiEJhIO933iVpJg2-tiRJwhpqC4o6g"

    requests.get('https://api.telegram.org/bot%s/sendMessage?chat_id=%s&text=ok' % (TOKEN, chat.chat_id))
    print(request.json)
    msg = Message(request.json)
    chat = Chat(msg.chat_id)

    if msg.chat_id in UNVERIFIED_USERS:

        login = msg.text
        try:
            user = User.get(login)
            user.chat_id = chat.chat_id
            user.update()
            UNVERIFIED_USERS.remove(msg.chat_id)
            chat.sendmessage("Вы добавлены в рассылку!")
        except:
            chat.sendmessage("No such user!!")
            msg.text = '/start'

    if msg.text == '/start':
        chat.sendmessage("Введите Ваш логин:")
        UNVERIFIED_USERS.append(msg.chat_id)

    elif msg.text == 'VK':
        text = "Parser result for VK"
        login = ChatInfo.getlogin(msg.chat_id)
        user = User.get(login)
        subs = user.subscriptions
        if subs is not None:
            chat.sendmessage(str(subs))
        else:
            chat.sendmessage("Ваши подписки")

        json_keyboard = json.dumps({'keyboard': [["VK"], ["Instagram"]],
                                    'one_time_keyboard': False,
                                    'resize_keyboard': True})
        bot.getKeyboard(msg.chat_id, text, json_keyboard)

    elif msg.text == 'Instagram':
        text = "Parser result for Instagram"

        json_keyboard = json.dumps({'keyboard': [["VK"], ["Instagram"]],
                                    'one_time_keyboard': False,
                                    'resize_keyboard': True})

        bot.getKeyboard(msg.chat_id, text, json_keyboard)

    else:
        json_keyboard = json.dumps({'keyboard': [["VK"], ["Instagram"]],
                                    'one_time_keyboard': False,
                                    'resize_keyboard': True})

        bot.getKeyboard(msg.chat_id, "Choose source!", json_keyboard)
        print(request.json)
Exemplo n.º 2
0
def sendif(t, ms_params):
    global recv_prev

    if recv_prev:
        return

    if t == None:
        recv_prev = True
    else:
        for i in t.split('|'):
            if eq(i, recv_msg.text):
                recv_prev = True
                break

    if recv_prev == True:
        for i in ms_params:
            send(recv_user, Message(*i))
Exemplo n.º 3
0
    def __init__(self, bot, chat_id, text, message_id, user_firstname=''):
        # Get user object from SQL
        conn = sqlhandler.getConnection()
        cur = conn.cursor()
        select_user_query = """SELECT userID, chatID, name, expectedMsgType, tempParams, wantsMenu, course, 
		wantsLecturePlan, address, wantsTransportInfo, wantsToRateMeals, menuPushTime, lecturePushTime, 
		pauseAllNotifications, wantsExamWarning FROM users WHERE chatID = %s """
        cur.execute(select_user_query, (chat_id, ))
        userSqlRow = cur.fetchall()
        conn.commit()
        user = usr.User(chat_id)
        newUser = False
        if cur.rowcount == 1:
            user = sqlconverter.getUser(userSqlRow[0])
        elif cur.rowcount > 1:
            logging.warning('More than one user with chatID %s found!',
                            chat_id)
            user = sqlconverter.getUser(userSqlRow[0])
        else:
            logging.info('Creating new user for chatID %s.', chat_id)
            newUser = True
        cur.close()

        # Write firstName from telegram into user object
        user.telegram_firstName = user_firstname

        # Process message
        try:
            message = msg.Message(user, text, message_id)

            if '🥃' in message.text:
                bot.sendMessage(message.user.chatID,
                                'WHISKEEEEEYYYYYY!!! 🥃🥃🥃')

            if message.isCommand:
                cmd.Command(message, bot, conn).findCommand()
            else:
                cmd.Command(message, bot, conn).interpretMessage()
        except:
            e = sys.exc_info()
            exc_type, exc_value, exc_traceback = sys.exc_info()
            stack = traceback.extract_tb(exc_traceback)
            logging.warning(
                "An error occured handling the following message: %s. Error: %s, Stacktrace: %s",
                text, e, stack)
            bot.sendMessage(
                chat_id,
                "An error occured while trying to fulfill your request. If this keeps happening,"
                +
                " please file a bug report via /reportbug, create an issue on GitHub under"
                +
                " https://github.com/Mueller-Patrick/dhbw_service_bot or send a message to @P4ddy_m"
            )
            bot.sendMessage(os.environ['PATRICK_TELEGRAM_ID'], (
                "The bot encountered an error.\nSender: {}\nMessage received: {}\nError: {}\nStack: {}"
                .format(user_firstname, text, e, stack)))

        # Save user object to SQL
        cur = conn.cursor()
        if newUser:
            print("new")
            insert_user_query = """INSERT INTO users (chatID, name, telegram_firstName, expectedMsgType, tempParams, wantsMenu, course, 
			wantsLecturePlan, address, wantsTransportInfo, wantsToRateMeals, menuPushTime, lecturePushTime, 
			pauseAllNotifications, lastMessage, wantsExamWarning) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, now(), %s) """
            cur.execute(insert_user_query,
                        sqlconverter.getUserInsertTuple(user))
        else:
            print("Update")
            update_user_query = """UPDATE users SET name = %s, telegram_firstName = %s, expectedMsgType = %s, tempParams = %s, wantsMenu = %s, 
			course = %s, wantsLecturePlan = %s, address = %s, wantsTransportInfo = %s, wantsToRateMeals = %s, 
			menuPushTime = %s, lecturePushTime = %s, pauseAllNotifications = %s, lastMessage = now(), wantsExamWarning = %s WHERE userID = %s """
            cur.execute(update_user_query,
                        sqlconverter.getUserUpdateTuple(user))

        conn.commit()
        cur.close()
        conn.close()
Exemplo n.º 4
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.º 5
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)