| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- import json
- from Jessi import Contents
- import Stats
- import random
- class ContentFile(object):
- # text inloaded
- # tags[keyname] = [list of indexes]
- # text[i] = [list of Contents objects]
- def __init__(self, file:str):
- self._file = file
- self.tags = dict()
- self.entries = list()
- self.__load()
- pass
- def __load(self):
- self.entries.clear()
- self.entries = list()
- stats = Stats.Stats.getInstance()
- with open('ressources/texts/'+self._file, encoding="utf-8") as f:
- data = json.load(f)
- for i in data:
- add = True
- if "mood_required" in i:
- statKeys = ["angry","annoyed","aroused","bored","compfortable","depressive","energy","excited","exhausted",
- "freezy","funny","happyness","hot","humanity","hungry","intelligent","irritated","lonely","naiv",
- "playful","sad","shy","sleepy","soziality","temperate","toLoud","toQuiet","usefull","useless"]
- for sk in statKeys:
- if sk+"_max" in i["mood_required"] and i["mood_required"][sk+"_max"] <= getattr(stats.DeviceStats,sk):
- add = False
- break
- if sk+"_min" in i["mood_required"] and i["mood_required"][sk+"_min"] >= getattr(stats.DeviceStats,sk):
- add = False
- break
- if add == True and "text" in i:
- self.entries.append(Contents.Contents(i))
- def getText(self, tags) -> Contents:
- tagList = self.__argumentToTagList(tags)
- res = dict()
- maxNum = 1
- for e in self.entries:
- num = e._hasTags(tagList)
- if num>=maxNum:
- maxNum = num
- if num in res:
- res[num].append(e)
- else:
- res[num]=list()
- res[num].append(e)
- return random.choice(res[maxNum])
- def executeText(self, tags):
- obj = self.getText(tags)
- if obj is not None:
- stats = Stats.Stats.getInstance()
- statKeys = ["angry","annoyed","aroused","bored","compfortable","depressive","energy","excited","exhausted",
- "freezy","funny","happyness","hot","humanity","hungry","intelligent","irritated","lonely","naiv",
- "playful","sad","shy","sleepy","soziality","temperate","toLoud","toQuiet","usefull","useless"]
- #for sk in statKeys:
- # if sk in obj.addStats:
- # print("AddStats "+sk+" "+obj.addStats[sk])
- # val = getattr(stats.deviceStats,sk)
- # val+=obj.addStats[sk]
- # setattr(stats.deviceStats, sk, val)
-
- rndText = random.choice(obj.text)
- return rndText
- return ""
- def Update(self):
- self.__load()
- def __argumentToTagList(self, arg):
- res = list()
- if isinstance(arg,list):
- for i in arg:
- tmp = self.__argumentToTagList(i)
- for j in tmp:
- res.append(j)
- else:
- tmp = arg.split(",")
- for i in tmp:
- res.append(i.strip().lower())
- return res
|