summaryrefslogtreecommitdiffstats
path: root/noise/modules
diff options
context:
space:
mode:
authortv <tv@also>2011-05-29 15:47:21 +0200
committertv <tv@also>2011-05-29 15:47:21 +0200
commite0ec5d2e8560ae433ee677622b24ba82dbe7630b (patch)
treea1fcb14eeafc3df41427896d9b413087d24d71f1 /noise/modules
parentedaa1d7f7a0ed33c019fce185b8aff7563498b6e (diff)
lowered filesystem hierarchy--everything are modules
Diffstat (limited to 'noise/modules')
-rwxr-xr-xnoise/modules/cat14
-rwxr-xr-xnoise/modules/chat33
-rwxr-xr-xnoise/modules/date6
-rwxr-xr-xnoise/modules/echo6
-rwxr-xr-xnoise/modules/ein_mal_eins37
-rwxr-xr-xnoise/modules/espeak34
-rwxr-xr-xnoise/modules/help24
-rwxr-xr-xnoise/modules/join15
-rwxr-xr-xnoise/modules/lang22
-rwxr-xr-xnoise/modules/mpc14
-rwxr-xr-xnoise/modules/names22
-rwxr-xr-xnoise/modules/nick10
-rwxr-xr-xnoise/modules/part15
-rwxr-xr-xnoise/modules/ping24
-rwxr-xr-xnoise/modules/play36
-rwxr-xr-xnoise/modules/pong26
-rwxr-xr-xnoise/modules/query23
-rwxr-xr-xnoise/modules/send_to_channel17
-rwxr-xr-xnoise/modules/sendmail55
-rwxr-xr-xnoise/modules/shackstatus104
-rwxr-xr-xnoise/modules/sleep10
-rwxr-xr-xnoise/modules/stream64
-rwxr-xr-xnoise/modules/temp56
-rwxr-xr-xnoise/modules/test13
-rwxr-xr-xnoise/modules/twitter125
-rwxr-xr-xnoise/modules/vvs17
-rwxr-xr-xnoise/modules/wall8
-rwxr-xr-xnoise/modules/zeit19
28 files changed, 849 insertions, 0 deletions
diff --git a/noise/modules/cat b/noise/modules/cat
new file mode 100755
index 00000000..e090acba
--- /dev/null
+++ b/noise/modules/cat
@@ -0,0 +1,14 @@
+#! /bin/sh
+case "$1" in
+ (--help) : ;;
+ (*)
+ while read line ; do
+ case "$line" in
+ (/quit)
+ break 2
+ ;;
+ (*)
+ echo "[$line]"
+ esac
+ done
+esac
diff --git a/noise/modules/chat b/noise/modules/chat
new file mode 100755
index 00000000..e5badc36
--- /dev/null
+++ b/noise/modules/chat
@@ -0,0 +1,33 @@
+#! /bin/sh
+
+case "$1" in
+ (--help) echo send text to everyone with @@ prepended ;;
+ (/nick)
+ echo set nick to $2
+ echo /set chat_nick $2 >$NOISE_linefeed;;
+ (/names)
+ cd /tmp/noise
+ . $NOISE_pid/environment
+ nick="${chat_nick-$NOISE_pid}"
+ channel="$chat_channel"
+ echo "Users in channel $channel"
+ for client in * ; do
+ . $client/environment
+ chat_nick="${chat_nick-$client}"
+ if test "$channel" = "$chat_channel" && test "$default_command" = chat ; then
+ echo "$chat_nick"
+ fi
+ unset chat_nick
+ unset chat_channel
+ unset default_command
+ done ;;
+ (*)
+ cd /tmp/noise
+ . $NOISE_pid/environment
+ nick="${chat_nick-$NOISE_pid}"
+
+ echo "/send_to_channel $chat_channel $nick: $*" > $NOISE_linefeed
+
+
+ #echo /wall @@ $* >$NOISE_linefeed
+esac
diff --git a/noise/modules/date b/noise/modules/date
new file mode 100755
index 00000000..8cd1b0c1
--- /dev/null
+++ b/noise/modules/date
@@ -0,0 +1,6 @@
+#! /bin/sh
+case "$1" in
+ (--help) : ;;
+ (*)
+ date --rfc-3339=s
+esac
diff --git a/noise/modules/echo b/noise/modules/echo
new file mode 100755
index 00000000..344dd963
--- /dev/null
+++ b/noise/modules/echo
@@ -0,0 +1,6 @@
+#! /bin/sh
+case "$1" in
+ (--help) : ;;
+ (*)
+ echo "$*"
+esac
diff --git a/noise/modules/ein_mal_eins b/noise/modules/ein_mal_eins
new file mode 100755
index 00000000..fb385b31
--- /dev/null
+++ b/noise/modules/ein_mal_eins
@@ -0,0 +1,37 @@
+#! /bin/bash
+
+R() {
+ echo "`od -t d -N 1 /dev/urandom | sed -rn '1s/^[0-9]+ +//p'` % $@" | bc
+}
+
+
+
+
+case "$1" in
+ (--help) echo Stellt eine einfache Aufgabe ;;
+ (*)
+ a="`R 69`"
+ b="`R 69`"
+ op="`echo "\
+Was ist, A hoch B
+Was ist, A plus B
+Was ist, A minus B
+Was ist, A mal B
+Was ist, sinus von 0
+Was ist, Pi halbe mal 2
+Was ist, 2 hoch 8
+Was ist, 2 hoch 16
+Was ist, 2 hoch 32
+Was ist, 42 geteilt durch Pi mal 100
+Was ist, l n von 1
+Was ist, 42
+Was ist, 23
+Starte den Server neu
+Löte ein Kabel an einen Kompjuter
+Was ist, A geteilt durch B"`"
+ o="$(R `echo "$op" | wc -l` + 1)"
+
+ aufgabe=`echo "$op" | sed -n "$o{s/A/$a/;s/B/$b/;p}"`
+
+ echo "/espeak -v Löse die Aufgabe: $aufgabe?" >$NOISE_linefeed
+esac
diff --git a/noise/modules/espeak b/noise/modules/espeak
new file mode 100755
index 00000000..97305b5e
--- /dev/null
+++ b/noise/modules/espeak
@@ -0,0 +1,34 @@
+#! /bin/sh
+
+print_var() {
+ echo "$1 = $2"
+}
+
+speak() {
+ p="${noise_pitch-100}"
+ v="${noise_lang-de}"
+ k="${noise_capital-0}"
+ a="${noise_amplitude-100}"
+ g="${noise_gap-1}"
+ if test "$debug" = true; then
+ print_var pitch $p
+ print_var lang $v
+ print_var capital $k
+ print_var amplitude $a
+ print_var gap $g
+ fi
+ if test "$verbose" = true; then
+ echo "espeak: $@"
+ fi
+ #echo "espeak -p \"$pitch\" -v \"$lang\" \"$*\"" >&2
+ (espeak --stdout -a $a -k $k -p $p -v $v -g $g | aplay -Dplug:dmix)<<EOF
+$*
+EOF
+}
+
+case "$1" in
+ (--help) echo say something with espeak ;;
+ (-d|--debug) shift; debug=true speak "$@";;
+ (-v|--verbose) shift; verbose=true speak "$@";;
+ (*) speak "$@";;
+esac
diff --git a/noise/modules/help b/noise/modules/help
new file mode 100755
index 00000000..bc4c2931
--- /dev/null
+++ b/noise/modules/help
@@ -0,0 +1,24 @@
+#! /bin/sh
+case "$1" in
+ (-*) : ;; # ignore all options
+ ('') { for directory in `echo "$NOISE_PATH" | tr : \ ` ; do
+ for module in "$directory"/* ; do
+ echo `basename "$module"` `$module --help`
+ done 2>/dev/null
+ done
+ ## print all documented built-in commands
+ sed -rn 's:^noise_([a-z]+)\(\) \{ # (.+)?$:\1 \2:p' "$NOISE"
+ } | sort | uniq | sed -rn '
+ $s/$//
+ s:^([a-z]+) (.+):type /\1 to \2:p' ;;
+ (*)
+ ## call
+ for directory in `echo "$NOISE_PATH" | tr : \ ` ; do
+ for module in "$directory/$1" ; do
+ if test -e $module ; then
+ shift
+ exec $module --help --verbose "$@" 2>&1
+ fi
+ done
+ done
+esac
diff --git a/noise/modules/join b/noise/modules/join
new file mode 100755
index 00000000..68afcb66
--- /dev/null
+++ b/noise/modules/join
@@ -0,0 +1,15 @@
+#! /bin/sh
+
+case "$1" in
+ (--help) echo set default_command to chat and join channel ;;
+ (*)
+ . /tmp/noise/$NOISE_pid/environment
+ nick="${chat_nick-$NOISE_pid}"
+ echo /send_to_channel "${1-#23}" "$nick" joined the channel >$NOISE_linefeed
+ echo /set default_command chat >$NOISE_linefeed
+ echo /set chat_channel "${1-#23}" >$NOISE_linefeed
+ echo " joined channel ${1-#23}"
+ echo /part to go back to espeak ;;
+
+
+esac
diff --git a/noise/modules/lang b/noise/modules/lang
new file mode 100755
index 00000000..07b6802e
--- /dev/null
+++ b/noise/modules/lang
@@ -0,0 +1,22 @@
+#! /bin/sh
+
+case "$1" in
+ (--help)
+ echo "set language or list available languages" ;;
+ (list)
+ espeak --voices | sed -n '1!p' | awk '{\
+ printf"/lang %s set lang to %s\n",$2,$4
+ }' ;;
+ ('')
+ echo /set lang >$NOISE_linefeed ;;
+ (*)
+ if test -z "$2" ; then
+ echo /set lang "$1"
+ else
+ echo /set lang "$1"
+ shift
+ echo "$*"
+ echo /set lang "${noise_lang-de}"
+ fi >$NOISE_linefeed
+esac
+
diff --git a/noise/modules/mpc b/noise/modules/mpc
new file mode 100755
index 00000000..0ab72058
--- /dev/null
+++ b/noise/modules/mpc
@@ -0,0 +1,14 @@
+#! /bin/sh
+
+case "$1" in
+ (--help)
+ case "$2" in
+ (--verbose) mpc --help ;;
+ (*) echo access mpd
+ esac ;;
+ (*)
+ ##echo test-module called with following arguments: "$@"
+ ## send command for re-evaluation:
+ ##echo /espeak test >$NOISE_linefeed
+ MPD_HOST=mpd.shack mpc $@
+esac
diff --git a/noise/modules/names b/noise/modules/names
new file mode 100755
index 00000000..f5922064
--- /dev/null
+++ b/noise/modules/names
@@ -0,0 +1,22 @@
+#! /bin/sh
+
+case "$1" in
+ (--help) echo send text to everyone with @@ prepended ;;
+ (*)
+ cd /tmp/noise
+ . $NOISE_pid/environment
+ if test "$default_command" != chat ; then exit ; fi
+ nick="${chat_nick-$NOISE_pid}"
+ channel="${1-$chat_channel}"
+ echo "Users in channel $channel"
+ for client in * ; do
+ . $client/environment
+ chat_nick="${chat_nick-$client}"
+ if test "$channel" = "$chat_channel" && test "$default_command" = chat ; then
+ echo "$chat_nick"
+ fi
+ unset chat_nick
+ unset chat_channel
+ unset default_command
+ done
+esac
diff --git a/noise/modules/nick b/noise/modules/nick
new file mode 100755
index 00000000..5ed1e9d9
--- /dev/null
+++ b/noise/modules/nick
@@ -0,0 +1,10 @@
+#! /bin/sh
+
+case "$1" in
+ (--help) echo send text to everyone with @@ prepended ;;
+ (*)
+ . /tmp/noise/$NOISE_pid/environment
+ nick="${chat_nick-$NOISE_pid}"
+ echo /send_to_channel $chat_channel $nick is now known as $1 > $NOISE_linefeed
+ echo /set chat_nick $1 >$NOISE_linefeed;;
+esac
diff --git a/noise/modules/part b/noise/modules/part
new file mode 100755
index 00000000..d35ac501
--- /dev/null
+++ b/noise/modules/part
@@ -0,0 +1,15 @@
+#! /bin/sh
+
+case "$1" in
+ (--help) echo leave chat mode ;;
+ (*)
+ . /tmp/noise/$NOISE_pid/environment
+ nick="${chat_nick-$NOISE_pid}"
+
+ echo "/send_to_channel $chat_channel $nick has quit ${*-no reason}" > $NOISE_linefeed
+
+ echo /set default_command espeak >$NOISE_linefeed
+ echo "disabled chat mode (set back to espeak)" ;;
+
+
+esac
diff --git a/noise/modules/ping b/noise/modules/ping
new file mode 100755
index 00000000..acf2529f
--- /dev/null
+++ b/noise/modules/ping
@@ -0,0 +1,24 @@
+#! /bin/sh
+cd /tmp/noise
+case "$1" in
+ (--help) : ;;
+ ('')
+ . $NOISE_pid/environment
+ ping_timestamp=${ping_timestamp-0}
+ ping_challenger=${ping_challenger-0}
+ if test $ping_challenger != 0 ; then
+ echo There is already a ping challange running
+ else
+ timestamp=`date +%s%N`
+ for client in * ; do
+ echo /ping $NOISE_pid $timestamp >$client/linefeed &
+ done
+ fi
+ ;;
+ (*)
+ echo "/set -q ping_timestamp $2" >$NOISE_pid/linefeed
+ if test $NOISE_pid != $1 ; then
+ echo "/set -q ping_challenger $1" >$NOISE_pid/linefeed
+ echo "PING?"
+ fi
+esac
diff --git a/noise/modules/play b/noise/modules/play
new file mode 100755
index 00000000..749b450a
--- /dev/null
+++ b/noise/modules/play
@@ -0,0 +1,36 @@
+#! /bin/sh
+case "$1" in
+ (--help)
+ echo "play an audio file" ;;
+ (*)
+ exec 2>&1
+ ffs='wav mp3 ogg asf flac'
+
+ if test -z "$*" ; then
+ ls $HOME/noise/samples | sed -r '
+ s:\.('"`echo "$ffs" | tr \ \|`"')$: \1:
+ s:^:/play :
+ s:.*:&:
+ '
+ else
+ for i in $ffs ; do
+ f=$HOME/noise/samples/$1.$i
+ test -f "$f" &&
+ case "$i" in
+ wav) aplay "$f" & ;;
+ *) mplayer "$f" & ;;
+ esac && break
+ done || cat<<EOF
+\
+Keine Audiodatei mit dem Namen
+
+ $1.EXT
+
+gefunden... am besten gleich uploaden:
+
+ scp NAME shack@shack.shack:noise/samples/
+
+folgende Dateiendungen werden erkannt: $ffs
+EOF
+ fi
+esac
diff --git a/noise/modules/pong b/noise/modules/pong
new file mode 100755
index 00000000..eb2df46d
--- /dev/null
+++ b/noise/modules/pong
@@ -0,0 +1,26 @@
+#! /bin/sh
+cd /tmp/noise
+case "$1" in
+ (--help) : ;;
+ ('')
+ . $NOISE_pid/environment
+ ping_timestamp=${ping_timestamp-0}
+ ping_challenger=${ping_challenger-0}
+ if test $ping_challenger = 0 ; then
+ echo There is no ping challange running
+ else
+ timestamp=`date +%s%N`
+ echo /pong $NOISE_pid $timestamp >$ping_challenger/linefeed
+ ## reset ping TODO /unset
+ echo /set -q ping_timestamp 0 >$NOISE_pid/linefeed
+ echo /set -q ping_challenger 0 >$NOISE_pid/linefeed
+ fi
+ ;;
+ (*)
+ . $1/environment
+ # XXX is attendee the right counterpart to 'challenger'?
+ attendee_nick=$chat_nick
+ . $NOISE_pid/environment
+ time=`echo "scale=3; ($2 - $ping_timestamp)/10^9" | bc`
+ echo "PONG! $attendee_nick ${time}s"
+esac
diff --git a/noise/modules/query b/noise/modules/query
new file mode 100755
index 00000000..ceeff8a5
--- /dev/null
+++ b/noise/modules/query
@@ -0,0 +1,23 @@
+#! /bin/sh
+
+case "$1" in
+ (--help) echo send a message to a specific user ;;
+ (*)
+ cd /tmp/noise
+ . $NOISE_pid/environment
+ nick="${chat_nick-$NOISE_pid}"
+ target="$1"
+ shift
+ for client in * ; do
+ . $client/environment
+ if test "$target" = "${chat_nick-$client}" ; then
+ echo "/echo <-- $nick: $*" > $client/linefeed
+ echo "--> $target: $*"
+ exit
+ fi
+ unset chat_channel
+
+ done
+
+ echo "$nick not found"
+esac
diff --git a/noise/modules/send_to_channel b/noise/modules/send_to_channel
new file mode 100755
index 00000000..4a0470af
--- /dev/null
+++ b/noise/modules/send_to_channel
@@ -0,0 +1,17 @@
+#! /bin/sh
+
+case "$1" in
+ (--help) : ;;
+ (*)
+ cd /tmp/noise
+ channel="$1"
+ shift
+ for client in * ; do
+ . $client/environment
+ if test "$channel" = "$chat_channel" && test "$default_command" = chat ; then
+ echo "/echo $*" > $client/linefeed
+ fi
+ unset chat_channel
+
+ done
+esac
diff --git a/noise/modules/sendmail b/noise/modules/sendmail
new file mode 100755
index 00000000..182d96e3
--- /dev/null
+++ b/noise/modules/sendmail
@@ -0,0 +1,55 @@
+#!/usr/bin/python
+import os,sys,smtplib,string
+'''
+ Mail Plugin for the noise telnet suite
+ See: http://docs.python.org/library/smtplib.html
+ Author: Felix
+'''
+
+# help
+if len(sys.argv) == 2:
+ if sys.argv[1] == "--help":
+ print "send an e-mail ( \"TO(s)\" \"SUBJECT\" [string instead of EOF])"
+ sys.exit(0)
+
+# sanity
+if len(sys.argv) <= 2:
+ print "wrong number of parameters, see help"
+ sys.exit(1)
+
+# write variables
+# check of EOF
+if len(sys.argv) == 4 :
+ EOFstring="%s\n"% sys.argv[3]
+else:
+ EOFstring="EOF\n"
+
+fromaddr=u"Karl Koch<shockspasm@googlemail.com>"
+toaddrs=sys.argv[1]
+subject=sys.argv[2]
+
+
+#write header:
+msg = u"From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n" % (fromaddr, toaddrs,subject)
+print "Write your text now, finish with %s" % EOFstring
+sys.stdout.flush() # flushing is important to make sure the line is written
+
+while 1:
+ try:
+ line = sys.stdin.readline()
+ if line == EOFstring:
+ break
+ msg = msg + line
+ except EOFError:
+ break
+
+msg = msg + "[!] Written with NOISE telnet"
+
+print "Thank you for your message! Delivering it now..."
+sys.stdout.flush()
+server = smtplib.SMTP('localhost')
+#server.set_debuglevel(1)
+server.sendmail(fromaddr,toaddrs.split(','),msg)
+server.quit()
+print "mail send successfully"
+sys.exit(0)
diff --git a/noise/modules/shackstatus b/noise/modules/shackstatus
new file mode 100755
index 00000000..a5058f0a
--- /dev/null
+++ b/noise/modules/shackstatus
@@ -0,0 +1,104 @@
+#! /bin/bash
+
+main() {
+ case "$1" in
+ (--help)
+ echo "report status of all shack services."
+ ;;
+ (*)
+ test "$(dig +short localhost @10.42.0.10 )" = "127.0.0.1" &&
+ STAT_DNS_I="läuft" || STAT_DNS_I="antwortet nicht"
+ test "$(dig +short shackspace.de @10.42.0.10 )" = "141.31.176.214" &&
+ STAT_DNS_E="läuft" || STAT_DNS_E="antwortet nicht"
+ test "$(dig +short shackspace.de @141.31.176.214 )" = "141.31.176.214" &&
+ STAT_DNS_X="läuft"|| STAT_DNS_X="antwortet nicht"
+
+ STAT_LINE=$(ping -c 5 -i 0.2 -q 141.31.176.214 |
+ awk '/packet loss/ { print 100-$6}' )
+
+ cat <<-EOF >$NOISE_linefeed
+ /set pitch 10
+ /espeak -v Hallo - Ich bin Krebs.
+ /espeak -v Heute ist `wochentag`, der `tag` --- `monat` -- `date +%Y`
+ /zeit
+ /espeak -v tcheck der systeme:
+ /espeak -v Energie versorgung -- aktiv
+ /espeak -v shackhost -- läuft
+ /espeak -v telnet -- läuft
+ /espeak -v interner - D N S -- interne - do-mejn -- $STAT_DNS_I
+ /espeak -v interner - D N S -- externe - do-mejn -- $STAT_DNS_E
+ /espeak -v externer - D N S - $STAT_DNS_X
+ /espeak -v Leitungsqualität - $STAT_LINE prozent.
+ /temp
+ /espeak -v krebs kompjuting bereit
+ EOF
+ ;;
+ esac 2>&1
+}
+
+wochentag() {
+ case $(date +%a) in
+ (Mon) echo Montag ;;
+ (Tue) echo Dienstag ;;
+ (Wed) echo Mittwoch ;;
+ (Thu) echo Donnerstag ;;
+ (Fri) echo Freitag ;;
+ (Sat) echo Samstag ;;
+ (Sun) echo Sonntag ;;
+ esac
+}
+
+tag() {
+ case $(date +%d) in
+ (1) echo erste ;;
+ (2) echo zweite ;;
+ (3) echo dritte ;;
+ (4) echo vierte ;;
+ (5) echo fünfte ;;
+ (6) echo sechste ;;
+ (7) echo siebte ;;
+ (8) echo achte ;;
+ (9) echo neunte ;;
+ (10) echo zehnte ;;
+ (11) echo elfte ;;
+ (12) echo zwölfte ;;
+ (13) echo dreizehnte ;;
+ (14) echo vierzehnte ;;
+ (15) echo fünfzehnte ;;
+ (16) echo sechzehnte ;;
+ (17) echo siebzehnte ;;
+ (18) echo achtzehnte ;;
+ (19) echo neunzehnte ;;
+ (20) echo zwanzigste ;;
+ (21) echo einundzwanzigste ;;
+ (22) echo zweiundzwanzigste ;;
+ (23) echo dreiundzwanzigste ;;
+ (24) echo vierundzwanzigste ;;
+ (25) echo füfundzwanzigste ;;
+ (26) echo sechsundzwanzigste ;;
+ (27) echo siebenundzwanzigste ;;
+ (28) echo achtundzwanzigste ;;
+ (29) echo neunundzwanzigste ;;
+ (30) echo dreissigste ;;
+ (31) echo einunddreissigste ;;
+ esac
+}
+
+monat() {
+ case $(date +%b) in
+ (Jan) echo Januar ;;
+ (Feb) echo Februar ;;
+ (Mar) echo März ;;
+ (Apr) echo April ;;
+ (May) echo Mai ;;
+ (Jun) echo Juni ;;
+ (Jul) echo Juli ;;
+ (Aug) echo August ;;
+ (Sep) echo September ;;
+ (Oct) echo Oktober ;;
+ (Nov) echo November ;;
+ (Dec) echo Dezember ;;
+ esac
+}
+
+main "$@"
diff --git a/noise/modules/sleep b/noise/modules/sleep
new file mode 100755
index 00000000..89712cac
--- /dev/null
+++ b/noise/modules/sleep
@@ -0,0 +1,10 @@
+#! /bin/sh
+case "$1" in
+ (--help) echo "pause for NUMBER seconds" ;;
+ (*)
+ if echo "$1" | grep -Eq '^([0-9]+(\.[0-9]*)?|[0-9]*\.[0-9]+)$' ; then
+ sleep "$1"
+ else
+ echo 'FAIL: $1 is not a number'
+ fi
+esac
diff --git a/noise/modules/stream b/noise/modules/stream
new file mode 100755
index 00000000..1e6fd0c5
--- /dev/null
+++ b/noise/modules/stream
@@ -0,0 +1,64 @@
+#! /bin/sh
+inputdir=$HOME/noise/streams
+basename="`basename "$0"`"
+case "$1" in
+ (--help)
+ if echo "$0 $*" | grep -q '[[:space:]]--verbose\>'; then
+ echo -e "\x1B[35mtype \x1B[32m/$basename off \x1B[35mto turn stream off\x1B[m"
+ for i in `ls $inputdir` ; do
+ filename="$inputdir/$i"
+ shortcut=`xmlstarlet sel -t -v /station/@shortcut "$inputdir/$i"`
+ title=`xmlstarlet sel -t -v /station/@title "$inputdir/$i"`
+ topic=`xmlstarlet sel -t -v /station/@topic "$inputdir/$i"`
+ stream=`xmlstarlet sel -t -v /station/@stream "$inputdir/$i"`
+ echo -e "\x1B[35mtype \x1B[32m/$basename $shortcut \x1B[35mfor $topic\x1B[m"
+ done
+ else
+ echo "play an audio stream"
+ fi
+ ;;
+ (*)
+ exec 2>&1
+ ffs='xml'
+
+ if test -z "$*" ; then
+ echo -e "\x1B[32m/stream off \x1B[33m- turn stream off\x1B[m"
+ for i in `ls $inputdir` ; do
+ filename="$inputdir/$i"
+ shortcut=`xmlstarlet sel -t -v /station/@shortcut "$inputdir/$i"`
+ title=`xmlstarlet sel -t -v /station/@title "$inputdir/$i"`
+ topic=`xmlstarlet sel -t -v /station/@topic "$inputdir/$i"`
+ stream=`xmlstarlet sel -t -v /station/@stream "$inputdir/$i"`
+ echo -e "\x1B[32m/stream $shortcut \x1B[33m- $title \x1B[35m$topic\x1B[m"
+ done
+ else if [ "$1" = "off" ]; then
+ [ ! -d /tmp/noise ] || ( echo "no directory /tmp/noise; aborting" ; exit 1 )
+ [ -f /tmp/noise/stream.pid ] && ( kill ` cat /tmp/noise/stream.pid ` )
+ [ -e /tmp/noise/stream.pid ] && rm /tmp/noise/stream.pid || ( echo "can't remove /tmp/noise/stream.pid; aborting" ; exit 1 )
+ else
+ for i in `ls $inputdir` ; do
+ filename="$inputdir/$i"
+ shortcut=`xmlstarlet sel -t -v /station/@shortcut "$inputdir/$i"`
+ stream=`xmlstarlet sel -t -v /station/@stream "$inputdir/$i"`
+ if [ "$shortcut" == "$1" ]; then
+ [ ! -d /tmp/noise ] || ( umask 077 ; mkdir /tmp/noise ) || ( echo "can't create /tmp/noise; aborting" ; exit 1 )
+ [ -f /tmp/noise/stream.pid ] && ( kill ` cat /tmp/noise/stream.pid ` )
+ [ -e /tmp/noise/stream.pid ] && rm /tmp/noise/stream.pid || ( echo "can't remove /tmp/noise/stream.pid; aborting" ; exit 1 )
+ mplayer -cache 2048 -quiet "$stream" &
+ ( umask 077 ; echo $! > /tmp/noise/stream.pid )
+ break
+ fi
+ done || cat<<EOF
+\
+Keine Audiostreambeschreibung mit dem Namen
+
+ $1.EXT
+
+gefunden... am besten gleich anlegen:
+
+ ssh shack@shack.shack:noise/streams/
+
+folgende Dateiendungen werden erkannt: $ffs
+EOF
+ fi fi
+esac
diff --git a/noise/modules/temp b/noise/modules/temp
new file mode 100755
index 00000000..2f1dfcef
--- /dev/null
+++ b/noise/modules/temp
@@ -0,0 +1,56 @@
+#! /bin/bash
+
+main() {
+ case "$1" in
+ (--help)
+ echo "report temperature in K, °C, °R, or °F."
+ ;;
+ (-C|--celsius)
+ espeak_inside `inside_temp 'x - 273.15'` Grad Zelsius
+ espeak_outside `outside_temp 'x - 273.15'` Grad Zelsius
+ ;;
+ (-F|--fahrenheit)
+ espeak_inside `inside_temp 'x * 9/5 - 459.67'` Grad Fahrenheit
+ espeak_outside `outside_temp 'x * 9/5 - 459.67'` Grad Fahrenheit
+ ;;
+ (-R|--rankine)
+ espeak_inside `inside_temp 'x * 9/5'` Grad Renkin
+ espeak_outside `outside_temp 'x * 9/5'` Grad Renkin
+ ;;
+ (-K|--kelvin|*)
+ espeak_inside `inside_temp` Kelvin
+ espeak_outside `outside_temp` Kelvin
+ ;;
+ esac
+}
+
+## temp [<formula with temperature as x>]
+## Echo temperature in K. If formula is given then return that result instead.
+inside_temp() {
+ echo "scale=2; x=`/krebs/temper/temper` + 273.15; ${1-x}" | bc
+}
+
+outside_temp() {
+ echo "scale=2; x=`dig +short txt outside.elwood.temp.citecs.de |
+ sed 's/^"DEG \([0-9]\+\.[0-9]\+\)"$/\1/'
+ ` + 273.15; ${1-x}" | bc
+}
+
+espeak_inside() {
+ echo Die Krebs-tempera-tur beträgt $@ | to_espeak
+}
+
+espeak_outside() {
+ echo Die Außen-tempera-tur beträgt $@ | to_espeak
+}
+
+to_espeak() {
+ sed '
+ s/\(\.[0-9]\)0\+/\1/g
+ s/\(\.[0-9]\)\([0-9]\)[0-9]*/ \1 \2 /;
+ s/^-/minus /;
+ s/\./ komma /;
+ ' | tee $NOISE_linefeed
+}
+
+main "$@"
diff --git a/noise/modules/test b/noise/modules/test
new file mode 100755
index 00000000..2c0b8e0d
--- /dev/null
+++ b/noise/modules/test
@@ -0,0 +1,13 @@
+#! /bin/sh
+
+case "$1" in
+ (--help) echo do some test-module related stuff ;;
+ (*)
+
+ echo -n ">> "
+ read TEST
+ if [ $TEST == 'q' ]; then exit; fi
+ echo /wall @@ $TEST >$NOISE_linefeed
+ #sleep 1
+ #sleep 1; echo /test >$NOISE_linefeed &
+esac
diff --git a/noise/modules/twitter b/noise/modules/twitter
new file mode 100755
index 00000000..26982525
--- /dev/null
+++ b/noise/modules/twitter
@@ -0,0 +1,125 @@
+#!/usr/bin/python
+#encode=utf8
+
+#print "TODO Bug Robert to implement Twitter-OAuth!"
+#exit(1)
+import sys
+
+#sys.path.append("/usr/local/lib/")
+
+import twitter, os, pwd
+
+#os.getlogin = lambda: pwd.getpwuid(os.getuid())[0]
+
+sys.stderr = sys.stdout
+
+def shorten(text):
+
+ text = text.replace("about ", "~")
+ text = text.replace("an", "1")
+ text = text.replace(" minutes", "m")
+ text = text.replace(" minute", "m")
+ text = text.replace(" hours", "h")
+ text = text.replace(" hour", "h")
+ text = text.replace(" seconds", "s")
+ text = text.replace(" second", "s")
+ text = text.replace(" days", "d")
+ text = text.replace(" day", "d")
+ text = text.replace(" weeks", "w")
+ text = text.replace(" week", "w")
+ text = text.replace(" years", "y")
+ text = text.replace(" year", "y")
+ text = text.replace(" ago", "")
+ text = text.replace("a", "1")
+ return text
+
+
+def parse(text):
+ text = text.replace("\n","")
+ t = text.split(" ")
+ new = ""
+ for piece in t:
+ escape = ""
+ if piece.startswith("@"):
+ escape = ""
+ if piece[1:].lower() == "shackspam" or piece[1:].lower() == "shackspace":
+ escape = ""
+
+ elif piece.startswith("#"):
+ escape = ""
+ elif piece.startswith("http://"):
+ escape = ""
+ if escape:
+ new += escape + piece + " "
+ else:
+ new += piece + " "
+
+ return new
+
+if len(sys.argv) > 1 and sys.argv[1] == "--help":
+ print "read or post to the shackspam twitter timeline"
+ if len(sys.argv) == 3 and sys.argv[2] == "--verbose":
+ print "call without parameters to read"
+ print "use /twitter [your tweet] to tweet something to the shackspam twitter timeline"
+ exit()
+
+
+
+api = twitter.Api("Z7f9npE5ixvZ0lMCHDZBOg", "8z0gyfOABar1HxKvqL6fYXLqRFUPLQ9OOzDFt7Q4F4", "139766258-94TGPvNsJ8tYVv68eZewfXOIyDvRCWdycNlUgHrs", "NRnDQZPCoLrDizFvakZkSWgoG4vgGuT3OOMChSfiI")
+
+#api.SetXTwitterHeaders("Shackspace UTTERANCE","","0.00.0.01.42")
+
+if len(sys.argv) > 1:
+
+
+ tweet = u""
+
+ for t in sys.argv[1:]:
+ tweet += t.decode("utf8") + u" "
+ tweet = tweet[:-1]
+
+ print u"Length: " + str(len(tweet)) + u""
+
+ if len(tweet) > 140:
+ print u"Your Tweet must be shorter than 140 characters.\n"
+ exit()
+
+ status = api.PostUpdate(tweet)
+
+
+
+
+else:
+ """print "\tshackspace tweets:"
+ for i in api.GetUserTimeline():
+ i.text = parse(i.text)
+ print ("" + i.user.screen_name + " " + i.GetRelativeCreatedAt() + " " + i.text).encode("utf8").replace("\n"," ")
+
+ print "\n\tfriends tweets"
+ """
+ a = api.GetFriendsTimeline()
+ a.reverse()
+ for i in a:
+ text = i.text
+ ilen = len(i.user.screen_name) + len(shorten(i.GetRelativeCreatedAt())) + 2
+ if i.user.screen_name.lower() == "shackspace" or i.user.screen_name.lower() == "shackspam":
+ info = "" + i.user.screen_name + " " + shorten(i.GetRelativeCreatedAt()) + ""
+ else:
+ info = "" + i.user.screen_name + " " + shorten(i.GetRelativeCreatedAt()) + ""
+ text = info + " " + parse(text)
+
+ t = text.split(" ")
+ tmp = ""
+ for n in t:
+ if ((len(tmp) + len(