Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # LaLaLa.py ZZZ
- import random
- import json
- import tkinter as tk
- from tkinter import ttk
- root = tk.Tk()
- root.title("LaLaLa Chatbot")
- root.geometry("1200x600+0+0")
- mode = tk.StringVar(value="autocomplete")
- internet_search_enabled = tk.BooleanVar(value=False)
- knowledge_base = {}
- interactions = []
- common_words = {}
- state_file = "LaLaLa_state.json"
- interactions_file = "interactions.log"
- def toggle_mode():
- mode.set("autocomplete" if mode.get() == "autosuggest" else "autosuggest")
- mode_label.config(text=f"Mode: {mode.get().capitalize()}")
- def toggle_internet_search():
- internet_search_enabled.set(not internet_search_enabled.get())
- internet_search_label.config(text=f"Internet Search: {'Enabled' if internet_search_enabled.get() else 'Disabled'}")
- def send_message():
- user_message = user_input.get()
- if internet_search_enabled.get():
- search_internet_for_python_resources()
- if mode.get() == "autocomplete":
- response = chatbot_autocomplete(user_message)
- chat_display.insert(tk.END, f"LaLaLa: {response}\n")
- else:
- chatbot_autosuggest(user_message)
- chat_display.insert(tk.END, f"You: {user_message}\n")
- user_input.set("")
- def chatbot_autocomplete(message):
- response = "This is LaLaLa's response to: " + message + "\n"
- for key, values in knowledge_base.items():
- response += f"{key}: {random.choice(values)}\n"
- interactions.append(f"User: {message}\nLaLaLa: {response}")
- auto_save_interactions()
- return response.strip()
- def chatbot_autosuggest(message):
- # Provide suggestions based on the knowledge base
- suggestions = []
- for key, values in knowledge_base.items():
- if key in message:
- suggestions.extend(values)
- if not suggestions:
- suggestions.append("### Oops, I don't have the data for that")
- suggestion_popup(suggestions)
- def suggestion_popup(suggestions):
- popup = tk.Toplevel(root)
- popup.title("Suggestions")
- tk.Label(popup, text="Select a suggestion:").pack()
- def select_suggestion(suggestion):
- chat_display.insert(tk.END, f"LaLaLa: {suggestion}\n")
- interactions.append(f"LaLaLa: {suggestion}")
- auto_save_interactions()
- popup.destroy()
- for suggestion in suggestions:
- button = ttk.Button(popup, text=suggestion, command=lambda s=suggestion: select_suggestion(s))
- button.pack(fill=tk.X)
- def learn(input_data):
- for key, value in input_data.items():
- if key not in knowledge_base:
- knowledge_base[key] = []
- knowledge_base[key].append(value)
- auto_save_state()
- print("Learning complete.")
- def save_state(filename=None):
- if not filename:
- filename = state_file
- with open(filename, "w") as file:
- json.dump(knowledge_base, file)
- print(f"State saved to {filename}.")
- def load_state(filename=None):
- if not filename:
- filename = state_file
- try:
- with open(filename, "r") as file:
- global knowledge_base
- knowledge_base = json.load(file)
- print(f"State loaded from {filename}.")
- except FileNotFoundError:
- print(f"File {filename} not found. Starting with an empty knowledge base.")
- def log_interactions(filename=None):
- if not filename:
- filename = interactions_file
- with open(filename, "a") as file:
- for interaction in interactions:
- file.write(interaction + "\n")
- print(f"Interactions logged to {filename}.")
- def auto_save_state():
- save_state()
- def auto_save_interactions():
- log_interactions()
- def access_internet_for_python():
- url = "https://www.learnpython.org/"
- response = requests.get(url)
- soup = BeautifulSoup(response.content, "html.parser")
- tutorials = soup.find_all("div", class_="lesson")
- python_tips = {tutorial.find("h3").text: tutorial.find("p").text for tutorial in tutorials[:5]} # Limit to first 5 tutorials
- learn(python_tips)
- print("Learned Python code from the internet.")
- def search_internet_for_python_resources():
- query = "best ways to learn Python programming"
- url = f"https://www.bing.com/search?q={query}"
- response = requests.get(url)
- soup = BeautifulSoup(response.content, "html.parser")
- links = soup.find_all("a")
- for link in links[:5]: # Limit to first 5 links
- href = link.get("href")
- if href:
- learn({"Python Resource": href})
- print("Learned new Python resources from the internet.")
- def learn_common_words(source_url):
- response = requests.get(source_url)
- data = response.json()
- for word in data["words"]:
- common_words[word["word"]] = word["meaning"]
- learn(common_words)
- print("Learned the meanings of the most common English words.")
- def start_new_chat():
- chat_display.delete('1.0', tk.END)
- interactions.clear()
- chat_frame = ttk.Frame(root)
- chat_frame.pack(fill=tk.BOTH, expand=True)
- vertical_scrollbar = ttk.Scrollbar(chat_frame, orient=tk.VERTICAL)
- vertical_scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
- horizontal_scrollbar = ttk.Scrollbar(chat_frame, orient=tk.HORIZONTAL)
- horizontal_scrollbar.pack(side=tk.BOTTOM, fill=tk.X)
- chat_display = tk.Text(chat_frame, wrap="none", state="normal", height=20, width=100, yscrollcommand=vertical_scrollbar.set, xscrollcommand=horizontal_scrollbar.set)
- chat_display.pack(fill=tk.BOTH, expand=True)
- vertical_scrollbar.config(command=chat_display.yview)
- horizontal_scrollbar.config(command=chat_display.xview)
- user_input = tk.StringVar()
- input_frame = ttk.Frame(root)
- input_field = ttk.Entry(input_frame, textvariable=user_input, width=80)
- input_field.pack(side=tk.LEFT, fill=tk.X, expand=True)
- send_button = ttk.Button(input_frame, text="Send", command=send_message)
- send_button.pack(side=tk.RIGHT)
- input_frame.pack(fill=tk.X)
- button_frame = ttk.Frame(root)
- button_frame.pack(fill=tk.X)
- mode_button = ttk.Button(button_frame, text="Toggle Mode", command=toggle_mode)
- mode_button.pack(side=tk.LEFT, fill=tk.X, expand=True)
- mode_label = tk.Label(button_frame, text=f"Mode: {mode.get().capitalize()}")
- mode_label.pack(side=tk.LEFT, fill=tk.X, expand=True)
- internet_search_button = ttk.Button(button_frame, text="Toggle Internet Search", command=toggle_internet_search)
- internet_search_button.pack(side=tk.LEFT, fill=tk.X, expand=True)
- internet_search_label = tk.Label(button_frame, text=f"Internet Search: {'Enabled' if internet_search_enabled.get() else 'Disabled'}")
- internet_search_label.pack(side=tk.LEFT, fill=tk.X, expand=True)
- load_state()
- root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement