ContentFile.py 3.4 KB

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