Ejemplo n.º 1
0
 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'))
Ejemplo n.º 2
0
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())
Ejemplo n.º 3
0
 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')
Ejemplo n.º 4
0
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)
Ejemplo n.º 5
0
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))
Ejemplo n.º 6
0
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)
Ejemplo n.º 7
0
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()