Browse Source

Merge remote-tracking branch 'origin/master' into modularization

Conflicts:
	modules/ffpb.py
Helge Jung 9 years ago
parent
commit
66a2dc962d
2 changed files with 33 additions and 0 deletions
  1. 1 0
      .gitignore
  2. 32 0
      modules/ffpb.py

+ 1 - 0
.gitignore

@@ -7,3 +7,4 @@ logs/
 alfred.json
 highscoredata
 monitorednodes
+nodes.seen

+ 32 - 0
modules/ffpb.py

@@ -71,6 +71,8 @@ class ThreadingTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
 def setup(bot):
 	global msgserver, peers_repo, alfred_method
 
+	bot.memory['ffpb_in_setup'] = True
+
 	# open highscores file (backed to filesystem)
 	if 'highscores' in bot.memory and not bot.memory['highscores'] is None:
 		bot.memory['highscores'].close()
@@ -83,8 +85,12 @@ def setup(bot):
 		highscores['clients_ts'] = time.time()
 	bot.memory['highscores'] = highscores
 
+	seen_nodes = shelve.open('nodes.seen', writeback=True)
+	bot.memory['seen_nodes'] = seen_nodes
+
 	# no need to configure anything else if the ffpb config section is missing
 	if not bot.config.has_section('ffpb'):
+		bot.memory['ffpb_in_setup'] = False
 		return
 
 	# open the git repository containing the peers files
@@ -112,6 +118,8 @@ def setup(bot):
 	alfred_method = bot.config.ffpb.alfred_method
 	ffpb_updatealfred(bot)
 
+	bot.memory['ffpb_in_setup'] = False
+
 def shutdown(bot):
 	global msgserver
 
@@ -121,6 +129,12 @@ def shutdown(bot):
 		bot.memory['highscores'].close()
 		del(bot.memory['highscores'])
 
+	# store seen_nodes
+	if 'seen_nodes' in bot.memory and bot.memory['seen_nodes'] != None:
+		bot.memory['seen_nodes'].close()
+		bot.memory['seen_nodes'] = None
+		del(bot.memory['seen_nodes'])
+
 	# shut down messaging server
 	if not msgserver is None:
 		msgserver.shutdown() 
@@ -320,6 +334,24 @@ def ffpb_updatealfred(bot):
 	bot.memory['alfred_data'] = alfred_data
 	bot.memory['alfred_update'] = updated
 
+	seen_nodes = bot.memory['seen_nodes'] if 'seen_nodes' in bot.memory else None
+	if not seen_nodes is None:
+		new = []
+		for nodeid in alfred_data:
+			nodeid = str(nodeid)
+			if not nodeid in seen_nodes:
+				seen_nodes[nodeid] = updated
+				new.append((nodeid,alfred_data[nodeid]['hostname']))
+				print('First time seen: ' + str(nodeid))
+		if len(new) > 0 and not bot.memory['ffpb_in_setup']:
+			action_msg = 'bemerkt '
+			if len(new) == 1:
+				action_msg += 'den neuen Knoten \'' + str(new[0][1]) + '\''
+			else:
+				action_msg += 'die neuen Knoten \'' + '\', \''.join([ str(x[1]) for x in new[0:-1] ]) + '\' und \'' + str(new[-1][1]) + '\''
+			action_target = bot.config.ffpb.msg_target
+			bot.msg(action_target, '\x01ACTION %s\x01' % action_msg)
+
 @willie.module.commands('debug-alfred')
 def ffpb_debug_alfred(bot, trigger):
 	"""Zeige Stand der Alfred-Daten an."""