def handle_incoming_messages(last_updated): r = get_updates(last_updated) split_chat_text = [] if r['ok']: for req in r['result']: chat_sender_id = req['message']['chat']['id'] try: chat_text = req['message']['text'] split_chat_text = chat_text.split() except KeyError: chat_text = '' split_chat_text.append(chat_text) log.debug('Looks like no chat text was detected... moving on') try: person_id = req['message']['from']['id'] except KeyError: pass log.info('Chat text received: {0}'.format(chat_text)) r = re.search('(source+)(.*)', chat_text) if (r is not None and r.group(1) == 'source'): if r.group(2): sources_dict[person_id] = r.group(2) log.debug('Sources set for {0} to {1}'.format(sources_dict[person_id], r.group(2))) post_message(person_id, 'Sources set as {0}!'.format(r.group(2))) else: post_message(person_id, 'We need a comma separated list of subreddits! No subreddit, no news :-(') if chat_text == '/stop': log.debug('Added {0} to skip list'.format(chat_sender_id)) skip_list.append(chat_sender_id) post_message(chat_sender_id, "Ok, we won't send you any more messages.") if chat_text in ('/start', '/help'): helptext = ''' Hi! This is a News Bot which fetches news from subreddits. Use "/source" to select a subreddit source. Example "/source programming,games" fetches news from r/programming, r/games. Use "/fetch for the bot to go ahead and fetch the news. At the moment, bot will fetch total of 5 posts from all sub reddits I will have this configurable soon. ''' post_message(chat_sender_id, helptext) if split_chat_text[0] == '/fetch' and (person_id not in skip_list): post_message(person_id, 'Hang on, fetching your news..') try: sub_reddits = sources_dict[person_id] except KeyError: post_message(person_id, ERR_NO_SOURCE) else: summarized_news = get_latest_news(sources_dict[person_id]) post_message(person_id, summarized_news) last_updated = req['update_id'] with open('last_updated.txt', 'w') as f: f.write(str(last_updated)) States.last_updated = last_updated log.debug( 'Updated last_updated to {0}'.format(last_updated)) f.close()
def handle_incoming_messages(last_updated): r = get_updates(last_updated) split_chat_text = [] if r['ok']: for req in r['result']: if 'message' in req: chat_sender_id = req['message']['chat']['id'] else: chat_sender_id = req['edited_message']['chat']['id'] try: chat_text = req['message']['text'] split_chat_text = chat_text.split() except KeyError: chat_text = '' split_chat_text.append(chat_text) log.debug('Looks like no chat text was detected... moving on') if 'message' in req: person_id = req['message']['from']['id'] else: person_id = req['edited_message']['from']['id'] log.info(f"Chat text received: {chat_text}") r = re.search('(source+)(.*)', chat_text) if (r is not None and r.group(1) == 'source'): if r.group(2): sources_dict[person_id] = r.group(2) log.info( f'Sources set for {person_id} to {sources_dict[person_id]}' ) with db.atomic() as txn: try: sources = Source.create( person_id=person_id, fetch_from=sources_dict[person_id]) log.debug(f'Inserted row id: {sources.person_id}') except peewee.IntegrityError: sources = Source.update( fetch_from=sources_dict[person_id]).where( person_id == person_id) rows_updated = sources.execute() log.info(f'Updated {rows_updated} rows') txn.commit() post_message(person_id, 'Sources set as {0}!'.format(r.group(2))) else: post_message( person_id, 'We need a comma separated list of subreddits! No subreddit, no news :-(' ) if chat_text == '/stop': log.debug(f'Added {chat_sender_id} to skip list') skip_list.append(chat_sender_id) post_message(chat_sender_id, "Ok, we won't send you any more messages.") if chat_text in ('/start', '/help'): helptext = ''' Hi! This is a News Bot which fetches news from subreddits. Use "/source" to select a subreddit source. Example "/source programming,games" fetches news from r/programming, r/games. Use "/fetch for the bot to go ahead and fetch the news. At the moment, bot will fetch total of 5 posts from the selected subreddit. ''' post_message(chat_sender_id, helptext) if split_chat_text[0] == '/fetch' and (person_id not in skip_list): post_message(person_id, 'Hang on, fetching your news..') try: sub_reddits = Source.get( person_id=person_id).fetch_from.strip() summarized_news = get_latest_news(sub_reddits) post_message(person_id, summarized_news) except peewee.DoesNotExist: post_message(person_id, ERR_NO_SOURCE) last_updated = req['update_id'] with open('last_updated.txt', 'w') as f: f.write(str(last_updated)) States.last_updated = last_updated log.debug(f'Updated last_updated to {last_updated}') f.close()