Okay.
> AES is a symmetric encryption algorithm, and a strange choice for a chat protocol.
No, it's the standard choice.
Signal uses AES-256-CBC + HMAC-SHA-256, for example.
> Furthermore, CBC is not great at hiding patterns, and chat will often have a lot of patterns.
That's not true. CBC mode isn't great at hiding patterns with IV reuse. Solution: Don't reuse IVs.
The problem with CBC mode is that it's unauthenticated, and as a result is often susceptible to padding oracle attacks that allow messages to be decrypted byte-at-a-time.
https://paragonie.com/blog/2015/05/using-encryption-and-auth...
A better mode would be GCM, or maybe GCM-SIV, or scrap AES entirely in favor of ChaCha20-Poly1305.