diff options
| author | Pepper <pepper@scannerjammer.com> | 2015-05-20 11:16:13 -0400 |
|---|---|---|
| committer | Pepper <pepper@scannerjammer.com> | 2015-05-20 11:16:13 -0400 |
| commit | a4916103efb2d97896c456ff0e83064b21e85d25 (patch) | |
| tree | b3eb529e4b96375109626bbeada35d4f8a2667ee /feeder/pepper_sj.py | |
| parent | 3790eedc2f48c725c586b8c7b924875fedbeb7b4 (diff) | |
first commit in a while
Diffstat (limited to 'feeder/pepper_sj.py')
| -rwxr-xr-x | feeder/pepper_sj.py | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/feeder/pepper_sj.py b/feeder/pepper_sj.py new file mode 100755 index 0000000..ffe94c8 --- /dev/null +++ b/feeder/pepper_sj.py @@ -0,0 +1,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']) + |
