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'])
|