Ejemplo n.º 1
0
def callbackquery(update, context):
    query = update.callback_query
    data = query.data
    id = str(query.message.chat_id)
    # Activated from selecting a room
    if data.startswith('ROOM='):
        data = data.replace('ROOM=', '')
        # Save user's room selection to file
        global users
        users[id] = data
        with open('users.json', 'w') as usersfile:
            json.dump(users, usersfile)
        msg = 'You have selected *{}*.\n\nWhat would you like to do?'.format(
            data)
        keyboard = [[
            InlineKeyboardButton("Check Available Washers",
                                 callback_data='available')
        ], [InlineKeyboardButton("Notify when Done", callback_data='notify')
            ], [InlineKeyboardButton("Join Queue", callback_data='queue')]]
        keyboard = InlineKeyboardMarkup(keyboard)
        # Overwrite the room selection message
        bot.edit_message_text(chat_id=id,
                              message_id=query.message.message_id,
                              text=msg,
                              reply_markup=keyboard,
                              parse_mode=telegram.ParseMode.MARKDOWN)
    elif data == 'available':
        # From "Check Available Washers" button
        room = users[id]
        available = getavailable(room)
        count = len(available)
        msg = '*There are {} available washers:*\n'.format(count)
        for item in available:
            msg += item + '\n'
        send(id, msg, [])
    elif data == 'notify':
        # From "Notify when Done" button
        room = users[id]
        active = []
        for washer in rooms[room]:
            if machines[washer]['state'] == 1:
                active.append(washer)
        if len(active) < 1:
            # Pop-up notification instead of sending message
            context.bot.answer_callback_query(
                query.id,
                text='No active washers to notify about.',
                show_alert=True)
            return
        active.sort()
        msg = 'Please select a washer to receive notification about:'
        keyboard = []
        for item in active:
            keyboard.append([
                InlineKeyboardButton(item,
                                     callback_data='WASHER={}'.format(item))
            ])
        send(id, msg, keyboard)
    elif data.startswith('WASHER='):
        washer = data.replace('WASHER=', '')
        global watch
        if washer not in watch:
            watch[washer] = {}
        watch[washer][id] = None
        with open('watch.json', 'w') as watchfile:
            json.dump(watch, watchfile)
        context.bot.answer_callback_query(
            query.id,
            text='You will be notified when {} completes.'.format(washer),
            show_alert=True)
        return
    elif data == 'queue':
        global queue
        room = users[id]
        available = getavailable(room)
        if len(available) > 0:
            context.bot.answer_callback_query(
                query.id,
                text='No need to queue, there are available washers.',
                show_alert=True)
        elif id in queue[room]:
            context.bot.answer_callback_query(
                query.id,
                text='You are already in the queue.',
                show_alert=True)
        else:
            count = len(queue[room])
            queue[room].append(id)
            with open('queue.json', 'w') as queuefile:
                json.dump(queue, queuefile)
            context.bot.answer_callback_query(
                query.id,
                text='Added to queue. There are {} people ahead of you.'.
                format(count),
                show_alert=True)
        return
    context.bot.answer_callback_query(query.id)
    return
Ejemplo n.º 2
0
def callback_settings(update, context):
    data = update.callback_query.data[2:].split('-')
    u_id = str(update.callback_query.from_user.id)
    chat_id = update.callback_query.message.chat_id
    if data[0] == 'alarm':
        if data[1] == 'on':
            # Chiude il job
            unset_job_orario(str(chat_id), context.job_queue)
            set_alarm_value(u_id, None)
        elif data[1] == 'off':
            # Scelta timing orario
            lang_list = languages.get_reply('settings',
                                            lang=get_lang('', u_id=u_id))
            markup = []
            for hour in [5, 7, 9, 12, 18, 21]:
                markup.append([
                    InlineKeyboardButton(str(hour) + ':00',
                                         callback_data='2-alarm-set-' +
                                         str(hour) + ':00'),
                    InlineKeyboardButton(str(hour) + ':30',
                                         callback_data='2-alarm-set-' +
                                         str(hour) + ':30'),
                    InlineKeyboardButton(str(hour + 1) + ':00',
                                         callback_data='2-alarm-set-' +
                                         str(hour + 1) + ':00'),
                    InlineKeyboardButton(str(hour + 1) + ':30',
                                         callback_data='2-alarm-set-' +
                                         str(hour + 1) + ':30')
                ])
            markup = InlineKeyboardMarkup(markup)
            context.bot.editMessageText(
                text=lang_list[5],
                chat_id=chat_id,
                message_id=update.callback_query.message.message_id,
                parse_mode=ParseMode.MARKDOWN,
                reply_markup=markup)
            return
        elif data[1] == 'set':
            set_job_orario(str(chat_id),
                           u_id,
                           context.job_queue,
                           orario=data[2])
            set_alarm_value(u_id, data[2])
    elif data[0] == 'mensa':
        if data[1] == 'enable':
            # Scelta mensa
            mense_list = languages.get_keyboard('mensa')
            lang_list = languages.get_reply('settings',
                                            lang=get_lang('', u_id=u_id))
            markup = []
            for row in mense_list:
                for mensa in row:
                    if mensa != '/home':
                        markup.append([
                            InlineKeyboardButton(mensa.replace('/', ''),
                                                 callback_data='2-mensa-set-' +
                                                 mensa.replace('/', ''))
                        ])
            markup = InlineKeyboardMarkup(markup)
            context.bot.editMessageText(
                text=lang_list[9],
                chat_id=chat_id,
                message_id=update.callback_query.message.message_id,
                parse_mode=ParseMode.MARKDOWN,
                reply_markup=markup)
            return
        elif data[1] == 'set':
            set_fav_mensa(u_id, data[2])
        elif data[1] == 'disable':
            set_fav_mensa(u_id, None)
    elif data[0] == 'lang':
        changed = set_lang(u_id, data[1])
        if not changed: return
    reply, keyboard = get_user_settings(update,
                                        languages.get_reply(
                                            'settings',
                                            lang=get_lang('', u_id=u_id)),
                                        u_id=u_id)
    reply_markup = InlineKeyboardMarkup(keyboard)
    context.bot.editMessageText(
        text=reply,
        chat_id=chat_id,
        message_id=update.callback_query.message.message_id,
        parse_mode=ParseMode.MARKDOWN,
        reply_markup=reply_markup)