Messages are being kept as they are received from the /sync API. Delete them when the list of messages in the room gets too big.
Except for the case where the user doesn't have the room scrolled to the bottom, in that case, stop storing new messages and query them (through /messages) when the user scrolls down.
Implement emacs-like shortcuts in the readline
Add readline history per room
Add a readline mode to send messages consisting of multiple lines
Add hooks for new messages, new highlighted messages (play a sound, send a desktop notification...)
Allow all colors of the UI to be configured through a file (and maybe through commands too)
Show new messages since last connection after starting the client.
Store last seen message of every room persistently.
Implement thread-safe room and users operations in the UI.
Implement a way to represent media (images, videos, audios). Maybe spawn a program to present the file?