summary refs log tree commit diff
path: root/etc
diff options
context:
space:
mode:
Diffstat (limited to 'etc')
-rw-r--r--etc/pronouns/.gitignore2
-rw-r--r--etc/pronouns/bot.sh69
2 files changed, 71 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..8b7c9802
--- /dev/null
+++ b/etc/pronouns/bot.sh
@@ -0,0 +1,69 @@
+#!/bin/sh
+set -eu
+
+Instance=https://mstdn.isometry.group
+
+if ! test -f access_token; then
+	echo 'No access_token!' >&2
+	exit 1
+fi
+
+post=true
+while getopts 'n' opt; do
+	case $opt in
+		(n) post=false;;
+		(?) exit 1;;
+	esac
+done
+shift $((OPTIND - 1))
+
+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?[?]?$|^((professional|leisure|casual) |anti-)no(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
+		text=$(printf '%s' "${pronouns}" | dehtml)
+		if $post; then
+			curl -Ss -X POST \
+				-H "Authorization: Bearer ${access_token}" \
+				-F visibility=unlisted \
+				--form-string \
+				"status=@${username} has changed pronouns to: ${text}" \
+				${Instance}/api/v1/statuses >/dev/null
+		fi
+		printf '%s' "${pronouns}" >$follower_id
+	fi
+done