-
Notifications
You must be signed in to change notification settings - Fork 80
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Initial bouncer implementation draft spec #449
Conversation
As I understand this spec, it is in fact for conventional bouncers, and therefore Oragono won't implement it. Specifically, in Oragono there's no concept of active buffers that can be added or removed, or of multiple networks. (See #444 for a case where the "buffer" concept has to be adjusted to fit the Oragono setting.) So, if my understanding is accurate, I have no objection to this spec using the term "BOUNCER". My concern is more that we carefully factor out whatever is shared between the two models. (It sounds like this spec defers all history retrieval to |
pounce said they won't be implementing this spec, because pounce doesn't expose multiple networks this way and manages buffers differently. This PR is missing a lot of improvements from https://git.sr.ht/~emersion/soju/tree/master/item/doc/ext/bouncer-networks.md (standard replies, batches, more idiomatic names/style, etc). |
|
||
|
||
### Connecting a network | ||
Syntax: `[c] BOUNCER connect <netid>` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This should just be a enabled
network attribute.
|
||
This feature is intended to provide an API for clients to build a UI around bouncer IRC servers, to manage the users IRC networks and buffers in a user friendly way and to keep multiple clients and devices synced together. | ||
|
||
It is based around network and buffer entities which both have key/value tags, such as `joined=true` for a buffer, with commands to manage these. A list of common tags can be found under the tags section of this document. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
s/tags/attributes/
As discussed previously, "tags" is confusing.
|
||
## Capabilities | ||
|
||
This adds a capability called `BOUNCER`. Once negotiated the server may change it's behaviour to better suit bouncer clients, such as not automatically sending `JOIN` commands for already joined channels. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Caps are lowercase. Additionally, this is missing the "work in progress" section about using the draft/
-prefixed cap.
|
||
#### Network tags | ||
Implementations MUST recognise the following: | ||
- `network` - The human readable name for the network. It may be changed. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This reads as "the network attribute of the network". Something like "name" would be better.
As a network state changes on the server such as connecting or disconnection, it MUST send the changes as they happen to any users connected clients. | ||
|
||
* Connection state changes: | ||
- `[s] BOUNCER state netid netname connecting` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This isn't great IMHO, as it's only useful for network state. Would be better to allow the bouncer to notify updates of arbitrary network/buffer attribute changes.
Implementations MUST recognise the following: | ||
- `network` - The name of the network this buffer belongs to. | ||
- `buffer` - The name of this buffer. | ||
- `seen` - The ISO 8601 timestamp of when the user last saw this buffer. Used to determine the point at which the user as read up to. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This should be out-of-scope for the bouncer extension. Servers not implementing this spec (soju, pounce, oragono) may be interested in this functionality.
~~~ | ||
[s] BOUNCER listnetworks netid network=freenode;host=irc.freenode.net;port=6667;state=disconnected;nick=bob; | ||
[s] BOUNCER listnetworks netid network=IRC.com;host=irc.irc.com;port=6697;state=connected;tls=1;nick=bob; | ||
[s] BOUNCER listnetworks RPL_OK |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This seems alien for a modern IRCv3 spec. A batch would be better.
### Listing networks | ||
Syntax: `[c] BOUNCER listnetworks [*]` | ||
|
||
This command MUST return all networks under the users bouncer account. The optional second parameter of `*` is a wildcard search string that filters the returned networks. It is matched against the `network` tag of each network. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't think the wildcard search string adds a lot of value here. What's the use-case? Do you expect the user to have a huge number of networks so that filtering can't be done client-side?
#### Buffer tags | ||
|
||
Implementations MUST recognise the following: | ||
- `network` - The name of the network this buffer belongs to. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This should be a stable netid, not a network name.
Hi pals. I am excited about the potential this opens up. I see inter-network bouncers as a potential future for federation on IRC, where you might dial out from say Libera, and appear on other networks as *![email protected]. (Or *![email protected] if the network is feeling creative enough.) I've been working on a proof-of-concept network, combining soju and InspIRCd in a way that obviates traditional services, and is designed for ad-hoc federation. I don't have strong opinions about the specs, but I respect your efforts and thank you for them. I hope that the differences can be resolved and agreed, so we all can benefit from a single target. Ideally, I would be able to offer Kiwi and Gamja both as a frontend to my network. And to that end I wish you both the best of luck and encouragement in finding something to both your satisfaction :-) |
I don't think this will be progressed, given the OP has quit IRC dev and other interested parties want to take this in a different direction. So I'll close it, @emersion if you want to open a PR for your version, please do. |
A progression from ircv3/ircv3-ideas#39 to have this in spec form and clearer WIP history.
Added since the gist:
Next thoughts: