Global Chat
- 8 Devlogs
- 10 Total hours
Global chat available to everyone. Chat with anyone on Earth and exchange messages using Terminal/CMD now!
Global chat available to everyone. Chat with anyone on Earth and exchange messages using Terminal/CMD now!
Day 5
Today I finished preparing the project files, including the README.md and Dockerfile, and fixed all the bugs I was aware of.
I also updated the project page with a new description, a screenshot, and a demo URL.
The list I had in front of me is now completely finished, which means I can finally ship the project.
Of course, after shipping it, I’ll still continue updating the global chat, but before that I need to take a short break.
See you in my other projects — or in this one again sometime in the near future!!!
Day 4
Today I worked on adding chat history (when someone joins, the last 10 messages are displayed), as well as notifications for users joining/leaving the chat and error messages.
The biggest issue today was that exit messages were not being displayed. The fix turned out to be quite simple — I was using a double lock, which caused the code to freeze.
My plans for tomorrow are to check if everything works as intended, update the README file, update the Docker files, look into py2exe, and upload everything to GitHub and ship the project!!!
Yes, we are finally getting to my first ship, but don’t worry, updates will still continue after that.
See you tomorrow!!!
Day 3
Today I added the ability to execute commands directly from the server, such as ban and kick, giving the server moderation control over the chat.
I also fixed an issue where receiving a message while typing would interrupt the input. After searching the entire internet, I finally found the holy grail: prompt_toolkit. Because of that, I can put GUI development on hold for now.
The biggest challenge today was figuring out why I was getting a CMD-related error when starting the server with prompt_toolkit. It turns out that prompt_toolkit doesn’t work properly with PyCharm’s default console, so I had to enable the “Emulate terminal in output console” option.
My plans for tomorrow are:
Finish the command system (if I can think of any more useful commands).
Take a look at py2exe so I can generate an .exe file from the Python client.
Try to fix a bug where the client doesn’t properly stop after being banned, kicked, or disconnected.
See you tomorrow!!!
Day 2*
Today, I added nickname checking to the server to make sure that no two users can join the chat with the same nickname. I also implemented a message cooldown to help protect against spammers.
I also tried experimenting with the GUI a little, but it’s not the right time yet — the to-do list I have in front of me is still huge.
The problem of the day was that I hadn’t worked with Python dictionaries before, so I had to quickly learn how to use them xd.
My plans for tomorrow are to add a banning system as a command that can be executed directly from the server, along with other custom commands that the server will be able to perform.
I’m shutting down the VPS server until I ship the project.
See you tomorrow!!!
Day 1 (Part 2)
Before going to sleep (it was already night in Poland), I improved the security a bit and added a system message in chat when someone joins.
I’ll try to dedicate a full day soon to security, so it’s not easy to create malicious clients.
See you tomorrow for real!!!
Day 1
Today I rewrote the whole code to prepare it for a global chat system. I deployed everything on a VPS, so now by downloading client.py you can already chat with other people, but only through the terminal for now.
I also added client version checking, so if someone is using an outdated version, they won’t be able to connect to the server.
Usernames were also introduced, replacing IDs from the echo server, so now every user can set whatever nickname they want.
The main bug of the day was related to broadcasting messages to all users — sometimes messages were sent only to one person or not sent at all. I fixed it somehow… honestly not even sure how xd.
Tomorrow’s plan is to try implementing a graphical interface so it doesn’t rely on the terminal anymore.
At night (in Poland), I also updated part of the README file.
If you want to test the global chat yourself, you can download the client here:
https://github.com/wuffgame/Global-Chat/blob/main/global-chat/client.py
There are no bans for spam or offensive usernames yet, but I trust you won’t spam the server or use inappropriate nicknames.
See you tomorrow!!!
Day 0 (Part 2)
Today I decided to finish the echo server so that it can support multiple clients (currently up to 5). Each client also gets its own ID to keep the server logs cleaner and easier to read.
I also added a Dockerfile and a docker-compose.yml, so the server can be launched on a VPS without any extra setup or hassle.
As always, a few issues appeared along the way. At first, I’m not even sure what I messed up, but when I deployed the server to my VPS, Docker didn’t expose the container ports correctly, so the client couldn’t connect. After some debugging, I managed to fix it.
Another challenge was handling a dynamic number of client IDs. However, since I’m planning to switch to nicknames instead of IDs later, I decided not to spend too much time on it for now.
Tomorrow’s plan is to finally start Day 1, refactor everything and prepare the project for turning it into a proper global chat system. I also want to start working on a terminal-based global chat version either tomorrow or the day after. I already know some things will be problematic there, but I’ll probably solve them in Day 3 or later when I start working on a full GUI.
For now, I also plan to write a README later today or tomorrow.
See you in the next devlog!!!
P.S. Devlogs might not appear daily until the summer holidays in Poland start.
Day 0
Since yesterday, I decided to start working on a global chat application in Python. Everyone will be able to log in and chat, while I, as the amazing moderation team, will be able to ban people who break the rules.
Yesterday, I spent some time talking with AI and watching videos to understand how sockets and threading work in Python.
Today, since I got back late from a trip, I decided to practice what I learned yesterday instead of rushing into the full project. I built a local echo server that currently supports one client (but I’ll probably add multi-client support tomorrow).
I also added a primitive client verification system, so if a client is not compatible with the server, the connection gets rejected. Right now it works by sending a specific string.
The only issue I had was that after disconnecting the client, the server started infinitely sending “”. Luckily, I quickly realized I could stop it using if not.
See you tomorrow in the next devlog!