GLEGram 12.5 — Initial public release

Based on Swiftgram 12.5 (Telegram iOS 12.5).
All GLEGram features ported and organized in GLEGram/ folder.

Features: Ghost Mode, Saved Deleted Messages, Content Protection Bypass,
Font Replacement, Fake Profile, Chat Export, Plugin System, and more.

See CHANGELOG_12.5.md for full details.
This commit is contained in:
Leeksov
2026-04-06 09:48:12 +03:00
commit 4647310322
39685 changed files with 11052678 additions and 0 deletions
+21
View File
@@ -0,0 +1,21 @@
var Action = function() {};
Action.prototype = {
run: function(arguments) {
var payload = {
"url": document.documentURI
}
arguments.completionFunction(payload)
},
finalize: function(arguments) {
const alertMessage = arguments["alert"]
const openURL = arguments["openURL"]
if (alertMessage) {
alert(alertMessage)
} else if (openURL) {
window.location = openURL
}
}
};
var ExtensionPreprocessingJS = new Action
@@ -0,0 +1,6 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
@@ -0,0 +1,14 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
},
"colors" : [
{
"idiom" : "mac",
"color" : {
"reference" : "systemPurpleColor"
}
}
]
}
@@ -0,0 +1,62 @@
// import UIKit
// import MobileCoreServices
// import UrlEscaping
// @objc(SGActionRequestHandler)
// class SGActionRequestHandler: NSObject, NSExtensionRequestHandling {
// var extensionContext: NSExtensionContext?
// func beginRequest(with context: NSExtensionContext) {
// // Do not call super in an Action extension with no user interface
// self.extensionContext = context
// let itemProvider = context.inputItems
// .compactMap({ $0 as? NSExtensionItem })
// .reduce([NSItemProvider](), { partialResult, acc in
// var nextResult = partialResult
// nextResult += acc.attachments ?? []
// return nextResult
// })
// .filter({ $0.hasItemConformingToTypeIdentifier(kUTTypePropertyList as String) })
// .first
// guard let itemProvider = itemProvider else {
// return doneWithInvalidLink()
// }
// itemProvider.loadItem(forTypeIdentifier: kUTTypePropertyList as String, options: nil, completionHandler: { [weak self] item, error in
// DispatchQueue.main.async {
// guard
// let dictionary = item as? NSDictionary,
// let results = dictionary[NSExtensionJavaScriptPreprocessingResultsKey] as? NSDictionary
// else {
// self?.doneWithInvalidLink()
// return
// }
// if let url = results["url"] as? String, let escapedUrl = url.addingPercentEncoding(withAllowedCharacters: .urlQueryValueAllowed) {
// self?.doneWithResults(["openURL": "sg://parseurl?url=\(escapedUrl)"])
// } else {
// self?.doneWithInvalidLink()
// }
// }
// })
// }
// func doneWithInvalidLink() {
// doneWithResults(["alert": "Invalid link"])
// }
// func doneWithResults(_ resultsForJavaScriptFinalizeArg: [String: Any]?) {
// if let resultsForJavaScriptFinalize = resultsForJavaScriptFinalizeArg {
// let resultsDictionary = [NSExtensionJavaScriptFinalizeArgumentKey: resultsForJavaScriptFinalize]
// let resultsProvider = NSItemProvider(item: resultsDictionary as NSDictionary, typeIdentifier: kUTTypePropertyList as String)
// let resultsItem = NSExtensionItem()
// resultsItem.attachments = [resultsProvider]
// self.extensionContext!.completeRequest(returningItems: [resultsItem], completionHandler: nil)
// } else {
// self.extensionContext!.completeRequest(returningItems: [], completionHandler: nil)
// }
// self.extensionContext = nil
// }
// }