Python:
class DiEmoV2(Skill):
def __init__(self):
super().__init__()
self.xp = 0
self.reseter: TrgEveryNMinutes = TrgEveryNMinutes(10)
self.lim = 3
self.no_mood: Responder = Responder("bored", "meh", "neutral")
self.yes_mood: Responder = Responder("good", "i feel good", "okay", "great")
self.pain = False
self.prep: Responder = Responder("open your mouth", "get ready", "ready", "dispensing reward")
self.prize: Responder = Responder("hawk tuah", "patui", "pa-tuy", "drools", "tfu")
# Anti-spam tracking
self.last_message_hash = None
self.last_message_time = 0
@staticmethod
def _get_message_hash(text: str) -> str:
normalized = text.lower().strip()
return hashlib.md5(normalized.encode()).hexdigest()[:8]
@staticmethod
def _has_syllables(text: str) -> bool:
vowels = re.findall(r'[aeiouy]', text.lower())
return len(vowels) > 0
def reward(self):
self.setSimpleAlg(self.prep.getAResponse(), self.prize.getAResponse())
def input(self, ear: str, skin: str, eye: str):
if skin == "pain":
self.pain = True
self.setSimpleAlg("ouch")
return
if self.reseter.trigger():
self.xp = max(0, self.xp - 2)
self.pain = False
if ear == "reward me" and not self.pain:
if self.xp > 3:
self.xp -= 3
self.reward()
else:
self.setSimpleAlg(f"Need {4 - self.xp} more messages first")
return
if ear == "how are you":
if self.pain:
self.setSimpleAlg("sad")
elif self.xp < 3:
self.setSimpleAlg(self.no_mood.getAResponse())
else:
self.setSimpleAlg(self.yes_mood.getAResponse())
return
# Distinct message + syllable check before XP gain
current_hash = self._get_message_hash(ear)
current_time = time.time()
is_distinct = (current_hash != self.last_message_hash) or (current_time - self.last_message_time) >= 30
has_syllables = self._has_syllables(ear)
if is_distinct and has_syllables and len(ear) > 4:
self.xp += 1
self.last_message_hash = current_hash
self.last_message_time = current_time