code: def edit_message_reply_markup(
          self,
          chat_id: Union[int, str],
          message_id: int,
          reply_markup: "pyrogram.InlineKeyboardMarkup" = None
      ) -> "pyrogram.Message":
          
  
          r = self.send(
              functions.messages.EditMessage(
                  peer=self.resolve_peer(chat_id),
                  id=message_id,
                  reply_markup=reply_markup.write() if reply_markup else None
              )
          )
  
          for i in r.updates:
              if isinstance(i, (types.UpdateEditMessage, types.UpdateEditChannelMessage)):
                  return pyrogram.Message._parse(
                      self, i.message,
                      {i.id: i for i in r.users},
                      {i.id: i for i in r.chats}
                  )
docs: Use this method to edit only the reply markup of messages sent by the bot or via the bot (for inline bots).
  
          Args:
              chat_id (``int`` | ``str``):
                  Unique identifier (int) or username (str) of the target chat.
                  For your personal cloud (Saved Messages) you can simply use "me" or "self".
                  For a contact that exists in your Telegram address book you can use his phone number (str).
  
              message_id (``int``):
                  Message identifier in the chat specified in chat_id.
  
              reply_markup (:obj:`InlineKeyboardMarkup`, *optional*):
                  An InlineKeyboardMarkup object.
  
          Returns:
              On success, if edited message is sent by the bot, the edited
              :obj:`Message <pyrogram.Message>` is returned, otherwise True is returned.
  
          Raises:
              :class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.