Introduction
Introduction Statistics Contact Development Disclaimer Help
phlog-index - annna - Annna the nice friendly bot.
git clone git://bitreich.org/annna/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws6…
Log
Files
Refs
Tags
README
---
phlog-index (3520B)
---
1 #!/bin/sh
2
3 export PATH="$PATH:/home/annna/bin"
4
5 doforce=0
6 if [ $# -gt 0 ];
7 then
8 if [ "$1" = "-f" ];
9 then
10 doforce=1
11 fi
12 fi
13
14 base="$HOME/phlogs"
15 cache="$base/cache"
16 gopherbase="/usr/%s/phlog/%s"
17 ircchans="#bitreich-en #bitreich-de #bitreich-fr #bitreich-nl #bitreich-…
18
19 find /home/*/gopher/phlog \
20 -name "*.md" \
21 -printf "%f %T@ %u %p\n" > $cache/lsr.new
22
23 cd $cache
24
25 if [ -e lsr.old ] && [ $doforce -eq 0 ];
26 then
27 diff lsr.new lsr.old > lsr.diff
28 else
29 cp lsr.new lsr.diff
30 fi
31
32 if [ $(stat --printf="%s" lsr.diff) -eq 0 ];
33 then
34 exit 0
35 fi
36
37 # First create the links for all news.
38 cat lsr.new \
39 | sort -r \
40 | while read f;
41 do
42 IFS=' ' read -r fname unixt user fpath <<< $f
43 tstamp="$(sed -n 1p "$fpath" | cut -d' ' -f 2)"
44 [ -z "$tstamp" ] && continue
45 title="$(sed -n 3p "$fpath" | sed 's,\t, ,g; s,|,\\|,g';)"
46 [ -z "$title" ] && continue
47
48 gphpth="$(printf "$gopherbase" "$user" "$fname")"
49 printf "[0|%s – »%s« by %s|%s|server|port]\n" \
50 "$tstamp" "$title" "$user" \
51 "$gphpth"
52 done \
53 > ../agg.gph
54
55 # Create the atom feed. Only the first 64 news items.
56 cat lsr.new \
57 | sort -r \
58 | head -n 64 \
59 | while read f;
60 do
61 IFS=' ' read -r fname unixt user fpath <<< $f
62 tstamp="$(sed -n 1p "$fpath" | cut -d' ' -f 2-)"
63 [ -z "$tstamp" ] && continue
64 title="$(sed -n 3p "$fpath" | sed 's,\t, ,g')"
65 [ -z "$title" ] && continue
66
67 updated="$(date -d "${tstamp}" -u +%FT%T%z)"
68 gphpth="$(printf "$gopherbase" "$user" "$fname")"
69 furi="$(printf "gophers://bitreich.org/0%s" "$gphpth")"
70 printf "\t\t<entry>\n"
71 printf "\t\t<id>%s</id>\n" "$furi"
72 printf "\t\t<title><![CDATA[%s]]></title>\n" "$title"
73 printf "\t\t<link href=\"%s\" />\n" "$furi"
74 printf "\t\t<author><name>%s</name></author>\n" "$user"
75 printf "\t\t<content type=\"text\"><![CDATA["
76 cat $fpath
77 printf "]]></content>\n"
78 printf "\t\t<updated>%s</updated>\n" "$updated"
79 printf "\t\t</entry>\n"
80 done \
81 > ../agg.atom.xml
82
83 # Talk to IRC about the news.
84 if [ $doforce -eq 0 ];
85 then
86 cat lsr.diff \
87 | sort \
88 | while read f;
89 do
90 IFS=' ' read -r dire fname unixt user fpath <<< $f
91 [ -z "$fpath" ] && continue
92 [ -z "$user" ] && continue
93 [ -z "$unixt" ] && continue
94 [ -z "$fname" ] && continue
95 [ -z "$dire" ] && continue
96
97 # If the post disappeared, don't tell IRC.
98 [ "$dire" = ">" ] && continue
99
100 tstamp="$(sed -n 1p "$fpath" | cut -d' ' -f 2)"
101 [ -z "$tstamp" ] && continue
102 title="$(sed -n 3p "$fpath" | sed 's,\t, ,g')"
103 [ -z "$title" ] && continue
104
105 gphpth="$(printf "$gopherbase" "$user" "$fname")"
106
107 for chan in $ircchans;
108 do
109 annna-say -c "$chan" \
110 "$(printf "%s – »%s« by %s gophers:/…
111 "$tstamp" "$title" "$user" "$gph…
112 # Case against channel flood.
113 sleep 1
114 done
115 # Case against news flood.
116 sleep 2
117 done
118 fi
119
120 cp lsr.new lsr.old
121
122 # Now change the gph files in a really easy way.
123 {
124 printf "/ News Aggregator /+2,/ Introduction /-6d\n"
125 printf "/ News Aggregator /+1r !cat /home/annna/phlogs/agg.gph |…
126 printf "w\nq\n"
127 } | ed -s /br/gopher/bitreich.gph
128
129 {
130 printf "/ News Aggregator /+1,\$-3d\n"
131 printf "? News Aggregator ?r !cat /home/annna/phlogs/agg.gph\n"
132 printf "w\nq\n"
133 } | ed -s /br/gopher/news.gph
134
135 # Make the atom news file ready for consumption.
136 {
137 printf "/updated/+1,\$-1d\n"
138 printf "?updated?c\n"
139 printf "\t<updated>%s</updated>\n" "$(date -u +%FT%T%z)"
140 printf ".\n"
141 printf "?updated?r !cat /home/annna/phlogs/agg.atom.xml\n"
142 printf "w\nq\n"
143 } | ed -s /br/gopher/news.atom.xml
144
You are viewing proxied material from bitreich.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.