from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup, KeyboardButton, ReplyKeyboardMarkup, ForceReply def ikb(rows=None): if rows is None: rows = [] lines = [] for row in rows: line = [] for button in row: button = btn(*button) # InlineKeyboardButton line.append(button) lines.append(line) return InlineKeyboardMarkup(inline_keyboard=lines) # return {'inline_keyboard': lines} def btn(text, value, type='callback_data'): return InlineKeyboardButton(text, **{type: value}) # return {'text': text, type: value} # The inverse of above def bki(keyboard): lines = [] for row in keyboard.inline_keyboard: line = [] for button in row: button = ntb(button) # btn() format line.append(button) lines.append(line) return lines # return ikb() format def ntb(button): for btn_type in ['callback_data', 'url', 'switch_inline_query', 'switch_inline_query_current_chat', 'callback_game']: value = getattr(button, btn_type) if value: break button = [button.text, value] if btn_type != 'callback_data': button.append(btn_type) return button # return {'text': text, type: value} def kb(rows=None, **kwargs): if rows is None: rows = [] lines = [] for row in rows: line = [] for button in row: button_type = type(button) if button_type == str: button = KeyboardButton(button) elif button_type == dict: button = KeyboardButton(**button) line.append(button) lines.append(line) return ReplyKeyboardMarkup(keyboard=lines, **kwargs) kbtn = KeyboardButton def force_reply(selective=True): return ForceReply(selective=selective) def array_chunk(input_, size): return [input_[i:i + size] for i in range(0, len(input_), size)]