aboutsummaryrefslogtreecommitdiffstats
path: root/inject.sh
blob: c78be30752bb75abe7721c6e2eea7799026dc49e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#!/usr/bin/env bash

set -euo pipefail

# Wraps the string in quotes, and escapes quotes, backslashes, and newlines.
jsonescape() {
	sed -e 's|[\\"]|\\&|g' -e 's|\n|\\n|g' -e 's/^\|$/"/g'
}

discord=""
if [ "$#" -ge 1 ]; then
	discord="$1"
else
	# Find where the system installation of Discord is.
	for path in \
		/opt/discord \
		/opt/discord-ptb \
		/opt/discord-canary \
		/usr/share/discord \
		/usr/share/discord-ptb \
		/usr/share/discord-canary; do
		if [ -d "$path" ]; then
			discord="$path"
			break
		fi
	done
	if [ -z "$discord" ]; then
		echo "Could not find your system installation of Discord!" 2>&1
		echo "Please pass the path to your Discord installation:" 2>&1
		echo "  $0 [path_to_discord]" 2>&1
		exit 1
	fi
fi

if [ ! -e "$discord/resources" ]; then
	echo "Directory does not exist: $discord/resources" 2>&1
	exit 1
elif [ ! -w "$discord/resources" ]; then
	echo "Can't write to directory: $discord/resources" 2>&1
	echo "If you're installing Vexcord to your system Discord installation," 2>&1
	echo "try running this script as root. (e.g. using sudo)" 2>&1
	exit 1
fi

# Move app.asar to _app.asar
if [ -f "$discord/resources/app.asar" ]; then
	mv -T "$discord/resources/app.asar" "$discord/resources/_app.asar"
elif [ ! -d "$discord/resources/app.asar" ]; then
	echo "Missing app.asar!" >&2
	echo "Try reinstalling discord." >&2
	exit 1
fi

# Make our own fake app.asar that just points to the Vencord patcher.
mkdir -p "$discord/resources/app.asar"
echo "require($(realpath Vencord/dist/patcher.js | jsonescape))" >"$discord/resources/app.asar/index.js"
echo '{"main": "index.js", "name": "discord"}' >"$discord/resources/app.asar/package.json"

echo "Installed Vexcord to: $discord"