2023-04-11 06:12:51 +00:00
from __future__ import annotations
from typing import List
import persona
from persona import PersonaBaseSkill
import datetime
2023-04-17 23:07:43 +00:00
import logging
2023-04-11 06:12:51 +00:00
import re
2023-04-17 23:07:43 +00:00
BACKOFF_SEC = 30
2023-04-11 06:12:51 +00:00
class PersonaSkill ( PersonaBaseSkill ) :
2023-04-11 16:02:45 +00:00
""" A simple test skill that responds to the joke ' Why did ____ cross the road? ' ' """
2023-04-17 23:07:43 +00:00
def __init__ ( self ) :
self . last_check = datetime . datetime . now ( ) . timestamp ( ) - BACKOFF_SEC
self . log = logging . getLogger ( __name__ )
self . log = logging . LoggerAdapter ( self . log , { ' log_module ' : ' chicken ' } )
2023-04-11 06:12:51 +00:00
def match_intent ( self , message : Message ) - > Bool :
2023-04-17 23:07:43 +00:00
# Don't respond if you've responded already recently
if datetime . datetime . now ( ) . timestamp ( ) < ( self . last_check + BACKOFF_SEC ) :
self . log . warn ( ' Responding too fast, not responding again. ' )
return False
2023-04-11 06:12:51 +00:00
matches = re . search ( ' ^Why did the .* cross the road \ ? ' , message . text )
if matches :
return True
return False
def respond ( self , message : Message ) - > Message :
""" Respond to a message by generating another message. """
2023-04-17 23:07:43 +00:00
return persona . Message ( text = ' To get to the other side! ' , sender_identifier = message . sender_identifier , chat_identifier = message . chat_identifier , attachments = [ ] , timestamp = datetime . datetime . now ( ) , recipients = [ message . sender_identifier ] , identifier = None , meta = { } )