ContentFile.py 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import json
  4. from Jessi import Contents
  5. import Stats
  6. import random
  7. class ContentFile(object):
  8. # text inloaded
  9. # tags[keyname] = [list of indexes]
  10. # text[i] = [list of Contents objects]
  11. def __init__(self, file:str):
  12. self._file = file
  13. self.tags = dict()
  14. self.entries = list()
  15. self.__load()
  16. pass
  17. def __load(self):
  18. self.entries.clear()
  19. self.entries = list()
  20. stats = Stats.Stats.getInstance()
  21. with open('ressources/texts/'+self._file, encoding="utf-8") as f:
  22. data = json.load(f)
  23. for i in data:
  24. add = True
  25. if "mood_required" in i:
  26. statKeys = ["angry","annoyed","aroused","bored","compfortable","depressive","energy","excited","exhausted",
  27. "freezy","funny","happyness","hot","humanity","hungry","intelligent","irritated","lonely","naiv",
  28. "playful","sad","shy","sleepy","soziality","temperate","toLoud","toQuiet","usefull","useless"]
  29. for sk in statKeys:
  30. if sk+"_max" in i["mood_required"] and i["mood_required"][sk+"_max"] <= getattr(stats.DeviceStats,sk):
  31. add = False
  32. break
  33. if sk+"_min" in i["mood_required"] and i["mood_required"][sk+"_min"] >= getattr(stats.DeviceStats,sk):
  34. add = False
  35. break
  36. if add == True and "text" in i:
  37. self.entries.append(Contents.Contents(i))
  38. def getText(self, tags) -> Contents:
  39. tagList = self.__argumentToTagList(tags)
  40. res = dict()
  41. maxNum = 1
  42. for e in self.entries:
  43. num = e._hasTags(tagList)
  44. if num>=maxNum:
  45. maxNum = num
  46. if num in res:
  47. res[num].append(e)
  48. else:
  49. res[num]=list()
  50. res[num].append(e)
  51. return random.choice(res[maxNum])
  52. def executeText(self, tags):
  53. obj = self.getText(tags)
  54. if obj is not None:
  55. stats = Stats.Stats.getInstance()
  56. statKeys = ["angry","annoyed","aroused","bored","compfortable","depressive","energy","excited","exhausted",
  57. "freezy","funny","happyness","hot","humanity","hungry","intelligent","irritated","lonely","naiv",
  58. "playful","sad","shy","sleepy","soziality","temperate","toLoud","toQuiet","usefull","useless"]
  59. #for sk in statKeys:
  60. # if sk in obj.addStats:
  61. # print("AddStats "+sk+" "+obj.addStats[sk])
  62. # val = getattr(stats.deviceStats,sk)
  63. # val+=obj.addStats[sk]
  64. # setattr(stats.deviceStats, sk, val)
  65. rndText = random.choice(obj.text)
  66. return rndText
  67. return ""
  68. def Update(self):
  69. self.__load()
  70. def __argumentToTagList(self, arg):
  71. res = list()
  72. if isinstance(arg,list):
  73. for i in arg:
  74. tmp = self.__argumentToTagList(i)
  75. for j in tmp:
  76. res.append(j)
  77. else:
  78. tmp = arg.split(",")
  79. for i in tmp:
  80. res.append(i.strip().lower())
  81. return res