summary refs log tree commit diff
path: root/etc/pronouns
diff options
context:
space:
mode:
Diffstat (limited to 'etc/pronouns')
-rw-r--r--etc/pronouns/.gitignore2
-rw-r--r--etc/pronouns/bot.sh57
2 files changed, 59 insertions, 0 deletions
diff --git a/etc/pronouns/.gitignore b/etc/pronouns/.gitignore
new file mode 100644
index 00000000..facfb3f3
--- /dev/null
+++ b/etc/pronouns/.gitignore
@@ -0,0 +1,2 @@
+access_token
+[1-9]*
diff --git a/etc/pronouns/bot.sh b/etc/pronouns/bot.sh
new file mode 100644
index 00000000..aa613bd9
--- /dev/null
+++ b/etc/pronouns/bot.sh
@@ -0,0 +1,57 @@
+#!/bin/sh
+set -eu
+
+Instance=https://mstdn.isometry.group
+
+if ! test -f access_token; then
+	echo 'No access_token!' >&2
+	exit 1
+fi
+
+access_token=$(cat access_token)
+
+account_id=$(
+	curl -Ss \
+		-H "Authorization: Bearer ${access_token}" \
+		${Instance}/api/v1/accounts/verify_credentials |
+	jq -r .id
+)
+
+# XXX: no pagination because I don't expect this to ever have over 80 followers
+followers=$(
+	curl -Ss \
+		-H "Authorization: Bearer ${access_token}" \
+		"${Instance}/api/v1/accounts/${account_id}/followers?limit=80" |
+	jq -r 'map(select(.acct | contains("@") | not)) | .[].id'
+)
+
+for follower_id in $followers 112284333737697665; do
+	account=$(
+		curl -Ss \
+			-H "Authorization: Bearer ${access_token}" \
+			${Instance}/api/v1/accounts/${follower_id}
+	)
+	username=$(printf '%s' "${account}" | jq -r .username)
+	pronouns=$(
+		printf '%s' "${account}" |
+		jq -r '
+			.fields |
+			map(select(.name | test("^prono(un|m)s?[?]?$"; "i"))) |
+			.[].value
+		'
+	)
+	if ! test -f $follower_id; then
+		printf '%s' "${pronouns}" >$follower_id
+		continue
+	fi
+	old_pronouns=$(cat $follower_id)
+	if [ "${pronouns}" != "${old_pronouns}" ]; then
+		curl -Ss -X POST \
+			-H "Authorization: Bearer ${access_token}" \
+			-F visibility=unlisted \
+			--form-string \
+			"status=@${username} has changed pronouns to: ${pronouns}" \
+			${Instance}/api/v1/statuses >/dev/null
+		printf '%s' "${pronouns}" >$follower_id
+	fi
+done