-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathbearuser.py
85 lines (73 loc) · 2.73 KB
/
bearuser.py
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
import insultdict
import time
import sys
import re
import random
RESPONSES_TABLE="data/responses.txt"
def one_of(l):
l = list(l)
return l[random.randint(0,len(l)-1)]
class ResponseDict():
def __init__(self):
self.responsesByPrefixByMood={}
def load(self,filename):
for line in open(filename,'r'):
try:
match = re.search(r"([\d-]*)\s+([\d-]*)\s+(.*)",line)
if match is None: continue
position = int(match.group(1))
mood = int(match.group(2))
text = match.group(3).strip()
response_list = self.responsesByPrefixByMood.setdefault(position,{}).setdefault(mood,[])
response_list.append(text)
except(ValueError,IndexError):
pass
def formatString(self,s,details):
inserts = {
'user_name': details["bear_user"].user.name
}
def do_replace(match):
return inserts.get(match.group(1),match.group(0))
return re.sub(r"{([^}]*)}",do_replace,s)
def getResponseUnlimited(self, mood, details):
response_list1 = self.responsesByPrefixByMood[1][int(round(mood))]
response_list2 = self.responsesByPrefixByMood[2][int(round(mood))]
return " ".join([self.formatString(one_of(l),details) for l in [response_list1,response_list2]])
def getResponse(self,mood,details):
n =0
response=None
found = False
while n < 50:
n += 1
response = self.getResponseUnlimited(mood,details)
if len(response)<=130:
found = True
break
if not found:
response = "I am literally too stunned for words."
return response
RESPONSES = ResponseDict()
RESPONSES.load(RESPONSES_TABLE)
class BearUser(object):
def __init__(self, user):
self.user = user
self.mood = 0
self.last_updated = time.time()
def __repr__(self):
return "user %s has made bear have mood %d - last talked at %s" %(self.user, self.mood, self.last_updated)
def changeMood(self, mood_change):
self.mood += mood_change
if self.mood>2: self.mood = 2
if self.mood<-2: self.mood = -2
self.last_updated = time.time()
def createReply(self, sentence, details):
self.last_updated = time.time()
rating = insultdict.INSULT_DICT.rateSentence(sentence)
self.changeMood(rating/8.0)
return RESPONSES.getResponse(self.mood, details)
def test():
class User():
def __init__(self):
self.name="<Your User Name here>"+('a'*500)
b = BearUser(User())
print RESPONSES.getResponse(1,{'bear_user':b})