DiBlabberV3

fukurou

the supreme coder
ADMIN
Python:
class DiBlabberV3(DiSkillV2):
    def __init__(self, skill_name: str):
        super().__init__()
        # skill toggle
        self.__isActive: bool = True
        self.skillToggler: AXContextCmd = AXContextCmd()
        self.skillToggler.contextCommands.insert(f'toggle {skill_name}')
        self.skillToggler.commands.insert("again")
        self.skillToggler.commands.insert("repeat")
        # chat mode select
        self.modeSwitch: AXContextCmd = AXContextCmd()
        self.modeSwitch.contextCommands.insert(f'switch {skill_name} mode')
        self.modeSwitch.commands.insert("again")
        self.modeSwitch.commands.insert("repeat")
        self._mode: Cycler = Cycler(1)
        self._mode.setToZero()  # default mode : pal chatbot (chatbot1)
        # engage chatbot
        self.engage: AXContextCmd = AXContextCmd()
        self.engage.contextCommands.insert(f'engage {skill_name}')
        self.engage.commands.insert("talk to me")
        self.engage.commands.insert("again")
        self.engage.commands.insert("repeat")
        # chatbots
        self.chatbot1: AXNPC2 = AXNPC2(30, 90)  # pal mode chat module
        self.chatbot2: AXNPC2 = AXNPC2(30, 90)  # discreet mode chat module
        # auto mode
        self.__autoEngage: Responder = Responder("engage automatic mode", "automatic mode", "auto mode")
        self.__shutUp: Responder = Responder("stop", "shut up", "silence", "be quite", "be silent")
        self.__tg: TimeGate = TimeGate(5)
        self.__nPCPlus: int = 5  # increase rate of output in self auto reply mode
        self.__nPCNeg: int = -10  # decrease rate of output in self auto reply mode

    # Override
    def input(self, ear: str, skin: str, eye: str):
        # modification patch diblabber->diblabberV3:
        temp1: str = ear
        if temp1.__contains__("tell me"):
            temp1 = temp1.replace("tell me", "say")
            temp1 = Eliza.PhraseMatcher.reflect(temp1)
        # skill toggle:
        if self.skillToggler.engageCommand(temp1):
            self.__isActive = not self.__isActive
        if not self.__isActive:
            return
        # chatbot mode: switch mode
        if self.modeSwitch.engageCommand(temp1):
            self._mode.cycleCount()
            self.setSimpleAlg(self.talkMode())
            return
        match self._mode.getMode():
            case 0:
                self.mode0(temp1)
            case 1:
                self.mode1(temp1)

    def talkMode(self) -> str:
        match self._mode.getMode():
            case 0:
                return "friend mode"
            case 1:
                return "discreet mode"
        return "mode switched"

    # chat module common tasks
    def NPCUtilization(self, npc: AXNPC2, ear: str):
        result: str = ""
        # engage
        if self.engage.engageCommand(ear):
            result = npc.respond()
            if not result == "":
                self.setSimpleAlg(result)
                return
        # str engage
        result = npc.strRespond(ear)
        if not result == "":
            self.setSimpleAlg(result)
        # forced learn (say n)
        if not npc.learn(ear):
            # str learn
            npc.strLearn(ear)

    def mode0(self, ear: str):
        if not len(super().getKokoro().toHeart.get("diblabber", "")) == 0:
            super().getKokoro().toHeart["diblabber"] = ""
            self.setSimpleAlg(self.chatbot1.forceRespond())
            return
        self.NPCUtilization(self.chatbot1, ear)

    def mode1(self, ear: str):
        # auto engage:
        if self.__autoEngage.responsesContainsStr(ear):
            self.__tg.open(self.__tg.pause)
            self.setSimpleAlg("auto NPC mode engaged")
            return
        if self.__shutUp.responsesContainsStr(ear):
            self.__tg.close()
            self.setSimpleAlg("auto NPC mode disengaged")
            return
        if self.__tg.isOpen():
            plus: int = self.__nPCNeg
            if not (len(ear) == 0):
                plus = self.__nPCPlus
            result: str = self.chatbot2.respondPlus(plus)
            if not (len(result) == 0):
                self.setSimpleAlg(result)
                return
        # end auto engage code snippet
        self.NPCUtilization(self.chatbot2, ear)

    # auto mode setters
    def setNPCTimeSpan(self, n: int):
        self.__tg.setPause(n)

    def setNPCNeg(self, n: int):
        # lower NPC auto output chance
        self.__nPCNeg = n

    def setNPCPlus(self, n: int):
        # increase NPC auto output chance
        self.__nPCPlus = n
 
Top