Python | Decoratoren richtig nutzen?

Guten Tag,

ich arbeite in Moment an ein kleines Projekt mit einer API für den Privatgebrauch.

Ich möchte mithilfe von Decoratoren ein Event registrieren.
Dieser Code ist nur ein Beispielcode und soll nur darstellen, was ich genau erreichen möchte:

main.py:

import time


class Bot:
    _events: list = []


    def __init__(self):
        ... # Übergabe der Instanz...


    @classmethod
    def event(cls, func):
        ... # Überprüfen, ob es sich um ein gültiges Event handelt 


        cls._events.append(func) # Registiert das Event, falls es gültig ist
        return func
    
    @classmethod
    def event_handler(cls):
        for event in cls._events:
            if callable(event):
                event()


    def start(self) -> None:
        while True:
            time.sleep(1)
            ...


if __name__ == "__main__":
    bot = Bot()
    bot.start()

Alle Events, die es gibt:

class Events:
    """Events die Verfügbar sind"""
    
    def on_check(self, chat):
        ... 


    def messages(self, message):
        ...

Die Nutzung:

class MyBot:
    
    """Das ist ein gültiges Event -> Funkionsname vom Event richtig, Parameter richtig
    Kann also in die Registration aufgenommen werden"""
    @bot.event
    def on_check(self, chat):
        ...


    """Kein gültiges Event -> Sprich die Funktion event soll ein Fehler ausgeben"""
    @bot.event
    def on_name(self, name):
        ...


    """Hier fehlt der Parameter -> Sprich die Funktion event soll ein Fehler ausgeben"""
    @bot.event
    def messages(self):
        ...

Ich hoffe es ist durch den Kommentaren klar, was mein Ziel ist. Falls Unklarheiten bestehen, stehe ich gerne zur Verfügung.

Vielen dank für eure Hilfe!
Liebe Grüße

Bot, Code, Programmiersprache, Python, API, Python 3
Python Chatbot-Fehler: Wo liegt hier das Problem?

Ich programmiere jetzt seit mehreren Stunden diesen Chatbot und finde den Fehler nicht, warum er es nicht schafft, auf die Frage: gut die richtige Antwort zu geben.

Hier ist mein Code und wenn ihr den Fehler findet, wäre ich euch sehr dankbar.

main.py:

class NeuroSama:
    def __init__(self):
        self.known_topics = self.load_topics("knowledge_base.txt")
        self.conversation_history = []
        self.load_conversation_log("conversation_log.txt")

    def respond(self, message):
        response = ""

        # Hier wird die Eingabe in Kleinbuchstaben umgewandelt, bevor sie verarbeitet wird
        message = message.lower()

        if self.is_new_topic(message):
            response = "Nein, was ist " + message + "?"
        else:
            response = self.get_response_from_file(message, "generate_response.py")

        self.conversation_history.append({"input": message, "output": response})
        return response

    def is_new_topic(self, topic):
        return topic.lower() not in self.known_topics

    def get_response_from_file(self, topic, filename):
        try:
            response_module = __import__(filename.split('.')[0])
            return response_module.generate_response(topic, self.conversation_history)
        except FileNotFoundError:
            return "Die Datei wurde nicht gefunden."
        except AttributeError:
            return "Die Funktion wurde nicht gefunden."

    def save_conversation(self, filename):
        with open(filename, 'w') as file:
            for convo in self.conversation_history:
                file.write(f"Eingabe: {convo['input']}\n")
                file.write(f"Antwort: {convo['output']}\n")
                file.write("\n")

    def load_topics(self, filename):
        known_topics = set()
        try:
            with open(filename, 'r') as file:
                for line in file:
                    known_topics.add(line.strip().lower())
        except FileNotFoundError:
            print("Datei nicht gefunden. Neue Datei wird erstellt.")
            open(filename, 'w').close()
        return known_topics

    def load_conversation_log(self, filename):
        try:
            with open(filename, 'r') as file:
                for line in file:
                    if line.startswith("Eingabe:"):
                        input_text = line[len("Eingabe:"):].strip()
                        output_text = file.readline()[len("Antwort:"):].strip()
                        self.conversation_history.append({"input": input_text, "output": output_text})
        except FileNotFoundError:
            print("Konversationsprotokoll nicht gefunden.")

# Beispielnutzung
neuro_sama = NeuroSama()

while True:
    user_input = input("Du: ")

    if user_input.lower() == 'exit':
        neuro_sama.save_conversation("conversation_log.txt")
        break

    response = neuro_sama.respond(user_input)
    print("Neuro-Sama:", response)

generate_response.py:

def generate_response(topic, conversation_history):
    if len(conversation_history) > 0:
        last_input = conversation_history[-1]['input'].lower()
        if 'hallo' in last_input:
            return "Hallo zurück!"
        elif any(variant in last_input for variant in ['gut', 'gutes', 'gutem', 'guter']):
            return "Es ist großartig zu hören, dass es dir gut geht!"
        else:
            return "Das ist interessant!"
    else:
        return "Ich bin mir nicht sicher, wie ich darauf reagieren soll."

Hier sind die Antworten, die ich derzeit bekommen habe:

= RESTART: C:\Users\####\Desktop\####\main.py
Du: hallo
Neuro-Sama: Hallo zurück!
Du: Hallo
Neuro-Sama: Hallo zurück!
Du: gut
Neuro-Sama: Nein, was ist gut?
Du: 
= RESTART: C:\Users\####\Desktop\####\main.py
Du: gut
Neuro-Sama: Nein, was ist gut?
Du: Gut
Neuro-Sama: Nein, was ist gut?
Du: 
Bot, Programmiersprache, ChatGPT
Virus auf dem Rechner im Studentenwohnheim?

Guten Tag,

Ich wohne in einer WG in einem Studentenwohnheim und wurde gerade angerufen, dass bei mir ein Virus bzw. ein Bot auf dem Rechner am 19.11 gefunden wurde der anscheinend irgendwie versucht auf die Server meiner Universität zuzugreifen, da diese mit dem Internet aus unserem Wohnheim gekoppelt sind. Sie haben mir gedroht, wenn ich das Problem nicht löse wird mir das Internet abgestellt, da diese Angriffe von meiner IP-Adresse kommen.

Ich habe eigentlich seit dem 20.11 nur Arbeitsrelevante Daten (die von meiner Uni kommen) gedownloadet, allerdings habe ich festgestellt, dass seit 23:00 Uhr am 20.11 eine weiße Datei, die mit zufälligen Buchstaben und Zahlen benannt ist, in meinem Ordner ist, welche ich nicht zuordnen konnte. Diese habe ich umgehend natürlich gelöscht.

Ich habe außerdem Windows Defender durchlaufen, der jedoch nichts gefunden hat und mir wurde in einer Email das Programm Malwarebytes empfohlen, welches ich gerade durchlaufen lassen habe und mir tatsächlich auch 4 oder 5 Dateien gelöscht hat.

Ich weiß jetzt nicht, ob das die Dateien waren oder nicht. Kann mir jemand noch Tipps geben, der Ahnung von der Materie hat, was ich noch tun kann?

In den Emails steht folgendes:

IP-Adresse      Ereignistyp                 Anzahl Zuletzt gesehen

----------------------------------------------------------------------------------

xxx.x.xxx.xxx   Bot                         3      2023-11-19 22:01:39+00:00

 

Beschreibung: Auf dem System scheint eine Bot-Software betrieben zu

             werden, die versucht, einen Command-and-Control (C2)-Server

             zu erreichen. Zu den unterschiedlichen Malwaretypen finden

             Sie im folgenden Dokument mehr Informationen (aktuell nur

             als PDF verfügbar):

und heute:

Hallo,

 

wir haben schon wieder eine Warnung:

 

IP-Adresse      Ereignistyp                 Anzahl Zuletzt gesehen

----------------------------------------------------------------------------------

xxx.x.xxx.xxx   Bot                         4      2023-11-21 21:05:30+00:00

         

Computer, Virus, Netzwerk, IT, Bot, cmd, Hacker, Informatik, IP-Adresse, Malware, Universität, Wohnheim, Cyberangriff

Meistgelesene Beiträge zum Thema Bot