So can taking screenshots of messages. If injecting JS can possibly affect the security of your platform then that's a vulnerability you should fix, not send a C&D to some developer about.
Inside of animate() you are calling setTimeout() to automatically call animate repeatedly but this is also calling setTimeout() every time animate runs but setTimeout() should only be run once.
You should be able to take
setTimeout(() => {
animate();
}, 100);
and paste it over animate() on the last lineYou can pretty reasonably use IRC just by writing to a socket - by hand. It's all human readable and understandable. It's incredible. It's what an open protocol should be.
Writing a simple IRC client is a breeze!
I have found Matrix to be easier to interact with. You need a HTTP client instead of netcat but it's super simple to send JSON from a program or terminal.
It's an enclave untouched by much of the current toxicity of social media. It requires you to make friends with others based on your words and not content filtering algorithms. You are exposed to other people with other ideas since it isn't filtered. All with a reasonably high lowest level since the lack of bells and whistles turn a lot of people away from it.
matrix.org/riot.im seems like a more sensible alternative to IRC - but their systems are overloaded and slow - multi second latency is the norm.
I want to like Haskell, I really do, but it's like learning Latin - you'll feel very smart except no one can talk with you except other people that correct your grammar.
Bleh.