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