reflectionircd/README.md

97 lines
6.7 KiB
Markdown
Raw Normal View History

# ReflectionIRCd
2022-02-01 16:32:29 -05:00
ReflectionIRCd is an IRCd that bridges Matrix, allowing you to use an IRC client to chat on Matrix.
2022-02-02 18:03:22 -05:00
This is still in beta. There's `console.log`s all over the place, an inadequate amount of testing and error/bounds checking, several bugs, etc.
2022-02-01 16:32:29 -05:00
2022-02-02 18:03:22 -05:00
That said, it is usable for basic chatting; if you use a good IRC client, you won't have many problems. See the support matrix (pun intended) below for what it can do. The issue tracker is here: https://todo.sr.ht/~emerson/reflectionircd
## Highlights
- IRC first: The goal is for modern IRC clients to have feature parity with any other Matrix client
- Standalone: Uses the Client-Server API, so you can use it with any homeserver
- Built-in bouncer: Multiple IRC clients can be authenticated to a Matrix user
2021-12-07 08:12:44 -05:00
- Multi-user: Log in to multiple Matrix users at the same time
2022-02-02 18:03:22 -05:00
## Known major issues
- Encrypted channels don't work. You'll join the channel but won't be able to read any messages
- Homeservers must be available over HTTPS with a valid SSL cert.
- You can't PM individual users.
2022-02-02 14:01:02 -05:00
## Notes for IRC users
There's a few things "different" from a standard IRC network:
- You can't PM users like normal. Direct messages are notated by the `&` channel prefix. Once joining channels is implemented, you can join the `&` channel and it will auto-invite the user.
- In order to highlight users, you need to prefix their nick with an `@`, so `@emerson: hi`. Reflection automatically expands this to the user's MXID, so even though it's annoying, it's needed to stop inadvertent highlights for now.
2022-02-02 18:03:22 -05:00
- Only necessary IRC commands are implemented, it's not a full-featured IRC server.
## Running
Copy `config.example.json` to `config.json`, edit the values if needed, then `npm run build` and then `node reflection.js` to start it
## Authentication
Authentication is done via `SASL PLAIN`, the username is your mxid and the password is an access token from another session plus your server domain, separated by a `:` (so `access_token:matrix.org` if your server is matrix.org). Note this is the domain for `m.server`, not necessarily the homeserver domain. You can find this value by going to https://yourhomeserver.tld/.well-known/matrix/server. If your server is using port 443, you don't need to include the port.
## Support
The main chat is `#reflectionircd` on Libera ([webchat](https://web.libera.chat/gamja/?channel=#reflectionircd)), which is available on Matrix as well at [`#reflectionircd:matrix.org`](https://matrix.to/#/#reflectionircd:matrix.org)
2022-02-02 14:01:02 -05:00
2022-02-01 16:32:29 -05:00
## FAQs
### Who is this for?
It's for people who want to use their IRC client to chat on Matrix. It's like Bitlbee or Matterbridge, but focused specifically on IRC <-> Matrix, as well as being a reference client for IRCv3 specifications.
It's not meant for community use; if you are a homeserver admin and want to allow your users to use IRC, you would be better off with [heisenbridge](https://github.com/hifi/heisenbridge).
### Why are there different channel prefixes?
Because matrix room names are often long and have characters that IRC channel names can't use, Reflection has to attempt to find a suitable IRC equivalent
`#` channels are channels that have a canonical alias for us to use.
`&` channels are two-person channels (either DMs or normal channels).
`!` channels are the room IDs of channels whose names can't be converted into IRC-friendly names.
Note that there are no PMs, because Matrix doesn't differentiate between DMs and normal two-person channels, any channel with two people in it gets marked as a `&` channel.
## Feature support
2022-01-24 10:23:06 -05:00
✅ - Implemented
🟨 - Partially implemented, see notes
❌ - Not implemented yet
<small>(IRCv3)</small> denotes IRC features that might not be available in all clients
| Name | M->I | I->M | Notes |
| ---- | :--: | :--: | ----- |
2022-02-02 14:01:02 -05:00
| text, notice, emote messages | ✅ | ✅ ||
2022-02-01 16:32:29 -05:00
| image, file, audio, video messages | 🟨 | ❌ | Show up as links on IRC |
2022-02-02 12:00:51 -05:00
| Channel joins | ✅ | ❌ | [#1](https://todo.sr.ht/~emerson/reflectionircd/1) |
2022-01-24 10:23:06 -05:00
| Channel parts | ✅ | ✅ ||
| Channel kicks | ✅ | ✅ ||
2022-02-02 12:00:51 -05:00
| Channel bans | 🟨 | ❌ | [#24](https://todo.sr.ht/~emerson/reflectionircd/24) Single-user bans show up on IRC as kicks, there's no banlist yet |
2022-01-24 10:23:06 -05:00
| Channel invites | ✅ | ✅ ||
| Channel topics | ✅ | ✅ ||
2022-02-02 12:00:51 -05:00
| Channel powers | ✅ | ❌ | [#6](https://todo.sr.ht/~emerson/reflectionircd/6) |
| Channel lists/searching | ❌ | ❌ | [#30](https://todo.sr.ht/~emerson/reflectionircd/30) |
| Encrypted rooms | ❌ | ❌ | [#20](https://todo.sr.ht/~emerson/reflectionircd/20) |
| Rich text | ❌ | ❌ | [#31](https://todo.sr.ht/~emerson/reflectionircd/31) |
| Presence | ❌ | ❌ | [#25](https://todo.sr.ht/~emerson/reflectionircd/25) Note that not all homeservers have presence enabled |
2022-02-02 12:51:34 -05:00
| Channel renaming <small>(IRCv3)</small> | ✅ | ❌ | [#16](https://todo.sr.ht/~emerson/reflectionircd/16) |
2022-01-24 10:23:06 -05:00
| Message replies <small>(IRCv3)</small> | ✅ | ✅ | Clients without support will still receive the reply message, but it won't be marked as a reply |
2022-02-02 12:00:51 -05:00
| Message reactions <small>(IRCv3)</small> | ✅ | ✅ | Can't undo reactions yet |
2022-01-24 10:23:06 -05:00
| Extended invites <small>(IRCv3)</small> | ✅ | ✅ ||
2022-02-02 12:00:51 -05:00
| Typing notifications <small>(IRCv3)</small> | ❌ | ❌ | [#26](https://todo.sr.ht/~emerson/reflectionircd/26) |
| Chat history <small>(IRCv3)</small> | ❌ | ❌ | [#9](https://todo.sr.ht/~emerson/reflectionircd/9) |
| Multiline messages <small>(IRCv3)</small> | ❌ | ❌ | [#10](https://todo.sr.ht/~emerson/reflectionircd/10) |
| Global display names <small>(IRCv3)</small> | ❌ | ❌ | [#11](https://todo.sr.ht/~emerson/reflectionircd/11) |
| Per-room display names <small>(IRCv3)</small> | ❌ | ❌ | [#13](https://todo.sr.ht/~emerson/reflectionircd/13) |
| Message editing <small>(IRCv3)</small> | ❌ | ❌ | [#14](https://todo.sr.ht/~emerson/reflectionircd/14) |
| Message deletion/redaction <small>(IRCv3)</small> | ❌ | ❌ | [#14](https://todo.sr.ht/~emerson/reflectionircd/14) |
2021-12-07 08:12:44 -05:00
## Running
Copy `config.example.json` to `config.json`, edit the values if needed, then `npm run build` and then `node reflection.js` to start it
## Authentication
2022-02-02 18:03:22 -05:00
Authentication is done via `SASL PLAIN`, the username is your mxid and the password is an access token from another session plus your server domain, separated by a `:` (so `access_token:matrix.org` if your server is matrix.org). Note this is the domain for `m.server`, not necessarily the homeserver domain. You can find this value by going to https://yourhomeserver.tld/.well-known/matrix/server.
2022-02-01 16:32:29 -05:00
## Support
The main chat is `#reflectionircd` on Libera ([webchat](https://web.libera.chat/gamja/?channel=#reflectionircd)), which is available on Matrix as well at [`#reflectionircd:matrix.org`](https://matrix.to/#/#reflectionircd:matrix.org)