## MainWindow.xaml.cs – Erklärung Zeile für Zeile using-Anweisungen: Diese laden verschiedene Bibliotheken, die für die Funktionen des Programms benötigt werden – z. B. für GUI (WPF), Netzwerk, JSON-Verarbeitung, Textverarbeitung, usw. ```csharp System.Text – Für z. B. StringBuilder oder Kodierungen. System.Windows.* – Alles was WPF betrifft: Fenster, Controls, Styles etc. System.Net.Http – Für HTTP-Anfragen, hier verwendet für Wetter-API. System.Text.Json – Zum Lesen/Verarbeiten von JSON-Daten. System.Threading.Tasks – Für async/await, also asynchrone Methoden. System.IO – Für Dateioperationen wie Speichern des Chatverlaufs. ``` ```csharp namespace Chatbot_WPF_Projekt { public partial class MainWindow : Window ``` - namespace: Projektname. - MainWindow: Hauptfenster des Programms. - : Window: Erbt von WPF-Fensterklasse. ```csharp private string currentLocation = ""; public MainWindow() { InitializeComponent(); } ``` - currentLocation: Speicherort für die aktuelle Stadt. - InitializeComponent(): Verbindet XAML und C#-Code. ```csharp private async void SendButton_Click(object sender, RoutedEventArgs e) ``` - private → Die Methode gehört nur zu dieser Klasse, andere Klassen sehen sie nicht. - async → Die Methode kann auf Dinge warten, wie z. B. eine Antwort vom Wetterdienst. - void → Die Methode gibt nichts zurück. - SendButton_Click → So heißt die Methode, typisch für Button-Klicks. - (object sender, RoutedEventArgs e) → Das sind Infos über das Klick-Ereignis. Wird von WPF automatisch mitgegeben. ```csharp string userInput = InputTextBox.Text.Trim(); ``` - Holt Nutzereingabe, entfernt Leerzeichen. ```csharp if (string.IsNullOrEmpty(userInput)) ... ``` - Wenn Eingabe leer → Hinweis. ```csharp ChatOutput.Text += $"Du: {userInput}\n"; ``` - Gibt Nutzereingabe im Chatverlauf aus. ```csharp string botResponse = ""; ``` - Legt Bot-Antwortvariable an. ```csharp botResponse = "Liste aller Befehle: !hilfe, !joke, !standort , !zeit, !wetter"; ``` - Listet alle befehle auf bei schreiben des !hilfe commands ```csharp string[] witze = new string[10]; ... Random zufall = new Random(); ... ``` - Zufälliger Witz aus Liste. ```csharp string[] parts = userInput.Split(' ', 2); currentLocation = parts[1]; ``` - Stadt speichern. ```csharp botResponse = $"Aktuelle Uhrzeit in {currentLocation}: {DateTime.Now.ToShortTimeString()}"; ``` - Gibt lokale Uhrzeit aus ```csharp botResponse = await GetWeatherAsync(currentLocation); ``` - Ruft Wetterdaten über API ab. ```csharp botResponse = "Befehl nicht erkannt."; ``` - befehl falsch oder garnicht geschrieben ```csharp private void InputTextBox_KeyDown(object sender, KeyEventArgs e) { if (e.Key == Key.Enter) SendButton_Click(sender, e); } ``` - Drücken von Enter löst SendButton aus. ```csharp private void ClearButton_Click(object sender, RoutedEventArgs e) { ChatOutput.Text = string.Empty; } ``` - löscht den verlauf wenn man auf den clearbutton drückt ```csharp private void Color_theme_Checked ... private void Color_theme_Unchecked ... ``` - Checked: Dunkler Hintergrund, helle Schrift. - Unchecked: Heller Hintergrund, dunkle Schrift. ```csharp private void SaveButton_Click(object sender, RoutedEventArgs e) { string fileName = $"Chat_{DateTime.Now:yyyy-MM-dd_HHmm}.txt"; ... } ``` - Speichert Chat als .txt mit Datum/Uhrzeit im Namen. ```csharp private async Task GetWeatherAsync(string city) string url = $"https://api.openweathermap.org/data/2.5/weather?..."; ``` - URL zusammenbauen: - HTTP-Anfrage senden mit HttpClient ```csharp double temp = root.GetProperty("main").GetProperty("temp").GetDouble(); string description = root.GetProperty("weather")[0].GetProperty("description").GetString(); ``` - JSON-Daten parsen: ```csharp return $"Aktuelles Wetter in {city}: {temp}°C, {description}"; ``` - atntwort erzeugen ```csharp catch (Exception ex) { return "Fehler beim Abrufen der Wetterdaten."; } ``` - fehler behandlung