示例#1
0
def show_notification_message(update, context):
    chat_id = update.effective_chat.id

    areas_of_volunteers = get_areas_of_volunteers(update, context)
    number_areas = len(areas_of_volunteers)
    all_areas_list = [ar['name'] for ar in get_all_areas()]
    notification_bottun_status = get_notification_status(update, context)
    keyboard_status = "Disable" if notification_bottun_status else "Enable"
    message_status = "are" if notification_bottun_status else "are not"
    keyboard_areas = []
    keyboard_line = []
    for i, area in enumerate(all_areas_list, 1):
        check_sign = "✔" if area in areas_of_volunteers else "⭕"  ##TODO: change list
        keyboard_line.append(
            InlineKeyboardButton(f"{check_sign} {area.capitalize()}",
                                 callback_data=f'area_{i}'))
        if i % 3 == 0:
            keyboard_areas.append(keyboard_line)
            keyboard_line = []
    keyboard_areas.append([
        InlineKeyboardButton(f"{keyboard_status} notifications",
                             callback_data='change_notification_status')
    ])

    reply_markup_areas = InlineKeyboardMarkup(keyboard_areas)
    context.bot.editMessageReplyMarkup(
        chat_id=chat_id,
        message_id=context.user_data["volunteer_message_id"],
        reply_markup=reply_markup_areas)
    context.bot.editMessageText(
        chat_id=chat_id,
        message_id=context.user_data["volunteer_message_id"],
        text=
        f"""{number_areas} areas selected. You {message_status} receiving notifications.""",
        reply_markup=reply_markup_areas)
示例#2
0
def volunteer(update: Update, context: CallbackContext):
    # TODO: check if volunteer exist. if he exist-
    chat_id = update.effective_chat.id
    logger.info(f"> Volunteer chat #{chat_id}")

    all_areas_list = [ar['name'] for ar in get_all_areas()]
    areas_of_volunteers = get_areas_of_volunteers(update, context)
    number_areas = len(areas_of_volunteers)
    notification_bottun_status = get_notification_status(update, context)
    keyboard_status = "Disable" if notification_bottun_status else "Enable"
    message_status = "are" if notification_bottun_status else "are not"
    keyboard_areas = []
    keyboard_line = []
    for i, area in enumerate(all_areas_list, 1):
        check_sign = "✔" if area in areas_of_volunteers else "⭕"  ##TODO: change list
        keyboard_line.append(
            InlineKeyboardButton(f"{check_sign} {area.capitalize()}",
                                 callback_data=f'area_{i}'))
        if i % 3 == 0:
            keyboard_areas.append(keyboard_line)
            keyboard_line = []
        ##TODO: add the last partital line

    keyboard_areas.append([
        InlineKeyboardButton(f"{keyboard_status} notifications",
                             callback_data='change_notification_status')
    ])
    reply_markup_areas = InlineKeyboardMarkup(keyboard_areas)
    message_volunteer = context.bot.send_message(
        chat_id=chat_id,
        parse_mode=telegram.ParseMode.MARKDOWN,
        text=
        f"""*{number_areas}* areas selected. You {message_status} receiving notifications.""",
        reply_markup=reply_markup_areas)
    context.user_data["volunteer_message_id"] = message_volunteer.message_id
示例#3
0
def requests_by_area(update: Update, context: CallbackContext):
    chat_id = update.effective_chat.id
    logger.info(f"> requests_by_area #{chat_id} ")

    ###TODO CODE SHOLED BE IN A FUNCTION
    all_areas_list = [ar['name'] for ar in get_all_areas()]
    keyboard_areas = []
    keyboard_line = []
    for i, area in enumerate(all_areas_list, 1):
        keyboard_line.append(
            InlineKeyboardButton(f"⭕ {area.capitalize()}",
                                 callback_data=f'r_A_area_{i}'))
        if i % 3 == 0:
            keyboard_areas.append(keyboard_line)
            keyboard_line = []
    keyboard_areas.append([
        InlineKeyboardButton(f"confirm area",
                             callback_data=f'confirm_area_for_search')
    ])
    reply_markup_areas = InlineKeyboardMarkup(keyboard_areas)

    message = context.bot.send_message(
        chat_id=chat_id,
        text=f'Select an area to show requests in that area:',
        reply_markup=reply_markup_areas)
    context.user_data["message_area_request"] = message.message_id
示例#4
0
def update_areas_for_request(update, context, callback_confirm_type,
                             callback_button_type):
    chat_id = update.effective_chat.id
    logger.info(f"> update areas for request #{chat_id}")

    all_areas_list = [ar['name'] for ar in get_all_areas()]
    keyboard_areas = []
    keyboard_line = []
    for i, area in enumerate(all_areas_list, 1):
        sign_check = '✔' if (area
                             == context.user_data["request_area"]) else '⭕'
        keyboard_line.append(
            InlineKeyboardButton(f"{sign_check} {area.capitalize()}",
                                 callback_data=f'{callback_button_type}{i}'))
        if i % 3 == 0:
            keyboard_areas.append(keyboard_line)
            keyboard_line = []
    keyboard_areas.append([
        InlineKeyboardButton(f"confirm area",
                             callback_data=f'{callback_confirm_type}')
    ])  # TODO::bold
    reply_markup_areas = InlineKeyboardMarkup(keyboard_areas)

    context.bot.editMessageReplyMarkup(
        chat_id=chat_id,
        message_id=context.user_data["message_area_request"],
        reply_markup=reply_markup_areas)
    context.bot.editMessageText(
        chat_id=chat_id,
        parse_mode=telegram.ParseMode.MARKDOWN,
        message_id=context.user_data["message_area_request"],
        text=
        f"""Your request area is :\n*{context.user_data["request_area"]}*""",
        reply_markup=reply_markup_areas)
示例#5
0
def command_handler_buttons(update: Update, context: CallbackContext):
    chat_id = update.effective_chat.id
    logger.info(f"> command handler buttons #{chat_id}")

    if update.message.text == "Volunteer":
        volunteer(update, context)

    elif update.message.text == "Open new request":
        request_help(update, context)
        context.user_data["request_status"] = "Open new request"

    else:
        try:
            if context.user_data[
                    "request_status"] == "Open new request":  # entered a description
                request_description = update.message.text
                context.user_data["request_description"] = request_description
                context.user_data["request_status"] = "no status"

                all_areas_list = [ar['name'] for ar in get_all_areas()]
                keyboard_areas = []
                keyboard_line = []
                for i, area in enumerate(all_areas_list, 1):
                    keyboard_line.append(
                        InlineKeyboardButton(f"⭕ {area.capitalize()}",
                                             callback_data=f'r_area_{i}'))
                    if i % 3 == 0:
                        keyboard_areas.append(keyboard_line)
                        keyboard_line = []
                keyboard_areas.append([
                    InlineKeyboardButton(
                        f"confirm area",
                        callback_data=f'confirm_area_for_request')
                ])  #TODO::bold
                reply_markup_areas = InlineKeyboardMarkup(keyboard_areas)

                message = context.bot.send_message(
                    chat_id=chat_id,
                    parse_mode=telegram.ParseMode.MARKDOWN,
                    text=f'You have opened new request:\n'
                    f'*{request_description}*\n'
                    f'To approve, specify where the collect area is:',
                    reply_markup=reply_markup_areas)
                context.user_data["message_area_request"] = message.message_id
        except ValueError:
            pass
def get_all_areas_from_DB():
    list_areas_dict = get_all_areas()
    list_areas = [area['name'] for area in list_areas_dict]
    return list_areas
示例#7
0
def callback_handler(update: Update, context: CallbackContext):
    chat_id = update.effective_chat.id
    logger.info(f"> callback handler #{chat_id}")

    if update.callback_query.data == "change_notification_status":
        update_notification_status(update, context)
        show_notification_message(update, context)

    if update.callback_query.data[:5] == "area_":
        index_button = int(update.callback_query.data[5:]) - 1
        all_areas_list = [ar['name'] for ar in get_all_areas()]
        areas_of_volunteer = get_areas_of_volunteers(update, context)
        area_name = all_areas_list[index_button]
        if area_name in areas_of_volunteer:  # remove area
            delete_area_from_volunteer_DB(update, context, area_name)
        else:  ## add area
            add_area_to_volunteer_DB(update, context, area_name)
        show_notification_message(update, context)

    if update.callback_query.data[:7] == "r_area_":
        search_inline_bottun_of_area(update, context)
        update_areas_for_request(update, context, 'confirm_area_for_request',
                                 'r_area_')

    if update.callback_query.data[:9] == "r_A_area_":
        search_inline_bottun_of_area(update, context)
        update_areas_for_request(update, context, 'confirm_area_for_search',
                                 'r_A_area_')

    if update.callback_query.data == "confirm_area_for_request":
        logger.info(f"> confirm_area_for_request #{chat_id}")
        request_id, description, volunteers = add_request_to_db(context)
        context.bot.send_message(
            chat_id=update.callback_query.message.chat.id,
            text=
            f'Your request has been saved. Your case is #{request_id} for follow up.'
        )
        context.user_data["message_accept_chat_message_id"] = []
        for vol in volunteers:
            reply_markup_areas = InlineKeyboardMarkup([[
                InlineKeyboardButton(f"🖐 accept",
                                     callback_data=f'accept_request')
            ]])
            message_accept = context.bot.send_message(
                chat_id=vol['chat_id'],
                text=f'NOTIFICATION!\ncase #{request_id}: {description}.',
                reply_markup=reply_markup_areas)
            context.user_data["message_accept_chat_message_id"].append(
                (vol['chat_id'], message_accept.message_id, request_id))

    if update.callback_query.data == "confirm_area_for_search":
        logger.info(f"> confirm_area_for_search #{chat_id}")
        search_inline_bottun_of_area(update, context)
        list_requests = get_requests_in_area(update, context)
        str_all_requests = "Open Requests:\n"
        for request in list_requests:
            for r in request:
                str_all_requests += f"#{r[0]} :  {r[1]}   {(r[2])}\n\n"
        context.bot.send_message(chat_id=chat_id, text=str_all_requests)

    if update.callback_query.data == "accept_request":
        for user_d in context.user_data["message_accept_chat_message_id"]:
            context.bot.editMessageText(f"case #{user_d[2]} was taken.",
                                        chat_id=user_d[0],
                                        message_id=user_d[1])
            update_request_status_db(user_d[2], 'accepted')
        context.bot.sendMessage(chat_id=update.callback_query.message.chat.id,
                                text="Thank you 🥇 👏 👏 !!")