diff --git a/actions/actions back up.txt b/actions/actions back up.txt index 4ff195410de4410855b8cc6acf6b73dd5ee74819..35a3b88489a496d5f7d21645fdff5671989c0ce5 100644 --- a/actions/actions back up.txt +++ b/actions/actions back up.txt @@ -352,3 +352,68 @@ class ActionAktuelleKinohits(Action): dispatcher.utter_message(text=message) return [] + + +class ActionEmpfehlungNachGenre(Action): + def name(self): + return "action_empfehlung_nach_genre" + + def run(self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[Text, Any]) -> List[Dict[Text, Any]]: + genre = tracker.get_slot("genre") + if not genre: + dispatcher.utter_message(text="Bitte gib ein Genre an.") + return [] + + genre_mapping = { + "action": 28, + "abenteuer": 12, + "animation": 16, + "komödie": 35, + "krimi": 80, + "dokumentation": 99, + "drama": 18, + "familie": 10751, + "fantasy": 14, + "geschichte": 36, + "horror": 27, + "musik": 10402, + "mystery": 9648, + "liebesfilm": 10749, + "science-fiction": 878, + "tv-film": 10770, + "thriller": 53, + "kriegsfilm": 10752, + "western": 37 + } + + genre_id = genre_mapping.get(genre.lower()) + + if not genre_id: + dispatcher.utter_message(text=f"Das Genre '{genre}' kenne ich leider nicht.") + return [] + + movies = get_movies_or_series_by_genre(genre_id, "movie") + if movies: + message = f"Hier sind einige Filme im Genre {genre}:\n" + for movie in movies[:5]: + message += f"- {movie['title']} (Bewertung: {movie['vote_average']})\n" + else: + message = f"Ich konnte keine Filme im Genre {genre} finden." + + dispatcher.utter_message(text=message) + return [] + + Hilfsfunktion: + def get_movies_or_series_by_genre(genre_id: int, content_type="movie", language="de") -> List[Dict]: + """ + Ruft Inhalte basierend auf einem Genre ab. + + :param genre_id: ID des Genres + :param content_type: "movie" für Filme, "tv" für Serien + :param language: Sprache der Ergebnisse + :return: Liste der Inhalte + """ + endpoint = f"discover/{content_type}" + params = {"language": language, "with_genres": genre_id} + data = fetch_data_from_tmdb(endpoint, params) + return data.get("results", []) if "error" not in data else [] \ No newline at end of file diff --git a/actions/actions.py b/actions/actions.py index 49a66602f39b7421223ba7989383ec0b7df34009..34ef9b9a5711e1a1fa7837e96ad7e216299edf9f 100644 --- a/actions/actions.py +++ b/actions/actions.py @@ -37,17 +37,28 @@ def get_random_movies_or_series(content_type="movie", language="de") -> List[Dic def get_movies_or_series_by_genre(genre_id: int, content_type="movie", language="de") -> List[Dict]: """ - Ruft Inhalte basierend auf einem Genre ab. + Ruft Inhalte (Filme oder Serien) basierend auf einem Genre ab. :param genre_id: ID des Genres :param content_type: "movie" für Filme, "tv" für Serien - :param language: Sprache der Ergebnisse - :return: Liste der Inhalte + :param language: Sprache der Ergebnisse (Standard: "de") + :return: Liste der Inhalte (Titel, Bewertung, etc.) """ + if content_type not in ["movie", "tv"]: + raise ValueError("content_type muss 'movie' oder 'tv' sein.") + endpoint = f"discover/{content_type}" params = {"language": language, "with_genres": genre_id} data = fetch_data_from_tmdb(endpoint, params) - return data.get("results", []) if "error" not in data else [] + + # Verarbeite Ergebnisse + results = data.get("results", []) + for item in results: + title_key = "title" if content_type == "movie" else "name" + print(f"{item.get(title_key, 'Unbekannt')} - Bewertung: {item.get('vote_average', 'Keine Bewertung')}") + + return results if "error" not in data else [] + def get_classic_movies(before_date="1980-01-01", language="de") -> List[Dict]: """ @@ -142,30 +153,56 @@ class ActionEmpfehlungNachGenre(Action): def run(self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[Text, Any]) -> List[Dict[Text, Any]]: genre = tracker.get_slot("genre") + content_type = tracker.get_slot("content_type") # "movie" oder "series" + if not genre: dispatcher.utter_message(text="Bitte gib ein Genre an.") return [] - genre_mapping = {"action": 28, "komödie": 35, "thriller": 53, "drama": 18} + if not content_type: + content_type = "movie" # Standardmäßig Filme + + genre_mapping = { + "action": 28, + "abenteuer": 12, + "animation": 16, + "komödie": 35, + "krimi": 80, + "dokumentation": 99, + "drama": 18, + "familie": 10751, + "fantasy": 14, + "geschichte": 36, + "horror": 27, + "musik": 10402, + "mystery": 9648, + "romantik": 10749, + "science-fiction": 878, + "thriller": 53, + "kriegsfilm": 10752, + "western": 37 + } + genre_id = genre_mapping.get(genre.lower()) if not genre_id: dispatcher.utter_message(text=f"Das Genre '{genre}' kenne ich leider nicht.") return [] - movies = get_movies_or_series_by_genre(genre_id, "movie") - if movies: - message = f"Hier sind einige Filme im Genre {genre}:\n" - for movie in movies[:5]: - message += f"- {movie['title']} (Bewertung: {movie['vote_average']})\n" + items = get_movies_or_series_by_genre(genre_id, content_type) + if items: + message = f"Hier sind einige {content_type}s im Genre {genre}:\n" + for item in items[:5]: + message += f"- {item['title']} (Bewertung: {item['vote_average']})\n" else: - message = f"Ich konnte keine Filme im Genre {genre} finden." + message = f"Ich konnte keine {content_type}s im Genre {genre} finden." dispatcher.utter_message(text=message) return [] + class ActionWasIstBeliebt(Action): def name(self): return "action_was_ist_beliebt" diff --git a/data/nlu/nlu_basics.yml b/data/nlu/nlu_basics.yml index 7da4b3b6965aba1e809ce7c2074b0f4b1711e358..d70e0171e8c17f467f711ef528d0970ce2a3655f 100644 --- a/data/nlu/nlu_basics.yml +++ b/data/nlu/nlu_basics.yml @@ -176,20 +176,10 @@ nlu: - intent: gute_stimmung examples: | - - perfekt - - großartig - - hammer - - mega - - wunderbar - Ich fühle mich sehr gut - Mir gehts es super - ich bin der hammer - ich bin super - - erstaunlich - - extrem gut - - so gut - - zu gut - - unglaublich - Mir geht es gut - Ich fühl mich gut - ich bin glücklich @@ -204,10 +194,8 @@ nlu: - Ich könnte nich glücklicher sein - ich bin so glücklich heute - ich schwebe über den Wolken - - glücklich - Ich fühle mich super - Ich fühle mich klasse - - klasse - Ich fühl mich ganz ok - mir geht es ganz ok diff --git a/data/nlu/nlu_movies.yml b/data/nlu/nlu_movies.yml index 235bcad5a2ab530bbab8409edc7e1e3c31007155..ce017329724a45df43294683d80baf7734fd0b72 100644 --- a/data/nlu/nlu_movies.yml +++ b/data/nlu/nlu_movies.yml @@ -59,3 +59,11 @@ nlu: - Welche [Musicals](genre) kannst du mir empfehlen? - Gibt es [Historienfilme](genre), die sehenswert sind? +- intent: frage_nach_aktuellen_kinohits + examples: | + - Was läuft gerade im Kino? + - Gibt es aktuelle Kinohits? + - Was sind die aktuellen Kinohits? + - Welche Filme sind momentan in den Kinos beliebt? + - Zeig mir die besten Filme im Kino. + - Was lohnt sich im Kino anzusehen? \ No newline at end of file diff --git a/data/nlu/nlu_series.yml b/data/nlu/nlu_series.yml index cafe1820737cf97a82f83f973eacc3bc4dbe0fc9..05ac73f7a1eeea780bd8ba780f4f00c892f84345 100644 --- a/data/nlu/nlu_series.yml +++ b/data/nlu/nlu_series.yml @@ -52,15 +52,6 @@ nlu: - Welche Neuerscheinungen kannst du empfehlen? - Zeig mir die neuesten Filme und Serien. -- intent: frage_nach_aktuellen_kinohits - examples: | - - Was läuft gerade im Kino? - - Gibt es aktuelle Kinohits? - - Welche Filme sind momentan in den Kinos beliebt? - - Zeig mir die besten Filme im Kino. - - Was lohnt sich im Kino anzusehen? - - - intent: empfehlung_für_mehrsprachige_inhalte examples: | - Gibt es Filme auf Spanisch? diff --git a/data/rules.yml b/data/rules.yml index 5a1f0d2386f99c60be6fb0c99fbab0ba39c5dfdc..8569d75c6d6bc78ca8c06b03a579b2df60815d94 100644 --- a/data/rules.yml +++ b/data/rules.yml @@ -26,5 +26,107 @@ rules: steps: - intent: frag_nach_genre_film - slot_was_set: - - genre: "Komödie" - - action: action_empfehlung_nach_genre \ No newline at end of file + - content_type: movie + - action: action_empfehlung_nach_genre + +- rule: Empfehle Serien nach Genre + steps: + - intent: frag_nach_genre_serie + - slot_was_set: + - content_type: tv + - action: action_empfehlung_nach_genre + +- rule: Dynamische Serienempfehlung + steps: + - intent: serie_empfehlen + - action: action_serie_empfehlen + +- rule: Seriendetails anzeigen + steps: + - intent: frag_nach_serie_details + - action: action_serie_details + +- rule: Dynamische Filmempfehlung + steps: + - intent: film_empfehlen + - action: action_film_empfehlen + +- rule: Seriendetails anzeigen + steps: + - intent: frag_nach_serie_details + - action: action_serie_details + +- rule: Filmempfehlung nach Streamingdienst + steps: + - intent: frag_nach_streamingdienst + - action: action_empfehlung_nach_streamingdienst + +- rule: Aktuelle Kinohits anzeigen + steps: + - intent: frag_nach_aktuellen_kinohits + - action: action_aktuelle_kinohits + +- rule: Feedback hinterlassen wollen + steps: + - intent: feedback + - action: utter_feedback + +- rule: Bewertung hinterlassen + steps: + - intent: bewertung_hinterlassen + - action: utter_bewertung_hinterlassen + +- rule: FAQ + steps: + - intent: faq + - action: utter_faq + +- rule: Fehler melden + steps: + - intent: fehler_melden + - action: utter_fehler_melden + +- rule: Was bist du? + steps: + - intent: was_bist_du + - action: utter_was_bist_du + +- rule: Lob annehmen + steps: + - intent: lob + - action: utter_lob + +- rule: Kritik annehmen + steps: + - intent: kritik + - action: utter_kritik + +- rule: Zustimmung + steps: + - intent: zustimmung + - action: utter_zustimmung + +- rule: Ablehnung + steps: + - intent: ablehnung + - action: utter_ablehnung + +- rule: Frage nach Fähigkeiten + steps: + - intent: frag_nach_fähigkeiten + - action: utter_frag_nach_fähigkeiten + +- rule: Frage nach Zweck + steps: + - intent: frag_nach_zweck + - action: utter_frag_nach_zweck + +- rule: Neuveröffentlichungen vorschlagen + steps: + - intent: neuveröffentlichungen_empfehlen + - action: utter_neuveröffentlichungen_empfehlen + +- rule: Danke und bitte + steps: + - intent: dankeschön + - intent: utter_bitte \ No newline at end of file diff --git a/data/stories.yml b/data/stories.yml index 5104441d065537914c5992cce684d335aeba2798..ee98a7d13b5834e654feaf040be0738ba5888d38 100644 --- a/data/stories.yml +++ b/data/stories.yml @@ -3,42 +3,37 @@ version: "3.1" stories: #Basics -- story: Lob annehmen - steps: - - intent: lob - - action: utter_lob - -- story: Kritik annehmen +- story: Frage nach Name und Entstehung steps: - - intent: kritik - - action: utter_kritik + - intent: frag_nach_name + - action: utter_frag_nach_name + - intent: frag_nach_entstehung + - action: utter_frag_nach_entstehung -- story: Zustimmung +- story: Frag nach Entstehung steps: + - intent: frag_nach_entstehung + - action: utter_frag_nach_entstehung + - intent: frag_nach_zweck + - action: utter_frag_nach_zweck - intent: zustimmung - action: utter_zustimmung -- story: Ablehnung - steps: - - intent: ablehnung - - action: utter_ablehnung - -- story: Frage nach Fähigkeiten - steps: - - intent: frag_nach_fähigkeiten - - action: utter_frag_nach_fähigkeiten - -- story: Frage nach Zweck +- story: Was bist du steps: - - intent: frag_nach_zweck - - action: utter_frag_nach_zweck + - intent: was_bist_du + - action: utter_was_bist_du + - intent: frag_nach_name + - action: utter_frag_nach_name -- story: Frage nach Name und Entstehung +- story: Frag nach Name steps: - intent: frag_nach_name - action: utter_frag_nach_name - - intent: frag_nach_entstehung - - action: utter_frag_nach_entstehung + - intent: frag_nach_technologie + - action: utter_frag_nach_technologie + - intent: was_kannst_du_noch + - action: utter_was_kannst_du_noch - story: Frage nach Ersteller und Technologie steps: @@ -47,12 +42,52 @@ stories: - intent: frag_nach_technologie - action: utter_frag_nach_technologie +- story: was bist du 3 + steps: + - intent: was_bist_du + - action: utter_was_bist_du + - intent: frag_nach_zweck + - action: utter_frag_nach_zweck + - intent: frag_nach_themengebiet + - action: utter_frag_nach_themengebiet + +- story: Frag nach Empfehlungen + steps: + - intent: begrüßung + - action: utter_begrüßung + - intent: frag_nach_empfehlungen + - action: utter_frag_nach_empfehlungen + +- story: Frag nach Empfehlungen 1 + steps: + - intent: frag_nach_empfehlungen + - action: utter_frag_nach_empfehlungen + - intent: frag_nach_genre_film + - action: action_empfehlung_nach_genre + +- story: Frag nach Empfehlungen 2 + steps: + - intent: frag_nach_empfehlungen + - action: utter_frag_nach_empfehlungen + - intent: frag_nach_genre_serie + - action: action_empfehlung_nach_genre + + +- story: Gute Stimmung + steps: + - intent: begrüßung + - action: utter_begrüßung + - intent: gute_stimmung + - action: utter_gute_stimmung + - story: Gute Stimmung steps: - intent: begrüßung - action: utter_begrüßung - intent: gute_stimmung - action: utter_gute_stimmung + - intent: frag_nach_genre_film + - action: action_empfehlung_nach_genre - story: Schlechte Stimmung steps: @@ -63,20 +98,65 @@ stories: - action: utter_erzähle_einen_witz - story: Dynamische Filmempfehlung + steps: + - intent: begrüßung + - action: utter_begrüßung + - intent: film_empfehlen + - action: action_film_empfehlen + +- story: Dynamische Filmempfehlung 1 steps: - intent: film_empfehlen - action: action_film_empfehlen + - intent: dankeschön + - action: utter_dankeschön + +- story: Dynamische Filmempfehlung 2 + steps: + - intent: film_empfehlen + - action: action_film_empfehlen + - intent: frag_nach_film_details + - action: action_film_details + +- story: Dynamische Filmempfehlung 2 + steps: + - intent: film_empfehlen + - action: action_film_empfehlen + - intent: bewertung_hinterlassen + - action: utter_bewertung_hinterlassen + +- story: Bewertung hinterlassen + steps: + - intent: bewertung_hinterlassen + - action: utter_bewertung_hinterlassen + - intent: zustimmung + - action: utter_zustimmung - story: Filmempfehlung nach Genre steps: - intent: frag_nach_genre_film - entities: - - genre: "Komödie" - slot_was_set: - - genre: "Komödie" + - content_type: movie - action: action_empfehlung_nach_genre + - intent: frag_nach_film_details + - action: action_film_details +- story: Filmdetails + steps: + - intent: frag_nach_film_details + - action: action_film_details + - intent: bewertung_hinterlassen + - action: utter_bewertung_hinterlassen + +- story: Filmdetails 2 + steps: + - intent: frag_nach_film_details + - action: action_film_details + - intent: dankeschön + - action: utter_dankeschön + - intent: lob + - action: utter_lob - story: Empfehlungen nach Genre für Serie steps: @@ -85,6 +165,42 @@ stories: - content_type: tv - action: action_empfehlung_nach_genre +- story: Seriendetails + steps: + - intent: frag_nach_serie_details + - action: action_serie_details + - intent: bewertung_hinterlassen + - action: utter_bewertung_hinterlassen + +- story: Seriendetails 2 + steps: + - intent: frag_nach_serie_details + - action: action_serie_details + - intent: dankeschön + - action: utter_dankeschön + - intent: lob + - action: utter_lob + +- story: Lob annehmen + steps: + - intent: lob + - action: utter_lob + - intent: was_ist_beliebt + - action: action_was ist_beliebt + +- story: Was ist beliebt + steps: + - intent: was_ist_beliebt + - action: action_was_ist_beliebt + - intent: frag_nach_film_details + - action: action_film_details + +- story: Was ist beliebt 2 + steps: + - intent: was_ist_beliebt + - action: action_was_ist_beliebt + - intent: frag_nach_serie_details + - action: action_serie_details - story: Beliebte Inhalte anzeigen steps: @@ -104,56 +220,45 @@ stories: steps: - intent: filmklassiker_empfehlen - action: action_filmklassiker_empfehlen + - intent: bewertung_hinterlassen + - action: utter_bewertung_hinterlassen -- story: Neuveröffentlichungen vorschlagen - steps: - - intent: neuveröffentlichungen_empfehlen - - action: utter_neuveröffentlichungen_empfehlen - -- story: Filmempfehlung nach Streamingdienst +- story: Wetter und Zeit steps: - - intent: frag_nach_streamingdienst - - action: action_empfehlung_nach_streamingdienst + - intent: frag_nach_zeit_und_wetter + - action: utter_frag_nach_zeit_und_wetter + - intent: was_kannst_du_noch + - action: utter_was_kannst_du_noch - story: Filmdetails anzeigen steps: - intent: frag_nach_film_details - - action: action_film_details - -- story: Aktuelle Kinohits anzeigen - steps: - - intent: frag_nach_aktuellen_kinohits - - action: action_aktuelle_kinohits + - action: action_film_details + - intent: frag_nach_streamingdienst + - action: action_frag_nach_streamingdienst -- story: Dynamische Serienempfehlung - steps: - - intent: serie_empfehlen - - action: action_serie_empfehlen +- story: Streamingdienst + steps: + - intent: frag_nach_streamingdienst + - action: frag_nach streamingdienst + - intent: frag_nach_film_details + - action: action_film_details -- story: Seriendetails anzeigen - steps: +- story: Streamingdienst 2 + steps: + - intent: frag_nach_streamingdienst + - action: frag_nach streamingdienst - intent: frag_nach_serie_details - action: action_serie_details + -- story: Bewertung hinterlassen - steps: - - intent: bewertung_hinterlassen - - action: utter_bewertung_hinterlassen - -- story: FAQ +- story: Hilfe steps: - intent: faq - action: utter_faq - -- story: Fehler melden - steps: - intent: fehler_melden - action: utter_fehler_melden -- story: Was bist du? - steps: - - intent: was_bist_du - - action: utter_was_bist_du - story: Wie geht es dir? 1 steps: @@ -171,26 +276,20 @@ stories: - intent: erzähle_einen_witz - action: utter_erzähle_einen_witz -- story: Witz erzählen - steps: - - intent: erzähle_einen_witz - - action: utter_erzähle_einen_witz - - story: Nach Hilfe fragen steps: - intent: frag_nach_hilfe - action: utter_frag_nach_hilfe + - intent: frag_nach_support + - action: utter_frag_nach_support -- story: Feedback hinterlassen wollen - steps: - - intent: feedback - - action: utter_feedback - story: Empfehlungen geben steps: - intent: frag_nach_empfehlungen - action: utter_frag_nach_empfehlungen - intent: frag_nach_genre_film + - action: action_empfehlung_nach_genre - intent: frag_nach_genre_serie - action: action_empfehlung_nach_genre @@ -198,13 +297,12 @@ stories: steps: - intent: was_kannst_du_noch - action: utter_was_kannst_du_noch + - intent: zustimmung + - action: utter_zustimmung - story: Themengebiet abfragen steps: - intent: frag_nach_themengebiet - action: utter_frag_nach_themengebiet - -- story: Danke und Bitte sagen - steps: - - intent: dankeschön - - action: utter_bitte \ No newline at end of file + - intent: zustimmung + - action: utter_zustimmung diff --git a/domain.yml b/domain.yml index efd8138ae0003133dfbc10ebd0e6051018e6f10d..f3a332bc3a95878efdf5fe7bdbcf22f2d75a402a 100644 --- a/domain.yml +++ b/domain.yml @@ -39,7 +39,7 @@ intents: - bewertung_hinterlassen - filmklassiker_empfehlen - neuveröffentlichungen_empfehlen - - frag_nach_aktuellen_kinohits + - frage_nach_aktuellen_kinohits - empfehlung_für_mehrsprachige_inhalte - nlu_fallback @@ -175,11 +175,6 @@ responses: - text: "Meine Themen sind Filmklassiker, Neuerscheinungen, Serienhits und vieles mehr." - text: "Frag mich nach deinem Lieblingsgenre oder einer Plattform wie Netflix." - utter_film_empfehlen: - - text: "Wie wäre es mit dem Film 'Inception'? Ein spannender Science-Fiction-Thriller!" - - text: "Ich empfehle dir 'Parasite'. Ein preisgekrönter Mix aus Drama und Thriller." - - text: "Probier doch 'The Dark Knight' aus. Ein großartiger Actionfilm mit Batman." - utter_serie_empfehlen: - text: "Die Serie 'Breaking Bad' könnte dir gefallen. Spannend und tiefgründig." - text: "Ich empfehle 'Stranger Things'. Mystery und 80er-Nostalgie in einem." @@ -200,11 +195,6 @@ responses: - text: "Hauptdarsteller von 'Breaking Bad' sind Bryan Cranston und Aaron Paul." - text: "Die Serie hat eine Bewertung von 9,5 auf IMDb." - utter_was_ist_beliebt: - - text: "Aktuell sind 'Wednesday' und 'House of the Dragon' sehr beliebt." - - text: "Die Leute lieben gerade 'The Last of Us'." - - text: "Beliebt ist aktuell der Film 'Avatar: The Way of Water'." - utter_bewertung_hinterlassen: - text: "Ich danke dir für deine Bewertung! Ich werde sie in meinen nächsten Vorschlägen berücksichtigen." - text: "Danke für das Feedback." @@ -230,7 +220,7 @@ responses: - text: "Für französische Filme empfehle ich 'Amélie'." - text: "Ein sehenswerter deutscher Film ist 'Das Leben der Anderen'." - utter_bitte: + utter_dankeschön: - text: "Gern geschehen! 😊" - text: "Kein Problem, immer gerne! ðŸ‘" - text: "Freut mich, dass ich helfen konnte!"