def _last_changeset(self): user = self._get_tg().user changesets = ch.get_user_changesets(user) if changesets: # Force create task for users who don't want to bother ch.get_or_create_task_for_user(user) self._register_changeset(changesets[0]['id']) else: self.sender.sendMessage(self.t('no_changesets'))
def front_osm(): if 'osm_token' not in session: redirect(url_for('login')) user = get_user() task_obj = get_or_create_task_for_user(user) task = load_task(task_obj.task) return render_template('front.html', task=render_task(task), user=user, tobj=task_obj, timeleft=time_until_day_ends())
def _print_task(self): tg = self._get_tg() task_obj = ch.get_or_create_task_for_user(tg.user) if task_obj.changeset: self.sender.sendMessage(self.t('task_complete')) else: task = ch.load_task(task_obj.task, self.lang['tasks']) self.sender.sendMessage(u'{} {}\n\n{}\n\n{}: {}\n\n{}'.format( task['emoji'], task['t_title'], desc_to_markdown(task), self.t('time_left'), ch.time_until_day_ends(self.lang), self.t('post_changeset')), parse_mode='Markdown')
def oauth(): resp = openstreetmap.authorized_response() if resp is None: return 'Denied. <a href="' + url_for('login') + '">Try again</a>.' session['osm_token'] = (resp['oauth_token'], resp['oauth_token_secret']) user_details = openstreetmap.get('user/details').data session['osm_uid'] = int(user_details[0].get('id')) name = user_details[0].get('display_name') user, created = User.get_or_create(uid=session['osm_uid'], defaults={'name': name}) if user.name != name or created: user.name = name user.lang = get_language_from_request() user.save() # Use the same task a user has seen when not logged in ch.get_or_create_task_for_user(user, ip=get_ip()) if session.get('next'): redir = session['next'] del session['next'] else: redir = url_for('front') return redirect(redir)
def front(): user = get_user() if not user: task = ch.load_task(ch.random_task_for_ip(get_ip()), g.lang['tasks']) msg = html_esc(g.lang['please_sign_in']).replace( '[', '<a href="' + html_esc(url_for('login')) + '">').replace( ']', '</a>') return render_template('index.html', task=render_task(task), msg=msg, lang=g.lang) task_obj = ch.get_or_create_task_for_user(user) task = ch.load_task(task_obj.task, g.lang['tasks']) return render_template('front.html', task=render_task(task), user=user, tobj=task_obj, lang=g.lang, timeleft=ch.time_until_day_ends(g.lang))
def send_reminder(bot, hm): query = Telegram.select().where(Telegram.remind_on == hm) for tg in query: lang = load_language(tg.user) task_obj = ch.get_or_create_task_for_user(tg.user) if task_obj.changeset is not None: continue task = ch.load_task(task_obj.task, lang['tasks']) msg = u'{} {}\n\n{}\n\n{}'.format( task['emoji'], task['t_title'], desc_to_markdown(task), lang['post_changeset']) try: bot.sendMessage(tg.channel, msg, parse_mode='Markdown') except telepot.exception.TelegramError as e: try: bot.sendMessage(tg.channel, msg) logging.error('Failed to send markdown, but text worked. Task %s, msg: %s', task_obj.task, msg) except telepot.exception.TelegramError as e: logging.error('Could not remind user %s: %s', tg.user.name, e.description)
def send_email(user): lang = ch.load_language_from_user('', user) lang['tasks'] = ch.load_language_from_user('tasks', user) task_obj = ch.get_or_create_task_for_user(user) task = ch.load_task(task_obj.task, lang['tasks']) desc = task['t_description'] message = u'{hi}\n\n{task}\n\n{emoji} {title}\n\n{desc}\n\n{submit}\n\n{bye}\n{streak}'.format( hi=lang['email']['hi'].format(user.name), task=lang['email']['new_task'], emoji=task['emoji'], title=task['t_title'], desc=desc, submit=lang['email']['to_submit'].format(config.BASE_URL), bye=lang['email']['bye'], streak=lang['title'] ) msg = MIMEText(message, 'plain', 'utf-8') msg['Subject'] = u'[{}] {} {}'.format(lang['title'], task['emoji'], task['title']) msg['From'] = formataddr(('OSM Streak', config.EMAIL_FROM)) msg['To'] = formataddr((user.name, user.email)) s = smtplib.SMTP('localhost') s.sendmail(config.EMAIL_FROM, [user.email], msg.as_string()) s.quit()