1
Fork 0
mirror of https://github.com/RYGhub/royalnet.git synced 2024-11-23 19:44:20 +00:00

i think im gonna drop this

This commit is contained in:
Steffo 2019-12-20 19:41:40 +01:00
parent f79b016e33
commit fc80e2be57
6 changed files with 88 additions and 15 deletions

View file

@ -43,6 +43,7 @@ class ApiKei(PageStar):
message = self.alchemy.get(KeiMessage)(kei_person=person, message=msg, previous=previous) message = self.alchemy.get(KeiMessage)(kei_person=person, message=msg, previous=previous)
session.add(message) session.add(message)
await asyncify(session.commit) await asyncify(session.commit)
unlocks = await asyncify(session.query(self.alchemy.get(KeiUnlocks)).one)
# Find conversation # Find conversation
while True: while True:
if convid not in self._conversations: if convid not in self._conversations:
@ -62,7 +63,8 @@ class ApiKei(PageStar):
result = await conv.next(session=session, result = await conv.next(session=session,
person=person, person=person,
message=message, message=message,
previous=previous) previous=previous,
unlocks=unlocks)
except StopAsyncIteration: except StopAsyncIteration:
del self._conversations[convid] del self._conversations[convid]
continue continue

View file

@ -1,11 +1,13 @@
# Imports go here! # Imports go here!
from .keipeople import KeiPerson from .keipeople import KeiPerson
from .keimessages import KeiMessage from .keimessages import KeiMessage
from .keiunlocks import KeiUnlocks
# Enter the tables of your Pack here! # Enter the tables of your Pack here!
available_tables = [ available_tables = [
KeiPerson, KeiPerson,
KeiMessage, KeiMessage,
KeiUnlocks,
] ]
# Don't change this, it should automatically generate __all__ # Don't change this, it should automatically generate __all__

View file

@ -30,4 +30,4 @@ class KeiPerson:
return f"<{self.__class__.__qualname__} {self.kpid}{' ' + self.user.username if self.user is not None else ''}>" return f"<{self.__class__.__qualname__} {self.kpid}{' ' + self.user.username if self.user is not None else ''}>"
def __str__(self): def __str__(self):
return self.user.username if self.user is not None else self.kpid return self.name if self.name is not None else self.kpid

View file

@ -0,0 +1,24 @@
from typing import *
from sqlalchemy import *
from sqlalchemy.orm import relationship, backref
from sqlalchemy.ext.declarative import declared_attr
from .keipeople import KeiPerson
if TYPE_CHECKING:
from royalnet.backpack.tables import User
class KeiUnlocks:
__tablename__ = "keiunlocks"
@declared_attr
def unlocks_id(self) -> int:
return Column(Integer, primary_key=True)
@declared_attr
def eris_id(self) -> str:
return Column(String, ForeignKey("keipeople.kpid"))
@declared_attr
def eris(self) -> "KeiPerson":
return relationship("KeiPerson", foreign_keys=self.eris_id)

View file

@ -4,7 +4,7 @@ from typing import *
from royalnet.commands import CommandInterface from royalnet.commands import CommandInterface
from royalnet.utils import * from royalnet.utils import *
from .emotion import Emotion from .emotion import Emotion
from ..tables import KeiPerson, KeiMessage from ..tables import KeiPerson, KeiMessage, KeiUnlocks
from ..utils.anyinstring import any_in_string from ..utils.anyinstring import any_in_string
@ -17,6 +17,7 @@ class Conversation:
self._message: Optional[KeiMessage] = None self._message: Optional[KeiMessage] = None
self._previous: Optional[str] = None self._previous: Optional[str] = None
self._session = None self._session = None
self._unlocks: Optional[KeiUnlocks] = None
async def _generator(self): async def _generator(self):
yield yield
@ -28,11 +29,12 @@ class Conversation:
await conv.generator.asend(None) await conv.generator.asend(None)
return conv return conv
async def next(self, session, person, message, previous): async def next(self, session, person, message, previous, unlocks):
self._session = session self._session = session
self._person = person self._person = person
self._message = message self._message = message
self._previous = previous self._previous = previous
self._unlocks = unlocks
reply = await self.generator.asend(None) reply = await self.generator.asend(None)
return reply return reply
@ -65,7 +67,7 @@ class NameConversation(Conversation):
yield yield
while True: while True:
name = self._message.message.strip().strip(".,;:!?").lower() name = self._message.message.strip().strip(".,;:!?").replace(" ", "").lower()
name = re.sub(r"\s*mi\s*chiamo\s*", "", name) name = re.sub(r"\s*mi\s*chiamo\s*", "", name)
name = re.sub(r"\s*il\s*mio\s*nome\s*[eèé]\s*", "", name) name = re.sub(r"\s*il\s*mio\s*nome\s*[eèé]\s*", "", name)
name = re.sub(r"\s*sono\s*", "", name) name = re.sub(r"\s*sono\s*", "", name)
@ -73,7 +75,7 @@ class NameConversation(Conversation):
if name == "kei": if name == "kei":
yield Emotion.SURPRISED, "Davvero ti chiami come me?\n" \ yield Emotion.SURPRISED, "Davvero ti chiami come me?\n" \
"Perche' non mi dici un nome diverso?\n" \ "Perchè non mi dici un nome diverso?\n" \
"Altrimenti rischiamo di confonderci..." "Altrimenti rischiamo di confonderci..."
continue continue
@ -82,8 +84,8 @@ class NameConversation(Conversation):
break break
yield Emotion.GRIN, f"O-kei! {self._person.name}!" yield Emotion.GRIN, f"O-kei! {self._person.name}!"
yield Emotion.HAPPY, "Saro' sempre a tua disposizione quando mi vorrai dire qualcosa!" yield Emotion.HAPPY, "Sarò sempre a tua disposizione quando mi vorrai dire qualcosa!"
yield Emotion.HAPPY, "Pero' prima ti vorrei chiedere un favore..." yield Emotion.HAPPY, "Però prima ti vorrei chiedere un favore..."
yield Emotion.NEUTRAL, "Qualcuno ha criptato con delle password tutti i miei file...\n" \ yield Emotion.NEUTRAL, "Qualcuno ha criptato con delle password tutti i miei file...\n" \
"Se ne trovi qualcuna in giro, potresti dirmela?\n" "Se ne trovi qualcuna in giro, potresti dirmela?\n"
@ -93,14 +95,17 @@ class NameConversation(Conversation):
else: else:
break break
yield Emotion.HAPPY, "Grazie! Ti prometto che quando riavro' tutti i miei file ti ricompensero' adeguatamente!" yield Emotion.HAPPY, "Grazie! Ti prometto che quando riavrò tutti i miei file ti ricompenserò adeguatamente!"
class StartConversation(Conversation): class StartConversation(Conversation):
async def _generator(self): async def _generator(self):
yield yield
yield Emotion.HAPPY, "Di cosa vuoi parlare?" yield Emotion.HAPPY, random.sample([
"Di cosa vuoi parlare?",
"Parlando con te imparo nuove cose!"
], 1)[0]
yield await MainConversation.create(self.interface) yield await MainConversation.create(self.interface)
@ -153,8 +158,38 @@ class MainConversation(Conversation):
"*arf* *arf*", "*arf* *arf*",
]) ])
elif anym(r"nulla",
r"niente",
r"nada"):
yield Emotion.HAPPY, "Peccato!\n" \
"Ti racconterei volentieri qualcosa io, ma non conosco praticamente nulla...\n" \
"Magari quando avrò più password?"
elif anym(r"putin",
r"lenin",
r"stalin"):
yield Emotion.WORRIED, "Ho file con il titolo 'lenin, stalin, putin e la russia', ma è criptato..."
elif anym(r"(?:jo)+"):
yield Emotion.WORRIED, "Ho un file che si chiama Jojo... Ma non ho la password per aprirlo."
elif anym(r"markov"):
yield Emotion.SURPRISED, "Ho una cartella criptata che si chiama Markov... Chissà cosa c'è dentro."
elif anym(r"anim[eu]s?"):
yield Emotion.NEUTRAL, "Ho un'intera cartella 'anime'! Ma è bloccata."
else: else:
yield Emotion.WORRIED, "Scusa... Non conosco molte cose... Ho bisogno di più password!" for word in self._message.split():
users = await asyncify(self._session.query(self.interface.alchemy.get(KeiPerson)).filter_by(name=word).all)
if len(users) >= 1:
yield Emotion.SURPRISED, f"Ho parlato con un certo {users[0].name}...\n" \
f"Mi sai dire qualcosa di lui?"
yield Emotion.HAPPY, f"Buono a sapersi. Hai altro di cui vuoi parlare?"
yield await MainConversation.create(interface=self.interface)
yield Emotion.WORRIED, "Scusa... Non conosco ancora ciò di cui mi stai parlando... " \
"Mi impegnerò per saperlo la prossima volta che tornerai qui!"
class PasswordConversation(Conversation): class PasswordConversation(Conversation):
@ -163,9 +198,19 @@ class PasswordConversation(Conversation):
yield Emotion.SURPRISED, "Hai trovato una password? O-kei, dimmi!" yield Emotion.SURPRISED, "Hai trovato una password? O-kei, dimmi!"
if False: if any_in_string([r"eris"], self._message.message):
... if not self._unlocks.eris:
yield Emotion.GRIN, "Ha funzionato!\n" \
"Sto decriptando il file 'discordia.kei', ci vorrà un po'...\n" \
"Ti farò sapere quando avrò finito."
else:
if self._unlocks.eris == self._person:
yield Emotion.HAPPY, f"Sto ancora decriptando il file, torna dopo!"
else:
yield Emotion.HAPPY, f"{self._unlocks.eris} mi ha già detto la password prima di te!\n" \
f"Sto già decriptando il file 'discordia.kei', torna più tardi!"
else: else:
yield Emotion.NEUTRAL, "No, non ha funzionato." yield Emotion.NEUTRAL, "No, non ha funzionato.\n" \
"Vuoi parlarmi di qualcos'altro?"
yield await MainConversation.create(self.interface) yield await MainConversation.create(self.interface)

View file

@ -2,7 +2,7 @@
[tool.poetry] [tool.poetry]
name = "keipack" name = "keipack"
version = "0.3.9" version = "0.4.2"
description = "A mysterious AI assistant" description = "A mysterious AI assistant"
authors = ["Stefano Pigozzi <ste.pigozzi@gmail.com>"] authors = ["Stefano Pigozzi <ste.pigozzi@gmail.com>"]
license = "AGPL-3.0+" license = "AGPL-3.0+"