annna-say - annna - Annna the nice friendly bot.
HTML git clone git://bitreich.org/annna/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/annna/
DIR Log
DIR Files
DIR Refs
DIR Tags
DIR README
---
annna-say (2095B)
---
1 #!/bin/sh
2 #
3 # annna-say -a $HOME/annna -s irc.bitreich.org -c '#bitreich-en' Hello World!
4 # export ANNNA_BASE=$HOME/annna
5 # annna-say -c 'irc.bitreich.org/#bitreich-en' Hello World!
6 #
7
8 usage() {
9 printf "usage: %s [-h] [-a ANNNA_BASE] [-s IRC_SERVER] -c \"[IRC_SERVER/]channel0 ... [IRC_SERVER/]channel1 ...\" text\n" \
10 "$(basename "$1")" >&2
11 exit 1
12 }
13
14 outfile="in"
15 [ "$(basename "$0")" = "annna-cmd" ] && outfile="out"
16
17 channels="${IRC_CHANNEL}"
18 [ -z "${IRC_SERVER}" ] && export IRC_SERVER="irc.bitreich.org"
19 while getopts "ha:c:s:" opt;
20 do
21 case $opt in
22 a) export ANNNA_IRCBASE="$OPTARG";;
23 c) channels="$OPTARG" ;;
24 s) export IRC_SERVER="$OPTARG";;
25 *) usage $0;;
26 esac
27 done
28 shift $(expr $OPTIND - 1)
29 [ -z "$channels" ] && usage $0
30
31 [ -z "${ANNNA_BASE}" ] && export ANNNA_BASE="/home/annna/annna"
32 [ -z "${ANNNA_IRCBASE}" ] && export ANNNA_IRCBASE="$(cat "$ANNNA_BASE/ircbase")"
33 [ -z "${ANNNA_MODBASE}" ] && export ANNNA_MODBASE="$(cat "$ANNNA_BASE/modbase")"
34 [ -z "${ANNNA_BINBASE}" ] && export ANNNA_BINBASE="$(cat "$ANNNA_BASE/binbase")"
35 export PATH="$PATH:${ANNNA_BINBASE}"
36
37 annna-alive || exit 0
38 annna-sleeps && exit 0
39
40 for c in $channels;
41 do
42 case "${c}" in
43 *"/"*)
44 cserver="$(printf "%s\n" "${c}" | cut -d'/' -f 1)"
45 cname="$(printf "%s\n" "${c}" | cut -d'/' -f 2)"
46 ;;
47 *)
48 cserver="${IRC_SERVER}"
49 cname="${c}"
50 ;;
51 esac
52
53 ircpath="${ANNNA_IRCBASE}/${cserver}/${cname}"
54 if [ -e "$ircpath/in" ];
55 then
56 case "${outfile}" in
57 "in")
58 # Timeout, to solve ii hangs.
59 printf "%s\n" "$@" \
60 | fold -w 250 -s \
61 | timeout 5 cat \
62 > "${ircpath}/${outfile}"
63 ;;
64 "out")
65 export IRC_PASS=
66 export IRC_CMD="PRIVMSG"
67 export IRC_CMD_USER="annna-cmd"
68 export IRC_PRIVMSG_TEXT="$@"
69 export IRC_SERVER="${cserver}"
70 annna-channel-message
71 ;;
72 esac
73 else
74 ircpath="${ANNNA_IRCBASE}/${cserver}"
75 case "${outfile}" in
76 "in")
77 printf "%s\n" "$@" \
78 | fold -w 250 -s \
79 | while read -r line;
80 do
81 printf "/j %s %s\n" "$c" "$line" > "${ircpath}/in"
82 done
83 ;;
84 "out");; # We do not give users commands.
85 esac
86 fi
87 done
88
89 exit 0
90