def orm_add_comment(text, news_id, telegram_user_id): """ Aggiunge un nuovo commento per l'articolo """ queryset_user = TelegramUser.objects.filter(user_id=int(telegram_user_id)) user = queryset_user[0] orm_logger.info(f"orm_add_comment id={news_id} user_id={user.id}") # https://stackoverflow.com/a/12682379/974287 Comment.objects.create(user_id=user.id, news_id=news_id, text=text)
def orm_user_blocks_bot(chat_id): orm_logger.info(f"orm_user_blocks_bot: user {chat_id}") telegram_user = orm_get_telegram_user(chat_id) if not telegram_user: orm_logger.info(f"orm_user_blocks_bot: telegram_user not found!") return telegram_user.has_user_blocked_bot = True telegram_user.when_user_blocked_bot_timestamp = django_timezone.now() orm_update_telegram_user(telegram_user)
def orm_create_rss_feed_item(rss_id, rss_title, rss_link, updated_parsed): queryset = RssFeedItem.objects.filter(rss_id=rss_id) if len(queryset) > 0: orm_logger.info( f"orm_create_news_from_rss_feed_item: item already processed, rss_id={rss_id}" ) return None rss_feed_item = RssFeedItem() rss_feed_item.rss_id = rss_id rss_feed_item.rss_title = rss_title rss_feed_item.rss_link = rss_link rss_feed_item.updated_parsed = updated_parsed rss_feed_item.save() return rss_feed_item
def orm_parse_user_age(telegram_user: TelegramUser, message_text: str): """parse age from text sent by user; returns age, -1 for value error""" try: age = int(message_text) if age < 0: age = -1 except ValueError: orm_logger.error(f"wrong format for age! {message_text}") age = -1 telegram_user.age = age telegram_user.save() _update_user_in_cache(telegram_user) orm_logger.info( f"parse_user_age: age set for user {telegram_user.user_id} to {age}") return age
def orm_update_user_category_settings(telegram_user, category_key): """ Aggiorna le categorie selezionate dall'utente""" str_user_id = str(telegram_user.user_id) orm_logger.info( f"orm_update_user_category_settings category_key={category_key} user_id={str_user_id}" ) queryset_cat = telegram_user.categories.filter(key=category_key) if len( queryset_cat ) != 0: # category is present in user settings, we have to remove it cat = queryset_cat[0] telegram_user.categories.remove(cat) telegram_user.save() orm_logger.info( f'orm_update_user_category_settings: remove category={cat.key} user_id={str_user_id}' ) else: # category is not present in user settings, we have to add it cat = Category.objects.filter(key=category_key)[0] telegram_user.categories.add(cat) telegram_user.save() orm_logger.info( f'orm_update_user_category_settings: add category={cat.key} user_id={str_user_id}' )
def orm_add_telegram_user(user): """ creates a new user, if not existing; returns instance of user """ telegram_user = orm_get_telegram_user(user.id) if telegram_user is None: # telegram user has not been registered yet new_telegram_user = TelegramUser() new_telegram_user.user_id = user.id new_telegram_user.username = user.username new_telegram_user.first_name = user.first_name new_telegram_user.last_name = user.last_name new_telegram_user.language_code = user.language_code new_telegram_user.save() # new users: should they have all news categories selected? or none? if orm_get_system_parameter( CREATE_USER_WITH_ALL_CATEGORIES_SELECTED) == "True": # (select all news categories) for k in Category.objects.all(): new_telegram_user.categories.add(k) new_telegram_user.save() _update_user_in_cache(new_telegram_user) orm_logger.info( f"orm_add_telegram_user: new user {new_telegram_user.user_id}") return new_telegram_user else: orm_logger.info( f"orm_add_telegram_user: existing user {telegram_user.user_id}") telegram_user.has_user_blocked_bot = False telegram_user.save() _update_user_in_cache(telegram_user) return telegram_user
def orm_get_vacancies_published_today(refresh=False, create_news_item=False) -> str: if not refresh: text = orm_get_obj_from_cache("vacancies_published_today") if text: return text vacancies = solr_vacancies_published_today() if len(vacancies) == 0: text = UI_message_no_vacancies_published_today if create_news_item: orm_logger.info( "orm_get_vacancies_published_today(): now new vacancies published today" ) return else: text = UI_message_vacancies_published_today.format(str(len(vacancies))) counter = 1 for d in vacancies: url = f"https://offertelavoro.regione.fvg.it/lavoroFVG/dettaglio/{d['id']}" text += f'<a href="{url}">{counter}: {d["profiloProfessionale"][0]} ({d["comuneSedeLavoro"][0]})</a>\n\n' counter += 1 orm_set_obj_in_cache("vacancies_published_today", text, timeout=60 * 30) # store object in cache for 30 minutes if create_news_item: categories = orm_get_categories() cat_to_use = None for cat in categories: # print(cat) if UI_CATEGORY_FOR_VACANCIES in cat.name: cat_to_use = cat break d = django_timezone.now().strftime(DATE_FORMAT_STR) news_item = NewsItem() news_item.title = UI_message_new_vacancies_published_today.format(d) news_item.text = text news_item.disable_web_page_preview = True from django.utils import timezone news_item.start_publication = timezone.now() news_item.save() news_item.categories.add(cat_to_use) return text