From 39ef2da7d30dba7c5c1556ffa90d330a9607bb44 Mon Sep 17 00:00:00 2001 From: lassulus Date: Mon, 29 Dec 2025 19:12:20 +0100 Subject: pkgs.Reaktor -> reaktor2-plugins --- krebs/5pkgs/simple/Reaktor/scripts/random-emoji.sh | 6 -- krebs/5pkgs/simple/Reaktor/scripts/random-issue.sh | 20 ---- krebs/5pkgs/simple/Reaktor/scripts/sed-plugin.py | 58 ----------- .../5pkgs/simple/Reaktor/scripts/shack-correct.sh | 6 -- krebs/5pkgs/simple/Reaktor/scripts/tell-on_join.sh | 25 ----- .../simple/Reaktor/scripts/tell-on_privmsg.sh | 18 ---- krebs/5pkgs/simple/reaktor2-plugins.nix | 108 --------------------- krebs/5pkgs/simple/reaktor2-plugins/default.nix | 108 +++++++++++++++++++++ .../reaktor2-plugins/scripts/random-emoji.sh | 6 ++ .../reaktor2-plugins/scripts/random-issue.sh | 20 ++++ .../simple/reaktor2-plugins/scripts/sed-plugin.py | 58 +++++++++++ .../reaktor2-plugins/scripts/shack-correct.sh | 6 ++ .../reaktor2-plugins/scripts/tell-on_join.sh | 25 +++++ .../reaktor2-plugins/scripts/tell-on_privmsg.sh | 18 ++++ 14 files changed, 241 insertions(+), 241 deletions(-) delete mode 100755 krebs/5pkgs/simple/Reaktor/scripts/random-emoji.sh delete mode 100755 krebs/5pkgs/simple/Reaktor/scripts/random-issue.sh delete mode 100755 krebs/5pkgs/simple/Reaktor/scripts/sed-plugin.py delete mode 100755 krebs/5pkgs/simple/Reaktor/scripts/shack-correct.sh delete mode 100755 krebs/5pkgs/simple/Reaktor/scripts/tell-on_join.sh delete mode 100755 krebs/5pkgs/simple/Reaktor/scripts/tell-on_privmsg.sh delete mode 100644 krebs/5pkgs/simple/reaktor2-plugins.nix create mode 100644 krebs/5pkgs/simple/reaktor2-plugins/default.nix create mode 100755 krebs/5pkgs/simple/reaktor2-plugins/scripts/random-emoji.sh create mode 100755 krebs/5pkgs/simple/reaktor2-plugins/scripts/random-issue.sh create mode 100755 krebs/5pkgs/simple/reaktor2-plugins/scripts/sed-plugin.py create mode 100755 krebs/5pkgs/simple/reaktor2-plugins/scripts/shack-correct.sh create mode 100755 krebs/5pkgs/simple/reaktor2-plugins/scripts/tell-on_join.sh create mode 100755 krebs/5pkgs/simple/reaktor2-plugins/scripts/tell-on_privmsg.sh diff --git a/krebs/5pkgs/simple/Reaktor/scripts/random-emoji.sh b/krebs/5pkgs/simple/Reaktor/scripts/random-emoji.sh deleted file mode 100755 index 6f3dd4a3f..000000000 --- a/krebs/5pkgs/simple/Reaktor/scripts/random-emoji.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -curl -sS http://emojicons.com/random | \ - grep data-text | \ - sed -n 's/.*>\(.*\)<\/textarea>/\1/p' | \ - head -n 1 | \ - xmlstarlet unesc diff --git a/krebs/5pkgs/simple/Reaktor/scripts/random-issue.sh b/krebs/5pkgs/simple/Reaktor/scripts/random-issue.sh deleted file mode 100755 index 5c47c6156..000000000 --- a/krebs/5pkgs/simple/Reaktor/scripts/random-issue.sh +++ /dev/null @@ -1,20 +0,0 @@ -#! /bin/sh -set -eu -# requires env: -# $state_dir -# $origin - -# in PATH: git,lentil,coreutils -subdir=`echo "$1" | tr -dc "[:alnum:]"` -name=`echo "$origin" | tr -dc "[:alnum:]"` -track="$state_dir/$name-checkout" -(if test -e "$track" ;then - cd "$track" - git fetch origin master - git reset --hard origin/master -else - git clone "$origin" "$track" -fi) >&2 - -cd "$track" -lentil "${subdir:-.}" -f csv | sed 1d | shuf | head -1 diff --git a/krebs/5pkgs/simple/Reaktor/scripts/sed-plugin.py b/krebs/5pkgs/simple/Reaktor/scripts/sed-plugin.py deleted file mode 100755 index 4925b25bb..000000000 --- a/krebs/5pkgs/simple/Reaktor/scripts/sed-plugin.py +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/env python3 - -# Usage: -# _from=krebs state_dir=. python sed-plugin.py 'dick butt' -# _from=krebs state_dir=. python sed-plugin.py 's/t/l/g' -# > dick bull -import shelve -from os import environ -from os.path import join -from sys import argv -from time import sleep -import re - -# try to open the shelve file until it succeeds -while True: - try: - d = shelve.open( - join(environ['state_dir'], 'sed-plugin.shelve'), - writeback=True - ) - break - except: # noqa: E722 - sleep(0.2) -usr = environ['_from'] - - -def is_regex(line): - myre = re.compile(r'^s/(?:\\/|[^/])+/(?:\\/|[^/])*/[ig]?$') - return myre.match(line) - - -line = argv[1] - -if is_regex(line): - last = d.get(usr, None) - if last: - from subprocess import Popen, PIPE - p = Popen(['sed', line], stdin=PIPE, stdout=PIPE, stderr=PIPE) - so, se = p.communicate(bytes("{}\n".format(last), "UTF-8")) - if p.returncode: - print("something went wrong when trying to process your regex: {}".format(line.strip())) - ret = so.decode() - if len(ret) > 512: - print('message to long, skipped') - elif len(ret.split('\n')) > 5: - print('to many lines, skipped') - else: - if last.strip() != ret.strip(): - print("\x02{}\x02 meant: {}".format(usr, ret.strip())) - if ret: - d[usr] = ret - - else: - print("no last message") -else: - d[usr] = line - -d.close() diff --git a/krebs/5pkgs/simple/Reaktor/scripts/shack-correct.sh b/krebs/5pkgs/simple/Reaktor/scripts/shack-correct.sh deleted file mode 100755 index d500b3cb3..000000000 --- a/krebs/5pkgs/simple/Reaktor/scripts/shack-correct.sh +++ /dev/null @@ -1,6 +0,0 @@ -#! /bin/sh -set -eu -printf "Sie meinten wohl \"" -echo -n $@ | sed 's/Shack/shack/g' -echo "\" check out https://wiki.shackspace.de/project/logo_and_ci#name_ci" -echo "${_from}--" diff --git a/krebs/5pkgs/simple/Reaktor/scripts/tell-on_join.sh b/krebs/5pkgs/simple/Reaktor/scripts/tell-on_join.sh deleted file mode 100755 index 6978e38c6..000000000 --- a/krebs/5pkgs/simple/Reaktor/scripts/tell-on_join.sh +++ /dev/null @@ -1,25 +0,0 @@ -#! /bin/sh -set -euf - -# require flock from util-linux (pkgs.util-linux) -if test "${FLOCK-}" != "$state_file"; then - exec env FLOCK="$state_file" flock "$state_file" "$0" "$@" -fi - -# TODO tell now, if already joined -jq -r <"$state_file" \ - --arg to "$_from" \ - --arg msgtarget "$_msgtarget" \ - ' - select(.to == $to and .msgtarget == $msgtarget) | - "\(.to): \(.text) \u00032-- \(.from)\u00032 \(.date)" - ' - -jq -c <"$state_file" >"$state_file.tmp" \ - --arg to "$_from" \ - --arg msgtarget "$_msgtarget" \ - ' - select((.to == $to and .msgtarget == $msgtarget) | not) - ' - -mv "$state_file.tmp" "$state_file" diff --git a/krebs/5pkgs/simple/Reaktor/scripts/tell-on_privmsg.sh b/krebs/5pkgs/simple/Reaktor/scripts/tell-on_privmsg.sh deleted file mode 100755 index fc05bdefb..000000000 --- a/krebs/5pkgs/simple/Reaktor/scripts/tell-on_privmsg.sh +++ /dev/null @@ -1,18 +0,0 @@ -#! /bin/sh -set -euf - -# require flock from util-linux -if test "${FLOCK-}" != "$state_file"; then - exec env FLOCK="$state_file" flock "$state_file" "$0" "$@" -fi - -# TODO tell now, if already joined -jq -cn \ - --arg from "$_from" \ - --arg to "${1%% *}" \ - --arg text "${1#* }" \ - --arg msgtarget "$_msgtarget" \ - '{ $from, $to, $text, $msgtarget, date: (now | todate) }' \ - >> "$state_file" - -echo 'Consider it noted.' # that's what lambdabot says... diff --git a/krebs/5pkgs/simple/reaktor2-plugins.nix b/krebs/5pkgs/simple/reaktor2-plugins.nix deleted file mode 100644 index 5b7be5d33..000000000 --- a/krebs/5pkgs/simple/reaktor2-plugins.nix +++ /dev/null @@ -1,108 +0,0 @@ -{ pkgs, stockholm, ... }: -with stockholm.lib; - -{ - generators = { - command_hook = commands: { - pattern = - "^\\s*([0-9A-Za-z._][0-9A-Za-z._-]*)(?:\\s+(.*\\S))?\\s*$"; - command = 1; - arguments = [2]; - commands = commands; - }; - }; - - commands = { - - random-emoji = { - filename = stockholm.outPath + "/krebs/5pkgs/simple/Reaktor/scripts/random-emoji.sh"; - env = { - PATH = makeBinPath (with pkgs; [ coreutils gnused gnugrep xmlstarlet wget ]); - }; - }; - - dance = { - filename = pkgs.writers.writeDash "dance" '' - ${pkgs.krebsdance}/bin/krebsdance --dance "$@"; - ''; - }; - - nixos-version = { - filename = pkgs.writers.writeDash "nixos-version" '' - . /etc/os-release - echo "$PRETTY_NAME" - ''; - }; - - stockholm-issue = { - filename = stockholm.outPath + "/krebs/5pkgs/simple/Reaktor/scripts/random-issue.sh"; - env = { - PATH = makeBinPath (with pkgs; [ coreutils git gnused haskellPackages.lentil ]); - origin = "http://cgit.gum/stockholm"; - state_dir = "/tmp/stockholm-issue"; - }; - }; - - }; - - hooks = { - - sed = { - activate = "always"; - pattern = "^(.*)$"; - arguments = [1]; - command = { - env = { - PATH = makeBinPath (with pkgs; [ gnused ]); - state_dir = "/tmp"; - }; - filename = pkgs.writers.writeDash "sed-plugin" '' - set -efu - exec ${pkgs.python3}/bin/python \ - ${./Reaktor/scripts/sed-plugin.py} "$@" - ''; - }; - }; - - shack-correct = { - activate = "match"; - pattern = "^(.*Shack.*)$"; - arguments = [1]; - command.filename = stockholm.outPath + "/krebs/5pkgs/simple/Reaktor/scripts/shack-correct.sh"; - }; - - - url-title = { - #pattern = "^.*(http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+).*$"; - pattern = "^.*(http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+).*$"; - activate = "match"; - arguments = [1]; - command = { - filename = pkgs.writePython3 "url-title" { deps = with pkgs.python3Packages; [ beautifulsoup4 lxml ]; } '' - import cgi - import sys - import urllib.request - from bs4 import BeautifulSoup - - try: - req = urllib.request.Request(sys.argv[1]) - req.add_header('user-agent', 'Reaktor-url-title') - resp = urllib.request.urlopen(req) - if resp.headers['content-type'].find('text/html') >= 0: - soup = BeautifulSoup(resp.read(16000), "lxml") - title = soup.find('title').string - - if len(title.split('\n')) > 5: - title = '\n'.join(title.split('\n')[:5]) - - print(title[:450]) - else: - cd_header = resp.headers['content-disposition'] - print(cgi.parse_header(cd_header)[1]['filename']) - except: # noqa: E722 - pass - ''; - }; - }; - }; -} diff --git a/krebs/5pkgs/simple/reaktor2-plugins/default.nix b/krebs/5pkgs/simple/reaktor2-plugins/default.nix new file mode 100644 index 000000000..3f2f6eac2 --- /dev/null +++ b/krebs/5pkgs/simple/reaktor2-plugins/default.nix @@ -0,0 +1,108 @@ +{ pkgs, stockholm, ... }: +with stockholm.lib; + +{ + generators = { + command_hook = commands: { + pattern = + "^\\s*([0-9A-Za-z._][0-9A-Za-z._-]*)(?:\\s+(.*\\S))?\\s*$"; + command = 1; + arguments = [2]; + commands = commands; + }; + }; + + commands = { + + random-emoji = { + filename = ./scripts/random-emoji.sh; + env = { + PATH = makeBinPath (with pkgs; [ coreutils gnused gnugrep xmlstarlet wget ]); + }; + }; + + dance = { + filename = pkgs.writers.writeDash "dance" '' + ${pkgs.krebsdance}/bin/krebsdance --dance "$@"; + ''; + }; + + nixos-version = { + filename = pkgs.writers.writeDash "nixos-version" '' + . /etc/os-release + echo "$PRETTY_NAME" + ''; + }; + + stockholm-issue = { + filename = ./scripts/random-issue.sh; + env = { + PATH = makeBinPath (with pkgs; [ coreutils git gnused haskellPackages.lentil ]); + origin = "http://cgit.gum/stockholm"; + state_dir = "/tmp/stockholm-issue"; + }; + }; + + }; + + hooks = { + + sed = { + activate = "always"; + pattern = "^(.*)$"; + arguments = [1]; + command = { + env = { + PATH = makeBinPath (with pkgs; [ gnused ]); + state_dir = "/tmp"; + }; + filename = pkgs.writers.writeDash "sed-plugin" '' + set -efu + exec ${pkgs.python3}/bin/python \ + ${./scripts/sed-plugin.py} "$@" + ''; + }; + }; + + shack-correct = { + activate = "match"; + pattern = "^(.*Shack.*)$"; + arguments = [1]; + command.filename = ./scripts/shack-correct.sh; + }; + + + url-title = { + #pattern = "^.*(http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+).*$"; + pattern = "^.*(http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+).*$"; + activate = "match"; + arguments = [1]; + command = { + filename = pkgs.writePython3 "url-title" { deps = with pkgs.python3Packages; [ beautifulsoup4 lxml ]; } '' + import cgi + import sys + import urllib.request + from bs4 import BeautifulSoup + + try: + req = urllib.request.Request(sys.argv[1]) + req.add_header('user-agent', 'Reaktor-url-title') + resp = urllib.request.urlopen(req) + if resp.headers['content-type'].find('text/html') >= 0: + soup = BeautifulSoup(resp.read(16000), "lxml") + title = soup.find('title').string + + if len(title.split('\n')) > 5: + title = '\n'.join(title.split('\n')[:5]) + + print(title[:450]) + else: + cd_header = resp.headers['content-disposition'] + print(cgi.parse_header(cd_header)[1]['filename']) + except: # noqa: E722 + pass + ''; + }; + }; + }; +} diff --git a/krebs/5pkgs/simple/reaktor2-plugins/scripts/random-emoji.sh b/krebs/5pkgs/simple/reaktor2-plugins/scripts/random-emoji.sh new file mode 100755 index 000000000..6f3dd4a3f --- /dev/null +++ b/krebs/5pkgs/simple/reaktor2-plugins/scripts/random-emoji.sh @@ -0,0 +1,6 @@ +#!/bin/sh +curl -sS http://emojicons.com/random | \ + grep data-text | \ + sed -n 's/.*>\(.*\)<\/textarea>/\1/p' | \ + head -n 1 | \ + xmlstarlet unesc diff --git a/krebs/5pkgs/simple/reaktor2-plugins/scripts/random-issue.sh b/krebs/5pkgs/simple/reaktor2-plugins/scripts/random-issue.sh new file mode 100755 index 000000000..5c47c6156 --- /dev/null +++ b/krebs/5pkgs/simple/reaktor2-plugins/scripts/random-issue.sh @@ -0,0 +1,20 @@ +#! /bin/sh +set -eu +# requires env: +# $state_dir +# $origin + +# in PATH: git,lentil,coreutils +subdir=`echo "$1" | tr -dc "[:alnum:]"` +name=`echo "$origin" | tr -dc "[:alnum:]"` +track="$state_dir/$name-checkout" +(if test -e "$track" ;then + cd "$track" + git fetch origin master + git reset --hard origin/master +else + git clone "$origin" "$track" +fi) >&2 + +cd "$track" +lentil "${subdir:-.}" -f csv | sed 1d | shuf | head -1 diff --git a/krebs/5pkgs/simple/reaktor2-plugins/scripts/sed-plugin.py b/krebs/5pkgs/simple/reaktor2-plugins/scripts/sed-plugin.py new file mode 100755 index 000000000..4925b25bb --- /dev/null +++ b/krebs/5pkgs/simple/reaktor2-plugins/scripts/sed-plugin.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python3 + +# Usage: +# _from=krebs state_dir=. python sed-plugin.py 'dick butt' +# _from=krebs state_dir=. python sed-plugin.py 's/t/l/g' +# > dick bull +import shelve +from os import environ +from os.path import join +from sys import argv +from time import sleep +import re + +# try to open the shelve file until it succeeds +while True: + try: + d = shelve.open( + join(environ['state_dir'], 'sed-plugin.shelve'), + writeback=True + ) + break + except: # noqa: E722 + sleep(0.2) +usr = environ['_from'] + + +def is_regex(line): + myre = re.compile(r'^s/(?:\\/|[^/])+/(?:\\/|[^/])*/[ig]?$') + return myre.match(line) + + +line = argv[1] + +if is_regex(line): + last = d.get(usr, None) + if last: + from subprocess import Popen, PIPE + p = Popen(['sed', line], stdin=PIPE, stdout=PIPE, stderr=PIPE) + so, se = p.communicate(bytes("{}\n".format(last), "UTF-8")) + if p.returncode: + print("something went wrong when trying to process your regex: {}".format(line.strip())) + ret = so.decode() + if len(ret) > 512: + print('message to long, skipped') + elif len(ret.split('\n')) > 5: + print('to many lines, skipped') + else: + if last.strip() != ret.strip(): + print("\x02{}\x02 meant: {}".format(usr, ret.strip())) + if ret: + d[usr] = ret + + else: + print("no last message") +else: + d[usr] = line + +d.close() diff --git a/krebs/5pkgs/simple/reaktor2-plugins/scripts/shack-correct.sh b/krebs/5pkgs/simple/reaktor2-plugins/scripts/shack-correct.sh new file mode 100755 index 000000000..d500b3cb3 --- /dev/null +++ b/krebs/5pkgs/simple/reaktor2-plugins/scripts/shack-correct.sh @@ -0,0 +1,6 @@ +#! /bin/sh +set -eu +printf "Sie meinten wohl \"" +echo -n $@ | sed 's/Shack/shack/g' +echo "\" check out https://wiki.shackspace.de/project/logo_and_ci#name_ci" +echo "${_from}--" diff --git a/krebs/5pkgs/simple/reaktor2-plugins/scripts/tell-on_join.sh b/krebs/5pkgs/simple/reaktor2-plugins/scripts/tell-on_join.sh new file mode 100755 index 000000000..6978e38c6 --- /dev/null +++ b/krebs/5pkgs/simple/reaktor2-plugins/scripts/tell-on_join.sh @@ -0,0 +1,25 @@ +#! /bin/sh +set -euf + +# require flock from util-linux (pkgs.util-linux) +if test "${FLOCK-}" != "$state_file"; then + exec env FLOCK="$state_file" flock "$state_file" "$0" "$@" +fi + +# TODO tell now, if already joined +jq -r <"$state_file" \ + --arg to "$_from" \ + --arg msgtarget "$_msgtarget" \ + ' + select(.to == $to and .msgtarget == $msgtarget) | + "\(.to): \(.text) \u00032-- \(.from)\u00032 \(.date)" + ' + +jq -c <"$state_file" >"$state_file.tmp" \ + --arg to "$_from" \ + --arg msgtarget "$_msgtarget" \ + ' + select((.to == $to and .msgtarget == $msgtarget) | not) + ' + +mv "$state_file.tmp" "$state_file" diff --git a/krebs/5pkgs/simple/reaktor2-plugins/scripts/tell-on_privmsg.sh b/krebs/5pkgs/simple/reaktor2-plugins/scripts/tell-on_privmsg.sh new file mode 100755 index 000000000..fc05bdefb --- /dev/null +++ b/krebs/5pkgs/simple/reaktor2-plugins/scripts/tell-on_privmsg.sh @@ -0,0 +1,18 @@ +#! /bin/sh +set -euf + +# require flock from util-linux +if test "${FLOCK-}" != "$state_file"; then + exec env FLOCK="$state_file" flock "$state_file" "$0" "$@" +fi + +# TODO tell now, if already joined +jq -cn \ + --arg from "$_from" \ + --arg to "${1%% *}" \ + --arg text "${1#* }" \ + --arg msgtarget "$_msgtarget" \ + '{ $from, $to, $text, $msgtarget, date: (now | todate) }' \ + >> "$state_file" + +echo 'Consider it noted.' # that's what lambdabot says... -- cgit v1.2.3