Hello! Here is the long awaited Documentation for the Scripting Engine.
Contributions and improvements to this Documentation are gladly accepted via PRs.
In case of any questions, feel free to ask via opening an issue.
Every script written for the Scripting Engine must include a header section at the beginning of the file. The header follows a specific format, as shown below:
// ==SE_module==
// name: script_name
// displayName: Script Name
// description: Script description
// version: 1.0
// author: Author
// ==/SE_module==
The following fields are required: name
, version
, author
Additionally, there are also optional fields available which are: displayName
, description
, minSnapchatVersion
, minSEVersion
, permissions
name
: Descriptive name for the script. Must be composed of lowercase letters and underscores only.
displayName
: Display name of the script.
author
: Name of the script's creator.
version
: Version number of the script (e.g., 1.0).
description
: Brief explanation of the script's functionality.
minSnapchatVersion
: Minimum required Snapchat version code (e.g., 106822).
minSEVersion
: Minimum required SnapEnhance version code (e.g., ).
permissions
: Grant permissions to the script (e.g. unsafe-classloader)
executionSides
: Set a custom execution side (e.g. core, manager)
To start off, you can find a couple of Example scripts written by us here.
This scripts main function is, as probably recognizable by the name, to disable the camera.
Conveniently enough, Android offers a great way to do this by using getCameraDisabled
.
var getCameraDisabledMethod = hooker.findMethodWithParameters("android.app.admin.DevicePolicyManager", "getCameraDisabled", ["android.content.ComponentName"])
hooker.hook(getCameraDisabledMethod, hooker.stage.BEFORE, param => {
param.result = true
})
It does this by hooking getCameraDisabled
in the android.app.admin.DevicePolicyManager
class and making Snapchat believe the camera is disabled by always returning true.
This script is supposed to demonstrate the use of IPC Events.
It simply emits an IPC Event with specific arguments.
module.onSnapMainActivityCreate = activity => {
ipc.emit("myEvent", "hello", 255, activity.packageName)
}
Which then can get received by other scripts or functions using listeners.
module.onSnapEnhanceLoad = context => {
ipc.on("myEvent", (args) => {
longToast("received event: " + args)
})
}
This script demonstrates the use of Toast messages, these can be useful to debug or transmit information to the user.
module.onSnapMainActivityCreate = context => {
longToast("Snapchat opened!")
}
module.onUnload = () => {
shortToast("Script unloaded!")
}
Please note that in most cases a context is required.