summaryrefslogtreecommitdiff
path: root/feeder/pepper_sj.py
blob: ffe94c8bad882f68b8ae66f3763dc274c51f6a87 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#!/usr/bin/python

import scanjam
import asdf_db
import random

USERID = 412
USERNAME = "pepper"
ROOM = "main"

SJ = scanjam.ScanJam (USERID, USERNAME, ROOM)
DB = asdf_db.db ()

class Talker:
	# initialize a new talker
	def __init__ (self, file, rate):
		self.data_file = file
		self.seen_file = file + ".seen"

		# load in the data file and the file of things we've already dumped
		self.dumps = self.slurp (self.data_file)
		self.seen = self.slurp (self.seen_file)
		print "slurped"

		# remove things we've already dumped from the queue
		for key in self.seen.keys():
			if key in self.dumps:
				del self.dumps[key]

		# start each talker off-cycle
		self.rate = rate
		print "the rate "+str(self.rate)
		self.tick = random.randint (0, rate)
		self.on = True

	# consider whether to say something
	def consider (self):
		print "self.on "+str(self.on)
		if not self.on:
			return

		self.tick += 1

		# 15% chance of dumping
		if self.tick > self.rate and random.randint (1, 1000) > 500: #850

			# is there anything left to dump?
			if len(self.dumps) == 0:
				
				self.on = False
				print "self.on "+str(self.on)
				return

			# get a new dump
			newdump = random.choice (self.dumps.keys())

			# store that we have dumped this already
			self.seen[newdump] = True
			del self.dumps[newdump]
			self.unslurp (self.seen_file, self.seen)

			print ">", newdump

			# perform the dump
			SJ.say (newdump)
			self.tick = 0

	# load a flatfile into a hash (url => True)
	def slurp (self, file):
		f = open (file, "r")
		lines = f.readlines()
		f.close
		lookup = {}
		for l in lines:
			lookup[l.strip()] = True
		return lookup

	# save a hash into a flatfile
	def unslurp (self, file, lookup):
		f = open (file, "w")
		for line in lookup.keys():
			f.write (line + "\n")
		f.close
		return f

def store_msg (who, msg):
	sql = "INSERT INTO dump_msg (nick,date,who,dump) VALUES(%s,%s,%s,%s)"
	args = (USERNAME, asdf_db.now (), who+"@scannerjammer", msg)
	DB.execute (sql, args)
	print who, ">", msg

# set up one talker for dumps, one talker for videos
dump_talker = Talker ("pepper/dumps.txt", 60 * 60 * 4)
video_talker = Talker ("pepper/videos.txt", 5)

# deduper for messages
seen_msgs = {}

# poll indefinitely..
while (1):
	dump_talker.consider ()
	video_talker.consider ()
	msgs = SJ.poll ()
	for msg in msgs:
		if msg['msg'] in seen_msgs:
			continue
		seen_msgs[msg['msg']] = True
		if USERNAME in msg['msg'].lower():
			store_msg (msg['nick'], msg['msg'])