Look into Matrix, with Element as the mainstream client. The client is exceedingly heavy, being an Electron/Node abomination, but it's self hosted, supports a range of devices, supports bridges to other protocols if you care, and is self hosted. In a normal configuration, it's federated so that your homeserver can talk to other domains, but you can also run it in a standalone mode without federation, if you just want it for private communication on your domain from people with accounts.
The problem I have with Slack, Discord, and most of the other clients is that you're not hosting them yourself. Yes, it's easier, there are free tiers, reliability is someone else's problem, but the flip side is that your data is (in the case of Slack) held hostage to you paying someone else, and Discord seems awfully eager to ban anyone who leads to bad press for them. A self hosted Matrix instance has none of these problems.
Of course, you have to be able to host software to do that, but the tradeoffs, IMO, are well worth it.