View difference between Paste ID: hxEmY1ZV and yrNsUBX5
SHOW: | | - or go back to the newest paste.
1
#!/bin/bash
2
3
DATABASE="/home/littlefox/bin/mailbot/developers"
4
LOGFILE="/home/littlefox/bin/mailbot/mailbot.log"
5
6
function lockDatabase
7
{
8
	while true
9
	do
10
		if `mkdir "$DATABASE.lock" > /dev/null 2>&1`
11
		then
12
			if [ -e "$DATABASE.tmp" ]
13
			then
14
				rm "$DATABASE.tmp"
15
				appendLog "Removed orphaned temporary database"
16
			fi
17
18
			touch "$DATABASE.tmp"
19
20
			return
21
		fi
22
23
		sleep 1s
24
	done
25
}
26
27
function unlockDatabase
28
{
29
	rm "$DATABASE"
30
	mv "$DATABASE.tmp" "$DATABASE"
31
32
	chmod 777 "$DATABASE"
33
34
	rmdir "$DATABASE.lock"
35
}
36
37
function appendLog
38
{
39
	echo "[`date`] $1" >> $LOGFILE
40
}
41
42
function readDataset
43
{
44
	mail=$(echo "$1" | cut -d ":" -f 1)
45
	nickname=$(echo "$1" | cut -d ":" -f 2)
46
	expectedCount=$(echo "$1" | cut -d ":" -f 3)
47
	voting=$(echo "$1" | cut -d ":" -f 4)
48
}
49
50
function setExpectedMails
51
{
52
	lockDatabase
53
54
	developerMail="$1"
55
	newExpectedCount="$2"
56
57
	while read line
58
	do
59
		if [ ! "_$(echo "$line" | cut -c 1)" = "_#" ]
60
		then
61
			readDataset "$line"
62
63
			if [ "_$mail" = "_$developerMail" ]
64
			then
65
				expectedCount="$newExpectedCount"
66
			fi
67
68
			# writing updated dataset
69
			echo "$mail:$nickname:$expectedCount:$voting" >> "$DATABASE.tmp"
70
		else
71
			# Comments are just copied
72
			echo "$line" >> "$DATABASE.tmp"
73
		fi
74
	done < "$DATABASE"
75
76
	unlockDatabase
77
}
78
79
function setVoting
80
{
81
	lockDatabase
82
83
	developerMail="$1"
84
	newVoting="$2"
85
86
	while read line
87
	do
88
		if [ ! "_$(echo "$line" | cut -c 1)" = "_#" ]
89
		then
90
			readDataset "$line"
91
92
			if [ "_$mail" = "_$developerMail" ]
93
			then
94
				voting="$newVoting"
95
			fi
96
97
			# write updated dataset
98
			echo "$mail:$nickname:$expectedCount:$voting" >> "$DATABASE.tmp"
99
		else
100
			# Comments are just copied
101
			echo "$line" >> "$DATABASE.tmp"
102
		fi
103
	done < "$DATABASE"
104
105
	unlockDatabase
106
}
107
108
function getExpectedMails
109
{
110
	lockDatabase
111
112
	developerMail="$1"
113
114
	while read line
115
	do
116
		echo "$line" >> "$DATABASE.tmp"
117
		if [ ! "_$(echo "$line" | cut -c 1)" = "_#" ]
118
		then
119
			readDataset "$line"
120
121
			if [ "_$mail" = "_$developerMail" ]
122
			then
123
				echo "$expectedCount"
124
			fi
125
		fi
126
	done < "$DATABASE"
127
128
	unlockDatabase
129
}
130
131
function getVoting
132
{
133
	lockDatabase
134
135
	developerMail="$1"
136
137
	while read line
138
	do
139
		echo "$line" >> "$DATABASE.tmp"
140
		if [ ! "_$(echo "$line" | cut -c 1)" = "_#" ]
141
		then
142
			readDataset "$line"
143
144
			if [ "_$mail" = "_$developerMail" ]
145
			then
146
				echo "$voting"
147
			fi
148
		fi
149
	done < "$DATABASE"
150
151
	unlockDatabase
152
}
153
154
function getName
155
{
156
	lockDatabase
157
158
	developerMail="$1"
159
160
	while read line
161
	do
162
		echo "$line" >> "$DATABASE.tmp"
163
		if [ ! "_$(echo "$line" | cut -c 1)" = "_#" ]
164
		then
165
			readDataset "$line"
166
167
			if [ "_$mail" = "_$developerMail" ]
168
			then
169
				echo "$nickname"
170
			fi
171
		fi
172
	done < "$DATABASE"
173
174
	unlockDatabase
175
}
176
177
function getDevelopers
178
{
179
	lockDatabase
180
181
	while read line
182
	do
183
		echo "$line" >> "$DATABASE.tmp"
184
		if [ ! "_$(echo "$line" | cut -c 1)" = "_#" ]
185
		then
186
			readDataset "$line"
187
			echo "$mail"
188
		fi
189
	done < "$DATABASE"
190
191
	unlockDatabase
192
}
193
194
function incExpectedMails
195
{
196
	setExpectedMails $1 $(expr $(getExpectedMails $1) + 1)
197
}
198
199
function decExpectedMails
200
{
201
	setExpectedMails $1 $(expr $(getExpectedMails $1) - 1)
202
}
203
204
function incVoting
205
{
206
	setVoting $1 $(expr $(getVoting $1) + 1)
207
}
208
209
function decVoting
210
{
211
	setVoting $1 $(expr $(getVoting $1) - 1)
212
}
213
214
function extraDecVoting
215
{
216
	setVoting $1 $(expr $(getVotign $1) - 10)
217
}
218
219
function mailGetFrom
220
{
221
	echo "$1" | while read line
222
	do
223
		if [ "_$(echo "$line" | head -c 6)" = "_From: " ]
224
		then
225
			from=$(echo "$line" | cut -d " " -f 2-)
226
227
			if [ ! "_$(echo "$from" | grep "<")" = "_" ]
228
			then
229
				from=$(echo "$from" | sed 's,.*<\([^ >]*\)>.*,\1,')
230
			fi
231
232
			echo "$from"
233
		fi
234
	done
235
}
236
237
function mailGetSubject
238
{
239
	echo "$1" | while read line
240
	do
241
		if [ "_$(echo "$line" | head -c 9)" = "_Subject: " ]
242
		then
243
			subject=$(echo "$line" | cut -d " " -f 2)
244
			echo "$subject"
245
		fi
246
	done
247
}
248
249
function sendNonExpected
250
{
251
	to="$1"
252
	subject="RE: $2"
253
	name=$(getName "$to")
254
255
	read -d '' text << EOF
256
Hi $name,
257
258
I have got an e-mail from you which I didn't expect.
259
Is this my fault or yours?
260
If it is my fault please mail LittleFox at [email protected] - thank you!
261
262
Best regards,
263
The most-annoying bot
264
EOF
265
	appendLog $(echo "$text" | mail -s "$subject" -a "From: Most-annoying bot (MAB) <[email protected]>" "$to")
266
}
267
268
function sendReminder
269
{
270
	to="$1"
271
	name=$(getName "$to")
272
273
	decVoting "$to"
274
	voting=$(getVoting "$to")
275
276
	read -d '' text << EOF
277
Hi $name,
278
279
I didn't get a response from you since my last email.
280
Sorry, but I had to downvote you, giving you a vote of $voting.
281
282
If you don't answer within 24 hours after the first mail you'll get a downvote of -10!
283
284
Best regards,
285
The most-annoying bot
286
EOF
287
288-
	echo "$text" | mail -s "No response" -a "From: Most-annoying bot (MAB) <[email protected]>" -a "Reply-to: [email protected], [email protected] "$to"
288+
	echo "$text" | mail -s "No response" -a "From: Most-annoying bot (MAB) <[email protected]>" -a "Reply-to: [email protected], [email protected]" "$to"
289
}
290
291
function sendWeeklyRequest
292
{
293
	to="$1"
294
	name=$(getName "$to")
295
296
	incExpectedMails "$to"
297
298
	read -d '' text << EOF
299
Hi $name,
300
301
it's that time of the week again - I would like to get a status-report from you.
302
If you don't respond within an hour, I'll have to downvote you.
303
304
You can gain 1 point every week by not having me to send a reminder.
305
You'll lose a point for every reminder I send. If you don't respond within 24 hours, you'll lose 10 points + one for each reminder, giving -34 points.
306
307
The other team members will agree on a proper punishment when you have a bad voting >:]
308
309
Best regards,
310
The most-annoying bot
311
EOF
312
313
	echo "$text" | mail -s "Status-reports please" -a "From: Most-annoying bot (MAB) <[email protected]>" -a "Reply-to: [email protected], [email protected]" "$to"
314
}
315
316
function sendWeeklyDownvote
317
{
318
	to="$1"
319
	name=$(getName "$to")
320
321
	extraDecVoting "$to"
322
	voting=$(getVoting "$to")
323
324
	setExpectedCount "$to" "0"
325
326
	read -d '' text << EOF
327
Hi $name,
328
329
I didn't get a response from you the last 24 hours.
330
I gave you a downvote of -10 in addition to the -1 for every reminder, giving you -34 this week for a total of now $voting points.
331
332
Don't make me angry and send me an response next week! >:[
333
If you reach -200, I'll inform the whole mailinglist. You don't want this to happen, do you?
334
335
Best regards,
336
The most-annoying bot
337
EOF
338
339
	echo "$text" | mail -s "Extra-downvote, just for you!" -a "From: Most-annoying bot (MAB) <[email protected]>" "$to"
340
}