예제 #1
0
def send_settings_message(context):
    """Edit the message of the current context to the settings menu."""
    context.query.message.edit_text(
        text=get_settings_text(context.poll),
        parse_mode="markdown",
        reply_markup=get_settings_keyboard(context.poll),
        disable_web_page_preview=True,
    )
예제 #2
0
def remove_due_date(session, context, poll):
    """Remove the due date from a poll."""
    poll.due_date = None
    poll.next_notification = None
    poll.user.expected_input = ExpectedInput.due_date.name
    context.query.message.edit_text(
        text=get_settings_text(context.poll),
        parse_mode='markdown',
        reply_markup=get_due_date_datepicker_keyboard(poll))
예제 #3
0
def set_option_order(session, context, poll):
    """Set the order in which options are listed."""
    option_sorting = OptionSorting(context.action)
    poll.option_sorting = option_sorting.name

    update_poll_messages(session, context.bot, poll)
    context.query.message.edit_text(
        text=get_settings_text(poll),
        parse_mode='markdown',
        reply_markup=get_option_sorting_keyboard(poll))
예제 #4
0
def show_settings(session, context, poll):
    """Show the settings tab."""
    text = get_settings_text(poll)
    keyboard = get_settings_keyboard(poll)
    context.query.message.edit_text(
        text,
        parse_mode="markdown",
        reply_markup=keyboard,
        disable_web_page_preview=True,
    )
    poll.in_settings = True
예제 #5
0
def pick_due_date(session, context, poll):
    """Add a date from the datepicker to the poll."""
    if poll.current_date <= date.today():
        return i18n.t('callback.due_date_in_past', locale=poll.user.locale)

    due_date = datetime.combine(poll.current_date, time(hour=12, minute=00))
    if (due_date == poll.due_date):
        return

    poll.set_due_date(due_date)
    context.query.message.edit_text(
        text=get_settings_text(context.poll),
        parse_mode='markdown',
        reply_markup=get_due_date_datepicker_keyboard(poll))
예제 #6
0
def handle_new_option(bot, update, session, user, text, poll, chat):
    """Add a new option after poll creation."""
    added_options = add_options(poll, text)

    if len(added_options) > 0:
        text = i18n.t('creation.option.multiple_added',
                      locale=user.locale) + '\n'
        for option in added_options:
            text += f'\n*{option}*'
        chat.send_message(text, parse_mode='markdown')
        poll.init_votes_for_new_options(session)
    else:
        chat.send_message(i18n.t('creation.option.no_new', locale=user.locale))

    # Reset expected input
    user.current_poll = None
    user.expected_input = None

    text = get_settings_text(poll)
    keyboard = get_settings_keyboard(poll)
    message = chat.send_message(
        text,
        parse_mode='markdown',
        reply_markup=keyboard,
    )

    # Delete old references
    references = session.query(Reference) \
        .filter(Reference.poll == poll) \
        .filter(Reference.admin_user_id == chat.id) \
        .all()
    for reference in references:
        try:
            bot.delete_message(chat.id, reference.admin_message_id)
        except:
            pass
        session.delete(reference)

    # Create new reference
    reference = Reference(poll,
                          admin_user=user,
                          admin_message_id=message.message_id)
    session.add(reference)
    session.commit()

    update_poll_messages(session, bot, poll)
예제 #7
0
def pick_due_date(session, context, poll):
    """Set the due date for a poll."""
    picked_date = date.fromisoformat(context.data[2])
    if picked_date <= date.today():
        return i18n.t('callback.due_date_in_past', locale=poll.user.locale)

    due_date = datetime.combine(picked_date, time(hour=12, minute=00))
    if (due_date == poll.due_date):
        poll.set_due_date(None)
        context.query.answer(
            i18n.t('callback.due_date_removed', locale=poll.user.locale))
    else:
        poll.set_due_date(due_date)

    context.query.message.edit_text(
        text=get_settings_text(context.poll),
        parse_mode='markdown',
        reply_markup=get_due_date_datepicker_keyboard(poll, picked_date))
예제 #8
0
def update_datepicker(context, poll, datepicker_context, current_date):
    """Update the creation datepicker."""
    message = get_datepicker_text(context.poll)
    if datepicker_context == DatepickerContext.creation:
        keyboard = get_creation_datepicker_keyboard(poll, current_date)
    elif datepicker_context == DatepickerContext.additional_option:
        keyboard = get_add_option_datepicker_keyboard(poll, current_date)
    elif datepicker_context == DatepickerContext.external_add_option:
        keyboard = get_external_datepicker_keyboard(poll, current_date)
    elif datepicker_context == DatepickerContext.due_date:
        message = get_settings_text(poll)
        keyboard = get_due_date_datepicker_keyboard(poll, current_date)
    else:
        raise Exception('Unknown DatepickerContext')

    context.query.message.edit_text(message,
                                    parse_mode='markdown',
                                    reply_markup=keyboard,
                                    disable_web_page_preview=True)
예제 #9
0
def go_back(session, context, poll):
    """Go back to the original step."""
    if context.callback_result == CallbackResult.main_menu:
        text = get_poll_text(session, poll)
        keyboard = get_management_keyboard(poll)
        poll.in_settings = False

    elif context.callback_result == CallbackResult.settings:
        text = get_settings_text(poll)
        keyboard = get_settings_keyboard(poll)

    context.query.message.edit_text(
        text,
        parse_mode="markdown",
        reply_markup=keyboard,
        disable_web_page_preview=True,
    )

    # Reset the expected input from the previous option
    context.user.expected_input = None
def handle_new_option(bot, update, session, user, text, poll, chat):
    """Add a new option after poll creation."""
    added_options = add_options(session, poll, text)

    if len(added_options) > 0:
        text = i18n.t("creation.option.multiple_added",
                      locale=user.locale) + "\n"
        for option in added_options:
            text += f"\n*{option}*"
        chat.send_message(text, parse_mode="markdown")
        poll.init_votes_for_new_options(session)
    else:
        chat.send_message(i18n.t("creation.option.no_new", locale=user.locale))

    # Reset expected input
    user.current_poll = None
    user.expected_input = None

    text = get_settings_text(poll)
    keyboard = get_settings_keyboard(poll)
    message = chat.send_message(
        text,
        parse_mode="markdown",
        reply_markup=keyboard,
    )

    remove_old_references(session, bot, poll, user)

    # Create new reference
    reference = Reference(poll,
                          ReferenceType.admin.name,
                          user=user,
                          message_id=message.message_id)
    session.add(reference)
    session.commit()

    update_poll_messages(session, bot, poll, message.message_id, user)
예제 #11
0
def send_settings_message(context):
    """Edit the message of the current context to the settings menu."""
    context.query.message.edit_text(text=get_settings_text(context.poll),
                                    parse_mode='markdown',
                                    reply_markup=get_settings_keyboard(
                                        context.poll))
예제 #12
0
def show_settings(session, context, poll):
    """Show the settings tab."""
    text = get_settings_text(poll)
    keyboard = get_settings_keyboard(poll)
    context.query.message.edit_text(text, parse_mode='markdown', reply_markup=keyboard)
    poll.in_settings = True