Skip to content
Permalink
main
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time
import tkinter as tk
from tkinter import simpledialog
from tkinter.scrolledtext import ScrolledText
import paho.mqtt.client as mqtt
import json
from datetime import datetime
# Configuration for connecting to an MQTT broker
MQTT_BROKER = "broker.hivemq.com"
MQTT_PORT = 1883
MQTT_TOPIC = "social_platform/group_chat"
# User credentials for demonstration purposes
user_auth = {
"Gopi": "gopiPass123",
"Leo": "leoSecure456",
"Daniel": "danielSafe789",
"Gurchandan": "gurchandanKey012",
"Jaskaran": "jaskaranLock345",
"Justice": "justiceGate678"
}
# Validates user login
def user_login():
global username
username = simpledialog.askstring("Login", "Username:")
passcode = simpledialog.askstring("Password", "Password:", show='*')
if username in user_auth and user_auth[username] == passcode:
print("Access Granted.")
return True
else:
print("Access Denied.")
return False
# Initializing MQTT client and callback functions setup
client = mqtt.Client()
# Establishing connection with the MQTT broker
try:
client.connect(MQTT_BROKER, MQTT_PORT, 60)
except Exception as err:
print(f"Could not connect to broker: {err}")
exit()
client.loop_start()
# Sends user messages to the chat
def publish_message():
content = message_entry.get()
if content.strip():
data = json.dumps({"user": username, "content": content})
try:
client.publish(MQTT_TOPIC, data)
moment = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
chat_window.configure(state='normal')
chat_window.insert(tk.END, f"[{moment}] {username}: {content}\n")
chat_window.configure(state='disabled')
message_entry.delete(0, tk.END)
except Exception as err:
print(f"Message sending failed: {err}")
# Adds participants to the chat
def include_user():
popup = tk.Toplevel(root)
popup.title("Join Chat")
def join_chat(user_name):
global username
username = user_name
chat_window.configure(state='normal')
chat_window.insert(tk.END, f"{username} entered the chat.\n")
chat_window.configure(state='disabled')
for user in user_auth.keys():
btn = tk.Button(popup, text=user, command=lambda user=user: join_chat(user))
btn.pack()
# Setting up the main window
root = tk.Tk()
root.withdraw() # Main window is hidden initially
if user_login():
root.deiconify() # Main window shown after successful login
root.title("Group Chat")
chat_window = ScrolledText(root, state='disabled', height=20, width=60)
chat_window.grid(row=0, column=0, padx=10, pady=10, columnspan=3)
chat_window.configure(font='TkFixedFont')
message_entry = tk.Entry(root, width=40)
message_entry.grid(row=1, column=0, padx=10, pady=10)
send_btn = tk.Button(root, text="Send", command=publish_message)
send_btn.grid(row=1, column=1, padx=5, pady=10)
add_user_btn = tk.Button(root, text="Add User", command=include_user)
add_user_btn.grid(row=1, column=2, padx=5, pady=10)
root.mainloop()
else:
print("Failed to authenticate user.")
root.destroy()