Exemplo n.º 1
0
 async def watcher(self, message):
     if not self.config["CLIENT_KEY"]:
         logger.debug("no key set for lydia, returning")
         return
     if not isinstance(message, types.Message):
         return
     if self._lydia is None:
         self._lydia = coffeehouse.LydiaAI(self.config["CLIENT_KEY"])
     if (isinstance(message.to_id, types.PeerUser) and not self.get_allowed(message.from_id)) or \
             self.is_forced(utils.get_chat_id(message), message.from_id):
         user = await utils.get_user(message)
         if user.is_self or user.bot or user.verified:
             logger.debug("User is self, bot or verified.")
             return
         else:
             if not isinstance(message.message, str):
                 return
             if len(message.message) == 0:
                 return
             if self.config["IGNORE_NO_COMMON"] and not self.is_forced(utils.get_chat_id(message), message.from_id):
                 fulluser = await message.client(functions.users.GetFullUserRequest(await utils.get_user(message)))
                 if fulluser.common_chats_count == 0:
                     return
             await message.client(functions.messages.SetTypingRequest(
                 peer=await utils.get_user(message),
                 action=types.SendMessageTypingAction()
             ))
             try:
                 # Get a session
                 sessions = self._db.get(__name__, "sessions", {})
                 session = sessions.get(utils.get_chat_id(message), None)
                 if session is None or session["expires"] < time.time():
                     session = await utils.run_sync(self._lydia.create_session)
                     session = {"session_id": session.id, "expires": session.expires}
                     logger.debug(session)
                     sessions[utils.get_chat_id(message)] = session
                     logger.debug(sessions)
                     self._db.set(__name__, "sessions", sessions)
                     if self._cleanup is not None:
                         self._cleanup.cancel()
                     self._cleanup = asyncio.ensure_future(self.schedule_cleanups())
                 logger.debug(session)
                 # AI Response method
                 msg = message.message
                 airesp = await utils.run_sync(self._lydia.think_thought, session["session_id"], str(msg))
                 logger.debug("AI says %s", airesp)
                 if random.randint(0, 1) and isinstance(message.to_id, types.PeerUser):
                     await message.respond(airesp)
                 else:
                     await message.reply(airesp)
             finally:
                 await message.client(functions.messages.SetTypingRequest(
                     peer=await utils.get_user(message),
                     action=types.SendMessageCancelAction()
                 ))
Exemplo n.º 2
0
 async def client_ready(self, client, db):
     self._db = db
     self._lydia = coffeehouse.LydiaAI(
         self.config["CLIENT_KEY"]) if self.config["CLIENT_KEY"] else None
     # Schedule cleanups
     self._cleanup = asyncio.ensure_future(self.schedule_cleanups())