Compare commits
20 Commits
9b75138b47
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
af4c0c5040 | ||
|
|
5fc4633a80 | ||
|
|
f4c5a2a432 | ||
|
|
477d1245f6 | ||
|
|
b5cc10a0cc | ||
|
|
6a0ee2ac53 | ||
|
|
42106d11a6 | ||
|
|
73223ca737 | ||
| fe41bdc363 | |||
|
|
c1731d0c5d | ||
|
|
c7a3c4a7c0 | ||
|
|
e2a8362097 | ||
|
|
8d57f4e857 | ||
|
|
1f28b4f79e | ||
|
|
70f75f82b5 | ||
|
|
b050adbc02 | ||
|
|
321dc3654b | ||
|
|
3ea8a8817b | ||
|
|
8ad5751715 | ||
|
|
57872194e5 |
164
start.sh
164
start.sh
@@ -1,12 +1,8 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
trap cleanup 1 2 3 6 9 11
|
|
||||||
cleanup() { kill $PID; }
|
|
||||||
|
|
||||||
|
|
||||||
BOTNICK="uugbot"
|
BOTNICK="uugbot"
|
||||||
SERVER="irc.uugrn.org"
|
SERVER="irc.uugrn.org"
|
||||||
PORT="6660"
|
PORT="6670"
|
||||||
CHANNEL="#uugrn"
|
CHANNEL="#uugrn"
|
||||||
|
|
||||||
BOTDIR="$PWD"
|
BOTDIR="$PWD"
|
||||||
@@ -14,17 +10,16 @@ BOTDIR="$PWD"
|
|||||||
IRCIN="$BOTDIR/irc/$SERVER/$CHANNEL/in"
|
IRCIN="$BOTDIR/irc/$SERVER/$CHANNEL/in"
|
||||||
IRCOUT="$BOTDIR/irc/$SERVER/$CHANNEL/out"
|
IRCOUT="$BOTDIR/irc/$SERVER/$CHANNEL/out"
|
||||||
|
|
||||||
|
###
|
||||||
|
### FUNCTIONS ###
|
||||||
|
###
|
||||||
|
|
||||||
# $1 message
|
# $1 message
|
||||||
say() {
|
say() {
|
||||||
echo "out> $1"
|
echo "out> $1"
|
||||||
echo "$1" > $IRCIN
|
echo "$1" > $IRCIN
|
||||||
sleep 1
|
sleep 1
|
||||||
}
|
}
|
||||||
# $1 message
|
|
||||||
reply() {
|
|
||||||
echo "out> $1: $2"
|
|
||||||
echo "$NICK: $2" > $IRCIN
|
|
||||||
}
|
|
||||||
|
|
||||||
settopic() {
|
settopic() {
|
||||||
curl -s "https://vorstand.uugrn.org/Kalender/Termine.rem" \
|
curl -s "https://vorstand.uugrn.org/Kalender/Termine.rem" \
|
||||||
@@ -46,7 +41,7 @@ settopic() {
|
|||||||
| cut -d"|" -f1 \
|
| cut -d"|" -f1 \
|
||||||
| sed 's/ $//g')
|
| sed 's/ $//g')
|
||||||
|
|
||||||
say "/topic $CHANNEL :Willkommen bei der UUGRN | Nächstes event: $text am $date um $time Uhr."
|
say "/topic $CHANNEL :Willkommen bei der UUGRN | Nächste Veranstaltung: $text am $date um $time Uhr."
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -77,7 +72,7 @@ kalender() {
|
|||||||
| cut -d" " -f 3- \
|
| cut -d" " -f 3- \
|
||||||
| cut -d"|" -f 2-)
|
| cut -d"|" -f 2-)
|
||||||
|
|
||||||
if echo "$line" | fgrep ' |'
|
if echo "$line" | fgrep -q ' |'
|
||||||
then
|
then
|
||||||
say "Am $date um $time Uhr findet \"$text\" im \"$loc\" statt."
|
say "Am $date um $time Uhr findet \"$text\" im \"$loc\" statt."
|
||||||
else
|
else
|
||||||
@@ -89,7 +84,6 @@ kalender() {
|
|||||||
# $1 nick
|
# $1 nick
|
||||||
# $2 -1 decrease, +1 increase
|
# $2 -1 decrease, +1 increase
|
||||||
savekarma() {
|
savekarma() {
|
||||||
mkdir -p $BOTDIR/karma
|
|
||||||
[ ! -f "$BOTDIR/karma/$1" ] \
|
[ ! -f "$BOTDIR/karma/$1" ] \
|
||||||
&& echo 0 > "$BOTDIR/karma/$1"
|
&& echo 0 > "$BOTDIR/karma/$1"
|
||||||
|
|
||||||
@@ -101,28 +95,20 @@ savekarma() {
|
|||||||
|
|
||||||
# $1 nick
|
# $1 nick
|
||||||
reportkarma() {
|
reportkarma() {
|
||||||
if [ -z "$1" ]
|
n=$1
|
||||||
then
|
[ -z "$n" ] \
|
||||||
n=$NICK
|
&& n=$NICK
|
||||||
else
|
|
||||||
n=$1
|
|
||||||
fi
|
|
||||||
if [ ! -f "$BOTDIR/karma/$n" ]
|
if [ ! -f "$BOTDIR/karma/$n" ]
|
||||||
then
|
then
|
||||||
if [ "$n" == "$NICK" ]
|
[ "$n" == "$NICK" ] \
|
||||||
then
|
&& say "Du hast bisher leider noch keine Gummipunkte gesammelt, $n." \
|
||||||
say "Du hast bisher leider noch keine Gummipunkte gesammelt, $n."
|
|| say "$n hat leider noch keine Gummipunkte gesammelt."
|
||||||
else
|
|
||||||
say "$n hat leider noch keine Gummipunkte gesammelt."
|
|
||||||
fi
|
|
||||||
else
|
else
|
||||||
cur=$(cat "$BOTDIR/karma/$n")
|
cur=$(cat "$BOTDIR/karma/$n")
|
||||||
if [ "$n" == "$NICK" ]
|
[ "$n" == "$NICK" ] \
|
||||||
then
|
&& say "Du hast momentan $cur Gummipunkt(e), $n." \
|
||||||
say "Du hast momentan $cur Gummipunkt(e), $n."
|
|| say "$n hat momentan $cur Gummipunkt(e)."
|
||||||
else
|
|
||||||
say "$n hat momentan $cur Gummipunkt(e)."
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -131,24 +117,20 @@ karma() {
|
|||||||
n="$(echo "$1" | tr -d "+-")"
|
n="$(echo "$1" | tr -d "+-")"
|
||||||
[ -z "$n" ] && return
|
[ -z "$n" ] && return
|
||||||
|
|
||||||
if [ "$n" == "$(echo "$NICK" | tr '[:upper:]' '[:lower:]' )" ]
|
[ "$n" == "$(echo "$NICK" | tr '[:upper:]' '[:lower:]' )" ] \
|
||||||
then
|
&& say "So aber nicht mein lieber $NICK!" && return
|
||||||
say "So aber nicht mein lieber $NICK!"
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "$1" | fgrep "++" \
|
echo "$1" | fgrep -q -- "++" \
|
||||||
&& savekarma $n "+1"
|
&& savekarma $n "+1"
|
||||||
echo "$1" | fgrep -- "--" \
|
echo "$1" | fgrep -q -- "--" \
|
||||||
&& savekarma $n "-1"
|
&& savekarma $n "-1"
|
||||||
echo "$1" | fgrep "+-" \
|
echo "$1" | fgrep -q -- "+-" \
|
||||||
&& say "Echt jetzt, $NICK?"
|
&& say "Echt jetzt, $NICK?"
|
||||||
echo "$1" | fgrep -- "-+" \
|
echo "$1" | fgrep -q -- "-+" \
|
||||||
&& say "Echt jetzt, $NICK?"
|
&& say "Echt jetzt, $NICK?"
|
||||||
}
|
}
|
||||||
transparenzbericht() {
|
transparenzbericht() {
|
||||||
mkdir -p "$BOTDIR/karma"
|
cd $BOTDIR/karma
|
||||||
cd $BOTDIR/karma || return
|
|
||||||
say "Gummipunkte Transparenzbericht:"
|
say "Gummipunkte Transparenzbericht:"
|
||||||
for i in $(ls)
|
for i in $(ls)
|
||||||
do
|
do
|
||||||
@@ -160,7 +142,16 @@ seen() {
|
|||||||
[ -z "$1" ] && return
|
[ -z "$1" ] && return
|
||||||
if [ -f "$BOTDIR/seen/$1" ]
|
if [ -f "$BOTDIR/seen/$1" ]
|
||||||
then
|
then
|
||||||
say "$(cat "$BOTDIR/seen/$1")"
|
_l="$(cat "$BOTDIR/seen/$1")"
|
||||||
|
_ts="$(echo "$_l" | cut -d" " -f1)"
|
||||||
|
_msg="$(echo "$_l" | cut -d" " -f2-)"
|
||||||
|
_dt="$(date -r "$_ts" +"%Y-%m-%d %H:%M")"
|
||||||
|
if [ -z $_dt ]
|
||||||
|
then
|
||||||
|
say "$_l"
|
||||||
|
else
|
||||||
|
say "$_dt: $_msg"
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
say "Hmm, ich habe keine Ahnung wann $1 zum letzten mal online war."
|
say "Hmm, ich habe keine Ahnung wann $1 zum letzten mal online war."
|
||||||
fi
|
fi
|
||||||
@@ -181,60 +172,106 @@ usage() {
|
|||||||
|
|
||||||
# $1 loc
|
# $1 loc
|
||||||
weather() {
|
weather() {
|
||||||
if [ -z "$1" ]
|
param=$1
|
||||||
then
|
|
||||||
l=heidelberg
|
[ -z $param ] \
|
||||||
else
|
&& param=Heidelberg,DE
|
||||||
l=$1
|
|
||||||
fi
|
echo "$param" | fgrep -q "," \
|
||||||
say "$(curl -s "https://wttr.in/$l?lang=de&format=%l:+%t+%C+%w+%h+Regen")"
|
|| param="$param,DE"
|
||||||
|
|
||||||
|
|
||||||
|
DATA=$(curl -s "https://api.openweathermap.org/data/2.5/weather?q=$param&lang=de&units=metric&appid=a4c6e6d6beba2ff733ed81b7e2cac530")
|
||||||
|
#DATA=$(cat test.json)
|
||||||
|
|
||||||
|
RESPONSE=$(echo "$DATA" \
|
||||||
|
| jq -rc '.name,[.main.temp, .weather[].description][], .main.humidity, .wind.speed' 2> /dev/null \
|
||||||
|
| awk ' \
|
||||||
|
NR == 1 { printf("Wetter in %s: ", $0) } \
|
||||||
|
NR == 2 { printf("%.0d°C, ", $0) } \
|
||||||
|
NR == 3 { printf("%s", $0) } \
|
||||||
|
NR == 4 { printf(" (%d%%), ", $0) } \
|
||||||
|
NR == 5 { printf("Wind: %.0dkm/h", $0) } \
|
||||||
|
')
|
||||||
|
|
||||||
|
case "$RESPONSE" in
|
||||||
|
*null:*) RESPONSE="$param konnte nicht gefunden werden. Usage: !wetter <stadt>[,<länderkürzel>]"
|
||||||
|
esac
|
||||||
|
|
||||||
|
say "$RESPONSE"
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
###
|
||||||
|
### MAIN PROGRAM ###
|
||||||
|
###
|
||||||
|
|
||||||
mkdir -p "$BOTDIR/irc"
|
mkdir -p "$BOTDIR/irc"
|
||||||
mkdir -p "$BOTDIR/seen"
|
mkdir -p "$BOTDIR/seen"
|
||||||
mkdir -p "$BOTDIR/karma"
|
mkdir -p "$BOTDIR/karma"
|
||||||
cd "$BOTDIR"
|
cd "$BOTDIR"
|
||||||
|
|
||||||
|
# Connect ii and join channel. Afterwards $IRCIN and $IRCOUT are
|
||||||
|
# available
|
||||||
|
|
||||||
echo "connecting."
|
echo "connecting."
|
||||||
ii -i $BOTDIR/irc -s $SERVER -p $PORT -n $BOTNICK &
|
ii -i $BOTDIR/irc -s $SERVER -t -p $PORT -n $BOTNICK &
|
||||||
PID=$!
|
PID=$!
|
||||||
sleep 1
|
|
||||||
|
# wait until the background process is ready
|
||||||
|
sleep 6
|
||||||
echo "/join $CHANNEL" > $BOTDIR/irc/$SERVER/in
|
echo "/join $CHANNEL" > $BOTDIR/irc/$SERVER/in
|
||||||
sleep 1
|
sleep 1
|
||||||
|
|
||||||
echo "ready."
|
echo "ready."
|
||||||
|
|
||||||
|
# Listen on $IRCOUT, parse input and call functions once something
|
||||||
|
# of interest gets posted.
|
||||||
tail -n 0 -f "$IRCOUT" \
|
tail -n 0 -f "$IRCOUT" \
|
||||||
| while read -r line
|
| while read -r line
|
||||||
do
|
do
|
||||||
NICK=$(echo "$line" \
|
NICK=$(echo "$line" \
|
||||||
| sed -n 's/^....-..-.. ..:.. <\([^>]*\).*/\1/p')
|
| sed -n 's/^....-..-.. ..:.. <\([^>]*\).*/\1/p')
|
||||||
|
|
||||||
if [ "$NICK" == "$BOTNICK" ]
|
if [ -z "$NICK" ]
|
||||||
then
|
then
|
||||||
# prevent loops
|
|
||||||
continue
|
# the newer ii is using unix timestamps
|
||||||
|
NICK=$(echo "$line" \
|
||||||
|
| sed -n 's/^[0-9]* <\([^>]*\).*/\1/p')
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# prevent loops; so the bot can't trigger itself.
|
||||||
|
[ "$NICK" == "$BOTNICK" ] \
|
||||||
|
&& continue
|
||||||
|
|
||||||
|
# if we still have no nick here, we better stop to prevent excuting
|
||||||
|
# events from non-users (actions, IRC events etc...)
|
||||||
|
[ -z "$NICK" ] \
|
||||||
|
&& continue
|
||||||
|
|
||||||
COMMAND=$(echo "$line" \
|
COMMAND=$(echo "$line" \
|
||||||
| tr '[:upper:]' '[:lower:]' \
|
| tr '[:upper:]' '[:lower:]' \
|
||||||
| sed -n 's|.*\(![a-z]*\).*|\1|p')
|
| sed -n 's|.*\(![a-z]*\).*|\1|p')
|
||||||
|
|
||||||
|
# intentionally limiting the argument to one and also limit the
|
||||||
|
# character set for safety reasons.
|
||||||
ARG=$(echo "$line" \
|
ARG=$(echo "$line" \
|
||||||
| tr '[:upper:]' '[:lower:]' \
|
| tr '[:upper:]' '[:lower:]' \
|
||||||
| sed -n 's|.*![a-z]* \([a-zA-Z0-9\-_+]*\).*|\1|p')
|
| sed -n 's|.*![a-z]* \([a-zA-Z0-9,\-_+]*\).*|\1|p')
|
||||||
|
|
||||||
|
# We call it gummipunkte now.
|
||||||
KARMA=$(echo "$line" \
|
KARMA=$(echo "$line" \
|
||||||
| tr '[:upper:]' '[:lower:]' \
|
| tr '[:upper:]' '[:lower:]' \
|
||||||
| sed -n 's|.* \([a-zA-Z0-9\-_]*[+-][+-]\).*|\1|p')
|
| sed -n 's|.* \([a-zA-Z0-9\-_]*[+-][+-]\)$|\1|p;s|.* \([a-zA-Z0-9\-_]*[+-][+-]\) .*|\1|p')
|
||||||
|
|
||||||
echo "in> $line"
|
echo "in> $line"
|
||||||
echo "in> NICK=$NICK, COMMAND=$COMMAND, ARG=$ARG, KARMA=$KARMA"
|
echo "in> NICK=$NICK, COMMAND=$COMMAND, ARG=$ARG, KARMA=$KARMA"
|
||||||
|
|
||||||
if [ ! -z "$NICK" ]
|
# we just save the line and replay it on the !seen command
|
||||||
then
|
[ ! -z "$NICK" ] \
|
||||||
echo "$line" > "$BOTDIR/seen/$NICK"
|
&& echo "$line" > "$BOTDIR/seen/$NICK"
|
||||||
fi
|
|
||||||
|
|
||||||
case "$COMMAND" in
|
case "$COMMAND" in
|
||||||
"!kalender") kalender $ARG; ;;
|
"!kalender") kalender $ARG; ;;
|
||||||
@@ -245,9 +282,8 @@ do
|
|||||||
"!settopic") settopic; ;;
|
"!settopic") settopic; ;;
|
||||||
"!seen") seen $ARG; ;;
|
"!seen") seen $ARG; ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
case "$KARMA" in
|
case "$KARMA" in
|
||||||
*[+-][+-]) karma $KARMA; ;;
|
*[+-][+-]) karma $KARMA; ;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
kill $PID
|
|
||||||
|
|||||||
Reference in New Issue
Block a user