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
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)