ChatBot-Projekt/Codeerklärung.md
2025-05-07 09:08:09 +02:00

4.0 KiB
Raw Blame History

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.


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.
namespace Chatbot_WPF_Projekt
{
    public partial class MainWindow : Window
  • namespace: Projektname.

  • MainWindow: Hauptfenster des Programms.

  • : Window: Erbt von WPF-Fensterklasse.

private string currentLocation = "";
public MainWindow()
{
    InitializeComponent();
}
  • currentLocation: Speicherort für die aktuelle Stadt.

  • InitializeComponent(): Verbindet XAML und C#-Code.

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.

string userInput = InputTextBox.Text.Trim();

  • Holt Nutzereingabe, entfernt Leerzeichen.
if (string.IsNullOrEmpty(userInput)) ...

  • Wenn Eingabe leer → Hinweis.
ChatOutput.Text += $"Du: {userInput}\n";

  • Gibt Nutzereingabe im Chatverlauf aus.
string botResponse = "";

  • Legt Bot-Antwortvariable an.
botResponse = "Liste aller Befehle: !hilfe, !joke, !standort <stadt>, !zeit, !wetter";

  • Listet alle befehle auf bei schreiben des !hilfe commands
string[] witze = new string[10]; ...
Random zufall = new Random(); ...

  • Zufälliger Witz aus Liste.
string[] parts = userInput.Split(' ', 2);
currentLocation = parts[1];

  • Stadt speichern.
botResponse = $"Aktuelle Uhrzeit in {currentLocation}: {DateTime.Now.ToShortTimeString()}";

  • Gibt lokale Uhrzeit aus
botResponse = await GetWeatherAsync(currentLocation);

  • Ruft Wetterdaten über API ab.
botResponse = "Befehl nicht erkannt.";

  • befehl falsch oder garnicht geschrieben
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.
private void ClearButton_Click(object sender, RoutedEventArgs e)
{
    ChatOutput.Text = string.Empty;
}

  • löscht den verlauf wenn man auf den clearbutton drückt
private void Color_theme_Checked ...
private void Color_theme_Unchecked ...

  • Checked: Dunkler Hintergrund, helle Schrift.

  • Unchecked: Heller Hintergrund, dunkle Schrift.

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.
private async Task<string> GetWeatherAsync(string city)

string url = $"https://api.openweathermap.org/data/2.5/weather?...";

  • URL zusammenbauen:
  • HTTP-Anfrage senden mit HttpClient
double temp = root.GetProperty("main").GetProperty("temp").GetDouble();
string description = root.GetProperty("weather")[0].GetProperty("description").GetString();

  • JSON-Daten parsen:
return $"Aktuelles Wetter in {city}: {temp}°C, {description}";

  • atntwort erzeugen
catch (Exception ex)
{
    return "Fehler beim Abrufen der Wetterdaten.";
}

  • fehler behandlung