Programs to create chat backups for use with cheesecake
Cheesecake currently supports backups of three types - discord, matrix, and generic.
generic is intended to be a general format you can use for most chat platforms. This repo
includes an example of using generic to backup WhatsApp chats.
The script lets you backup whole servers, but it doesn't handle DMs. The backup includes a lot of stuff, including custom emoji and attachments. The resulting backup files can easily get very large on big servers, so don't include attachments if you're backing up an enormous server.
GUILD: The server ID of the server you want to backup.TOKEN: The token of the bot account you're using to backup.
- Clone and open a terminal in the repo
- Optionally create and activate a virtual environment
cd discordpip install -r requirements.txt- Create
.envfile or specify environment variables in shell python discord-archive.py
Backing up matrix involves running two scripts - the first one downloads the messages from the
server, and the second one runs locally to convert the downloaded messages into a format compatible
with cheesecake. The first script depends on python-olm, which can be
difficult to install on
windows. The second script, however, should work just fine on windows. So if you're on windows and
you're unable to get the dependencies installed, you can run the first script on a unix-based
system and copy the output files to windows, or you could run the second script on that system too.
If you're running only the second script on windows, do pip install python-dotenv
The first script, matrix-archive.py, is from russelldavies/matrix-archive
with some modifications. The output format is modified a bit and the output files should also be
compatible with windows now (recommended even if you're on unix, so that you can share the backup).
- Clone and open a terminal in the repo
- Optionally create and activate a virtual environment
cd matrixpip install -r requirements.txt(this might fail on windows, read above for workaround)python matrix-archive.pypython matrix-convertor.py
WhatsApp's export format lacks a lot of information, like user avatars, phone numbers, and replies. Because of this, the backup script will ask you for a lot of this information, but replies will only be saved like normal messages (you won't be able to see what message it is a reply to). You can easily add that information by editing the database, but that is obviously tedious and impractical when there are lots of replies.
By default the script asks for the data through stdin, but you can also create an info.json file
inside the input directory so the script can run without requiring any interaction.
There are two global variables in the script, INPUT_PATH and OUTPUT_PATH. INPUT_PATH should
have subdirectories for each of the chats you want to backup. Each subdirectory should have at
least the exported txt file, and they can also have the attachments. The optional info.json
should also be present directly inside INPUT_PATH.
OUTPUT_PATH is where the converted files will be saved. This directory can be renamed later, and
must be copied to the refrigerator for cheesecake to use. It can also be shared with other people.
- Clone and open a terminal in the repo
- Optionally create and activate a virtual environment
cd whatsapppip install -r requirements.txt- Copy the exported files to
INPUT_PATH(whatsapp_exportsby default) - Optionally create an
info.jsonfile (details below) python whatsapp.py
If you want to specify the chat metadata (avatar and description), create a chats key.
If you want to specify the user metadata (phone no., avatar, and name color) create a users key.
Data for the chats and users that are not present in the info.json file can be given through
stdin.
Create a key with the name of the chat/user, and the value is an object with avatar and topic
(description) for chats, and user_id (phone no.), avatar, and color (the color their name
will be shown in) for users. All the values must be present, but you can use null if you want it
empty. The avatar path is relative to INPUT_PATH (or you can use an absolute path).
{
"chats": {
"John Doe": {
"avatar": "John Doe.jpg",
"topic": null
},
"Class Reunion": {
"avatar": "Class Reunion.jpg",
"topic": "Discuss the upcoming class reunion."
}
},
"users": {
"John Doe": {
"user_id": "14748183636",
"avatar": "John Doe.jpg",
"color": null
},
"Jane Doe": {
"user_id": "16365459292",
"avatar": "../default.svg",
"color": "#ff0000"
}
}
}