From 7d38f3a7186efadb7a57224aef1b3fa4e2c2a3b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kier=C3=A1n=20Meinhardt?= Date: Fri, 11 Oct 2024 09:36:39 +0200 Subject: [PATCH] bots: program nietzschebot --- configs/bots/default.nix | 1 + configs/bots/nietzsche.nix | 31 +++++++++++++++++ flake.nix | 1 + packages/random-zeno.nix | 71 ++++++++++++++++++++++++++++++++++++++ secrets | 2 +- secrets.txt | 2 ++ 6 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 configs/bots/nietzsche.nix create mode 100755 packages/random-zeno.nix diff --git a/configs/bots/default.nix b/configs/bots/default.nix index ea38921..5920ec1 100644 --- a/configs/bots/default.nix +++ b/configs/bots/default.nix @@ -19,6 +19,7 @@ in { ./nachtischsatan.nix ./tlg-wotd.nix ./celan.nix + ./nietzsche.nix ]; systemd.tmpfiles.rules = map (path: diff --git a/configs/bots/nietzsche.nix b/configs/bots/nietzsche.nix new file mode 100644 index 0000000..dc8eb18 --- /dev/null +++ b/configs/bots/nietzsche.nix @@ -0,0 +1,31 @@ +{ + config, + pkgs, + niveumPackages, + ... +}: { + niveum.bots.nietzsche = { + enable = true; + time = "08:00"; + mastodon = { + enable = true; + tokenFile = config.age.secrets.mastodon-token-nietzsche.path; + language = "de"; + }; + command = toString (pkgs.writers.writeBash "random-nietzsche" '' + set -efu + random_number=$(( ($RANDOM % 10) + 1 )) + if [ "$random_number" -eq 1 ]; then + ${niveumPackages.random-zeno}/bin/random-zeno "/Literatur/M/Nietzsche,+Friedrich" + else + ${niveumPackages.random-zeno}/bin/random-zeno "/Philosophie/M/Nietzsche,+Friedrich" + fi + ''); + }; + + systemd.timers.bot-nietzsche.timerConfig.RandomizedDelaySec = "10h"; + + age.secrets = { + mastodon-token-nietzsche.file = ../../secrets/mastodon-token-nietzsche.age; + }; +} diff --git a/flake.nix b/flake.nix index b7d6fe2..c69235b 100644 --- a/flake.nix +++ b/flake.nix @@ -389,6 +389,7 @@ pls = pkgs.callPackage packages/pls.nix {}; polyglot = pkgs.callPackage packages/polyglot.nix {}; qrpaste = pkgs.callPackage packages/qrpaste.nix {}; + random-zeno = pkgs.callPackage packages/random-zeno.nix {}; rfc = pkgs.callPackage packages/rfc.nix {}; scanned = pkgs.callPackage packages/scanned.nix {}; swallow = pkgs.callPackage packages/swallow.nix {}; diff --git a/packages/random-zeno.nix b/packages/random-zeno.nix new file mode 100755 index 0000000..708bb33 --- /dev/null +++ b/packages/random-zeno.nix @@ -0,0 +1,71 @@ +{ writers, lib, curl, pup, gnused, coreutils, pandoc, gawk, jq }: +writers.writeDashBin "random-zeno" '' + set -efu + + export PATH=${lib.makeBinPath [ curl pup gnused coreutils pandoc gawk jq ]} + + root="http://www.zeno.org" + character_limit=350 + + fetch() { + curl -sSL "$root$1" + } + + blacklist='\/Biographie$' + + next_links() { + html="$1" + echo "$html" | pup '.zenoTXLinkInt attr{href}' | sed "/$blacklist/d" + echo "$html" | pup '.zenoTRNavBottom a attr{href}' | sed "/$blacklist/d" + } + + eval_html() { + url="$1" + html="$(fetch "$url")" + links="$(next_links "$html" | sed '/^\s*$/d')" + links_count="$(echo "$links" | wc -l)" + if [ -z "$links" ] + then + random_paragraph="$(echo "$html" | pup '.zenoCOMain p' | tr '\n' ' ' | sed 's/<\/p>/&\n/g')" + [ "$random_paragraph" = null ] && exit + prettify "$url" "$random_paragraph" + else + next_link="$(echo "$links" | shuf -n1)" + eval_html "$next_link" + fi + } + + prettify() { + url="$1" + html="$2" + + plain_text="$(echo "$html" | tr '\n' ' ' \ + | sed \ + -e 's/]*>[^<]*<\/h[1-6]>//g' \ + -e 's/\[[0-9]*\]\s*//g' \ + | pandoc -f html -t plain \ + | tr '\n' ' ' + )" + + truncated=$(echo "$plain_text" | awk -v limit="$character_limit" ' + { + for (i = 1; i <= NF; i++) { + word_length = length($i) + 1; # +1 for the space + if (total_length + word_length > limit) { + print "…"; + break; + } else { + total_length += word_length; + printf "%s ", $i; # Print the word followed by a space + } + } + print ""; + } + ' | sed 's/\([:,.!?;]\)[^:,.!?;]*…/\1 …/') + + url="$(echo "$url" | jq -sRr @uri)" + printf "%s\n\n%s\n" "$truncated" "$root$url" + } + + eval_html "$1" +'' diff --git a/secrets b/secrets index d621ecc..e74465f 160000 --- a/secrets +++ b/secrets @@ -1 +1 @@ -Subproject commit d621ecc885e40ba4a7cca7ef74bb8293f021b736 +Subproject commit e74465f63c2042028e18dd57bea128dca022b313 diff --git a/secrets.txt b/secrets.txt index b58faf0..1830cba 100644 --- a/secrets.txt +++ b/secrets.txt @@ -43,10 +43,12 @@ secrets/mastodon-token-autorenkalender.age secrets/mastodon-token-celan.age secrets/mastodon-token-hesychius.age secrets/mastodon-token-logotheca.age +secrets/mastodon-token-nietzsche.age secrets/mastodon-token-smyth.age secrets/mastodon-token-tlgwotd.age secrets/mastodon-token-transits.age secrets/matrix-token-lakai.age +secrets/matrix-token-lakai-env.age secrets/maxmind-license-key.age secrets/mega-password.age secrets/miniflux-api-token.age