ergochat / ergo

A modern IRC server (daemon/ircd) written in Go.
https://ergo.chat/
MIT License
2.26k stars 179 forks source link

Sending directly to/from accounts #1671

Open DanielOaks opened 3 years ago

DanielOaks commented 3 years ago

In Ergo, accounts are a first-class feature. But not entirely:

Proposal:

PRIVMSG @accountname :hi there

This message gets sent to all clients that accountname has connected. The @accountname target remains the same, so the receiving client knows that this message is directed at them in this way, rather than at their nickname?

This doesn't conflict with statusmsg because the target with that format is [prefix]#channelname, whereas this is just @accountname, so even if @ is a valid prefix character in channels, servers will be able to differentiate between #channelname and not-a-channelname after that.

Other systems that handle direct account-to-account messaging usually have some settings, for example only allowing users who share a guild/channel/etc with you to message you, only allowing people on your friends list to message you, etc. It probably makes sense for us to have this same kind of flexibility when it comes to this feature. At the least, it makes sense to only allow logged-in people to message accountnames directly.


Features that we'd probably want/need to implement this safely for non-contained communities:

slingamn commented 3 years ago

Some previous discussion: https://github.com/ircv3/ircv3-ideas/issues/34

In a "normal" Ergo deployment, force-nick-equals-account is set and also most clients are always-on (which prevents them from changing nicks even if force-nick-equals-account is disabled). This makes an account target somewhat redundant.

Changing one's nickname for privacy reasons always seemed to me like a hack or an antifeature? Nicknames are the protocol-native identifier that everyone understands --- I'm generally on the side of using nicknames for everything and making them as stable/consistent as possible. (We may not be that far away from mainstream clients that understand METADATA and/or display names.)