boggle: added verification of answers; tell: fixed time-bug and call-structure misunderstanding

master
vu 14 years ago
parent 0ba1aa3623
commit 0cabd705ec
  1. 115
      modules/active/boggle.py
  2. 7
      modules/active/tell.py
  3. 52
      modules/inactive/youtube.py

@ -1,5 +1,4 @@
import brathuhn, random, time import random, time, brathuhn
DICE = [['A','A','A','F','R', 'S']] DICE = [['A','A','A','F','R', 'S']]
DICE.append(['A','A','E','E','E','E']) DICE.append(['A','A','E','E','E','E'])
DICE.append(['A','A','F','I','R','S']) DICE.append(['A','A','F','I','R','S'])
@ -30,22 +29,130 @@ DICE.append(['I','P','R','R','R','Y'])
DICE.append(['N','O','O','T','U','W']) DICE.append(['N','O','O','T','U','W'])
DICE.append(['O','O','O','T','T','U']) DICE.append(['O','O','O','T','T','U'])
bog_kern = [[-1,-1], [-1, 0], [-1, 1],
[ 0,-1] , [ 0, 1],
[ 1,-1], [ 1, 0], [ 1,-1]]
bog_current = "asdf";
def timesup(a): def timesup(a):
brathuhn.sendMsg(brathuhn.ROOM,"Time's up!",'groupchat') brathuhn.sendMsg(brathuhn.ROOM,"Time's up!",'groupchat')
def boggle(msg,args): def boggle(msg,args):
if len(args)==1: if len(args)==1:
global bog_current
mymsg = "" mymsg = ""
random.shuffle(DICE) random.shuffle(DICE)
i = 0 i = 0
bog_current = [];
j = -1;
for d in DICE: for d in DICE:
if i % 5 == 0: if i % 5 == 0:
bog_current.append([])
j = j+1
mymsg += "\n" mymsg += "\n"
i+=1 i+=1
mymsg += "%3s" % ( d[random.randint(0,5)] ) c = d[random.randint(0,5)]
bog_current[j].append(c);
mymsg += "%3s" % ( c )
brathuhn.sendMonoMsg(brathuhn.ROOM,mymsg,'groupchat') brathuhn.sendMonoMsg(brathuhn.ROOM,mymsg,'groupchat')
brathuhn.sendMsg(brathuhn.ROOM,"you have 3 minutes",'groupchat') brathuhn.sendMsg(brathuhn.ROOM,"you have 3 minutes",'groupchat')
brathuhn.callAt(timesup, time.time()+60*3, [1]) brathuhn.callAt(timesup, time.time()+60*3, [1])
else: else:
brathuhn.sendMsg(brathuhn.ROOM,"Usage: !boggle",'groupchat') brathuhn.sendMsg(brathuhn.ROOM,"Usage: !boggle",'groupchat')
brathuhn.addCommand("boggle","Usage: !boggle",boggle) brathuhn.addCommand("boggle","Usage: !boggle",boggle)
def bog_ans(msg, args):
answer = [w.strip().upper() for w in args[1:]]
valid = bog_verify(answer, bog_current)
invalid = list(set(answer)-set(valid))
count = bog_count(valid)
user = msg.getFrom().getResource()
strinv = ""
if len(invalid) != 0:
strinv = "; invalid: {0}".format(invalid)
brathuhn.sendMsg(brathuhn.ROOM,"{0}: {1} pts{2}".format(user, count, strinv),'groupchat')
brathuhn.addCommand("bog_ans","Usage: !bog_ans ans1 ans2 ...",bog_ans)
def bog_verify(msgs, bog):
ret = [];
# TODO migrate to creation of bog_current
bog_pad = [[""]*7]
for i in range(5):
t = [""];
t.extend(bog[i])
t.append("")
bog_pad.append(t)
bog_pad.append([""]*7)
for m in msgs:
# loop through bog, if first letter == m[0] then checkmachine
pos_r = pos_l = -1;
for r in bog:
pos_r += 1
pos_l = -1
for l in r:
pos_l += 1
if bog[pos_r][pos_l] == m[0]:
r = check_valid(m[1:], bog_pad, [[pos_r+1,pos_l+1]]);
if(r == 1):
ret.append(m)
return list(set(ret))
def check_valid(m, bog, path):
# check path, no letters must be used twice
# pass path along, always use last position in path as
# pos, but check if new match exists in pos
c = m[0]
pos = path[-1:][0]
r = 0
for k in bog_kern:
if (bog[pos[0]+k[0]][pos[1]+k[1]] == c) and ([pos[0]+k[0],pos[1]+k[1]] not in path):
if(len(m) == 1):
r = 1
else:
cpath = path
cpath.append([pos[0]+k[0],pos[1]+k[1]])
r = check_valid(m[1:], bog, cpath)
if r == 1:
break
return r
def bog_count(words):
count = 0;
for w in words:
l = len(w)
if l < 3:
continue;
elif l < 5:
count += 1
elif l < 6:
count += 2
elif l < 7:
count += 3
elif l < 8:
count += 5
elif l >= 8:
count += 11
return count

@ -4,6 +4,7 @@
import brathuhn import brathuhn
import time import time
from datetime import datetime from datetime import datetime
from datetime import timedelta
from persistent import PersistentContainer from persistent import PersistentContainer
import config import config
@ -67,19 +68,19 @@ def cleartell():
now = datetime.today() now = datetime.today()
rem = [] rem = []
for l in store: for l in store:
if(now - l[3] < HOLDBACK): if(now - l[3] < timedelta(seconds=HOLDBACK)):
rem.append(l) rem.append(l)
for r in rem: for r in rem:
store.remove(r) store.remove(r)
container["store"] = store container["store"] = store
brathuhn.callAt(cleartell, time.time()+DELAY, []) brathuhn.callAt(cleartell, time.time()+DELAY, [None])
############################################## ##############################################
brathuhn.addCommand("tell","Usage: !tell nick text", tell) brathuhn.addCommand("tell","Usage: !tell nick text", tell)
brathuhn.addStatusListener(tellCB) brathuhn.addStatusListener(tellCB)
brathuhn.callAt(cleartell, time.time()+DELAY, []) brathuhn.callAt(cleartell, time.time()+DELAY, [None])
############################################## ##############################################

@ -0,0 +1,52 @@
import re, brathuhn
import gdata.youtube.service
URL = r'((\w+)://((\w+\.)+\w+)([a-zA-Z0-9\~\!\@\#\$\%\^\&amp;\*\(\)_\-\=\+\\/\?\.\:\;\"\,]*))'
ID=r'[\w_-]'*11
ID_URL=r'[=/]('+ID+r')[/&#]|[=/]('+ID+r')$'
def get_id_from_url(url):
groups=re.findall(ID_URL,url)
if groups:
for g in groups:
id=g[0]
if id=='':
id=g[1]
return id
def youtube_logger(mfrom,msg):
if brathuhn.room_nick in unicode(mfrom):
return
groups=re.findall(URL,unicode(msg.getBody()))
tmp = {}
for g in groups:
url = g[0]
addr = g[2]
protocol = g[1]
file = g[4]
if protocol in ['http','https'] and addr in ['youtube.com','www.youtube.com','youtu.be']:
yt_service = gdata.youtube.service.YouTubeService()
id = get_id_from_url(url)
# prevent doubles
if id in tmp:
continue
tmp[id]=True
print "youtube link",id
entry = yt_service.GetYouTubeVideoEntry(video_id=id)
sec = int(entry.media.duration.seconds)
duration = "%02d:%02d:%02d" % (sec/3600, (sec%3600)/60, (sec%3600)%60)
txt = "%s posted a youtube video: %s\nTitle: %s\nCategory: %s\nTags: %s\nDuration: %s\nViews: %s\nRating: %s" % (unicode(mfrom.getResource()),
entry.media.player.url,
entry.media.title.text,
entry.media.category[0].text,
entry.media.keywords.text,
duration,
entry.statistics.view_count,
entry.rating.average)
brathuhn.sendMsg(brathuhn.ROOM,txt,'groupchat')
brathuhn.addGroupListener(youtube_logger)
Loading…
Cancel
Save