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

186 lines
4.0 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 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 <stadt>, !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<string> 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