3.4 KiB
Signal Group User Activity
"How active is each user in the signal groups I'm in?"
This project reads the configuration directory from the Signal for Desktop app and generates a spreadsheet that looks like this:
Alice | Bob | ... | |
---|---|---|---|
Neighborhod Chat | 1 | 5 | ... |
Roomate Chat | 12 | 0 | ... |
... | ... | ... | ... |
Each cell is the total message count for a user in a chat.
The goal is to afford distributed collection of group participation metadata from a community that uses disparate signal groups. No one member of the community is a member of every signal group, so we need to make use of multiple users' signal data.
I personally would not at all feel comfortable sending someone my decrypted signal database, so I implemented this as a dockerized python command line tool that runs locally. It generates a simple csv file that's easily inspectable before sharing.
Usage
Build the container
First build the docker container for the tool. You should do this once every time you pull from the repo again.
$ ./build.sh
Sending build context to Docker daemon 716.3kB
Step 1/12 : FROM archlinux:base-20241110.0.278197
---> 8f94599caa7b
[...]
Successfully built 1c3e3a1b45f5
Successfully tagged sigint:latest
Run the tool
The following command will run the analysis against the signal config directory you point it to, and dump the output to ./output/table.csv
Linux
$ ./run.sh -c ~/.config/Signal
INFO:main:writing message count table to /output/table.csv
Macos
$ ./run.sh -c ~/Library/Application\ Support/Signal
INFO:main:writing message count table to /output/table.csv
Providing a Password
If you get the following error while running the command:
Exception: you must use the -p option to pass the password in for your signal db
Then you need to find the Signal Safe Storage
1 entry in your keychain (on
macos) and pass that as an argument to the script:
$ ./run.sh -c ~/Library/Application\ Support/Signal -p YOURPASSWORD
Group Filtering
Adding -f will filter the groups under consideration to only those listed in config/chat_list.txt
$ ./run.sh -c ~/.config/Signal -f
You might want to run the command once without filtering, then paste the chat name column from the spreadsheet into config/chat_list.txt and narrow down to only the ones you care about and run it again with -f. This will ensure the output spreadsheet only has columns for users in the groups you care about, and not every single user you ever saw on Signal.
-
after some alarmist press about Signal Desktop not encrypting data at rest securely, they switched to using Electron's safe storage api which automatically creates a per-application private key when used, and stores that key in the OS keychain. I found the docs to be lacking on details but this blogpost and this gist were both helpful. ↩︎