瀏覽代碼

Merge pull request #823 from slingamn/changelog.2

branding, manual, and changelog updates for 2.0
tags/v2.0.0-rc1
Shivaram Lingamneni 4 年之前
父節點
當前提交
8ed6634b3f
沒有連結到貢獻者的電子郵件帳戶。
共有 8 個檔案被更改,包括 170 行新增77 行删除
  1. 100
    0
      CHANGELOG.md
  2. 8
    1
      DEVELOPING.md
  3. 6
    11
      README
  4. 18
    17
      README.md
  5. 28
    33
      docs/MANUAL.md
  6. 4
    3
      irc/handlers.go
  7. 2
    10
      irc/server.go
  8. 4
    2
      oragono.yaml

+ 100
- 0
CHANGELOG.md 查看文件

@@ -1,6 +1,106 @@
1 1
 # Changelog
2 2
 All notable changes to Oragono will be documented in this file.
3 3
 
4
+## [2.0.0-rc1] - 2020-03-01
5
+We're pleased to be publishing the release candidate for Oragono 2.0.0 (the official release should follow in a week or two). Version 2.0.0 is a major update with a wide range of enhancements and fixes. Major highlights include:
6
+
7
+* Support for storing chat history in a MySQL backend
8
+* Full "bouncer" functionality, including "always-on" clients that remain present on the server even when disconnected
9
+* LDAP support contributed by [@mattouille](https://github.com/mattouille)
10
+* Support for the ratified [labeled-response](https://ircv3.net/specs/extensions/labeled-response.html) IRCv3 capability
11
+* Enhanced support for Kubernetes
12
+
13
+Many thanks to [@csmith](https://github.com/csmith), [@mattouille](https://github.com/mattouille), and [@xPaw](https://github.com/xPaw) for contributing patches, to [@csmith](https://github.com/csmith) and [@wrmsr](https://github.com/wrmsr) for contributing code reviews, to [@bogdomania](https://github.com/bogdomania), [@brenns10](https://github.com/brenns10), [@daurnimator](https://github.com/daurnimator), [@ekianjo](https://github.com/ekianjo), horseface, [@ivucica](https://github.com/ivucica), [@jesopo](https://github.com/jesopo), [@jwheare](https://github.com/jwheare), KoDi, lover, [@mabgnu](https://github.com/mabgnu), [@poVoq](https://github.com/poVoq), [@TETYYS](https://github.com/TETYYS), and [@zaher](https://github.com/zaher) for reporting issues, and to [@bogdomania](https://github.com/bogdomania) and Nuve for contributing translations.
14
+
15
+This release includes changes to the config file format, including two breaking changes:
16
+
17
+1. Backwards compatibility with the old `server.listen` format for configuring listeners has been removed; you must now use the `server.listeners` format that was introduced in 1.2.0.
18
+2. The two sections `server.connection-limits` and `server.connection-throttling` have been consolidated into one new section, `server.ip-limits`.
19
+
20
+Other changes to the config file format are backwards compatible and do not require updating before restart. To minimize potential downtime, we suggest the following workflow:
21
+
22
+1. Without upgrading your `oragono` binary, edit your config file to add new `server.listeners` and `server.ip-limits` sections, based on the example config file
23
+2. Rehash your server, confirming that the new config file is valid for for the previous version of the server
24
+3. Upgrade your `oragono` binary to the new 2.0.x version and restart your server
25
+4. Once your deployment is stable on 2.0.x, delete the old `server.listen`, `server.connection-limits`, and `server.connection-throttling` sections from your config, and rehash your server to confirm
26
+
27
+This release includes a database change. If you have `datastore.autoupgrade` set to `true` in your configuration, it will be automatically applied when you restart Oragono. Otherwise, you can update the database manually by running `oragono upgradedb` (see the manual for complete instructions).
28
+
29
+### Config Changes
30
+* Desupported `server.listen` in favor of `server.listeners`, a breaking change (#794)
31
+* Desupported `server.connection-limits` and `server.connection-throttling` in favor of `server.ip-limits`, a breaking change (#646)
32
+* The recommended default is now to allow plaintext only on loopback interfaces (#801)
33
+* Added `server.casemapping` option to control which Unicode nicknames and channels are allowed (#693)
34
+* Added `server.lookup-hostnames` and `server.forward-confirm-hostnames` options to control hostname lookup (#688)
35
+* Added new `limits.multiline` section to control the new `draft/multiline` capability
36
+* Added sections for enabling the optional MySQL history storage backend: `datastore.mysql` for connecting to the server and `history.persistent` for controlling which messages are stored
37
+* Added `history.restrictions` for preventing people from retrieving arbitrarily old history messages
38
+* Added `history.znc-maxmessages`, allowing a higher history replay limit for bouncer emulation relative to CHATHISTORY
39
+* Added `accounts.vhosts.offer-list`, allowing users to take pre-approved vhosts without operator approval (#737)
40
+* Renamed `accounts.bouncer` to `accounts.multiclient` (the old name still works) (#787)
41
+* New recommended values of `server.max-sendq`, `server.ip-cloaking.num-bits`, `accounts.registration.bcrypt-cost`, `accounts.nick-reservation.enabled` (now true), `accounts.multiclient.allowed-by-default` (now true)
42
+* Added `server.ip-cloaking.secret-environment-variable`, allowing the cloaking secret to be deployed via an environment variable for use in Kubernetes (#741, thanks [@daurnimator](https://github.com/daurnimator)!)
43
+
44
+### Security
45
+* Added forward confirmation of reverse DNS lookups for hostnames: to enable this, set `server.forward-confirm-hostnames` to true (#688)
46
+* Added protection against confusable channel names (#581)
47
+* Fixed cases where Tor users could receive CTCP messages, contrary to expectations (#752, #753)
48
+* Fixed `NS INFO` displaying the local timezone (#710)
49
+* Fixed `accounts.authentication-enabled` failing to disable the `NS IDENTIFY` command (#721)
50
+* Fixed confusable protection not being applied to newly registered accounts (#745, thanks [@bogdomania](https://github.com/bogdomania)!)
51
+
52
+### Added
53
+* Added support for persistent history storage in MySQL (#348)
54
+* Added support for "always-on" clients that remain present on the server even when disconnected (#348, #701)
55
+* Added support for LDAP (#690, thanks [@mattouille](https://github.com/mattouille), [@ivucica](https://github.com/ivucica), and [@mabgnu](https://github.com/mabgnu)!)
56
+* Added support for the new [draft/multiline](https://github.com/ircv3/ircv3-specifications/pull/398) specification (#670, thanks [@jwheare](https://github.com/jwheare) and [@jesopo](https://github.com/jesopo)!)
57
+* Added new modes for Unicode characters in nicknames and channel names: ASCII-only and "permissive" (allowing emoji) (#693)
58
+* Added support for plaintext PROXY lines ahead of a TLS handshake, improving compatibility with some Kubernetes load balancers (#561, thanks @RyanSquared](https://github.com/RyanSquared) and [@daurnimator](https://github.com/daurnimator)!)
59
+* Added support for authenticating operators by TLS client certificates, and automatically applying operator privileges on login (#696, thanks [@RyanSquared](https://github.com/RyanSquared)!)
60
+* Added `/DEOPER` command to remove operator privileges (#549, thanks [@bogdomania](https://github.com/bogdomania)!)
61
+* Added `/CHANSERV TRANSFER`, allowing transfers of channel ownership (#684)
62
+* Added `/NICKSERV CERT`, allowing users to manage their authorized client certificates (#530)
63
+* Added `/HOSTSERV TAKE`, allowing users to take pre-approved vhosts without operator approval (#737)
64
+* Added support for configuring connection limits and throttling for individual CIDRs (#646, thanks KoDi!)
65
+* Added `/CHANSERV PURGE`, allowing server administrators to shut down channels (#683)
66
+* Added `/CHANSERV CLEAR`, allowing channel founders to reset stored bans and privileges (#692)
67
+* Added `/CHANSERV SET`, allowing channel founders to disable channel history (#379)
68
+* Added account preference `AUTOREPLAY-JOINS`, allowing greater control over when joins and parts appear in history replay (#616, thanks [@zaher](https://github.com/zaher)!)
69
+* Added `/DEBUG CRASHSERVER` command (#791)
70
+* `znc.in/playback` now supports nicknames as targets (#830)
71
+* Added channel mode `+C` to suppress CTCP messages to a channel (#756)
72
+* Added some missing snomasks for events related to accounts and vhosts (`+s v` to enable vhost snomasks) (#347, #103)
73
+
74
+### Changed
75
+* Updated CHATHISTORY support to the [latest draft](https://github.com/ircv3/ircv3-specifications/pull/393) (#621, thanks [@prawnsalad](https://github.com/prawnsalad)!)
76
+* Updated to the ratified [labeled-response](https://ircv3.net/specs/extensions/labeled-response.html) specification from the earlier `draft/labeled-response-0.2` (#757)
77
+* `/HISTORY` now defaults to returning 100 messages, and also takes time durations like `1h` as arguments (#621, thanks lover!)
78
+* D-Lines are no longer enforced against loopback IPs (#671)
79
+* Password length limit was reduced from 600 bytes to 300 bytes (#775)
80
+
81
+### Fixed
82
+* Fixed a bug where `znc.in/playback` commands would play every channel, regardless of the target parameter (#760, thanks [@brenns10](https://github.com/brenns10)!)
83
+* Fixed `MODE -o` not removing all operator permissions (#725, #549, thanks [@bogdomania](https://github.com/bogdomania)!)
84
+* Fixed client-only tags being relayed in direct messages to users without the `message-tags` capability (#754, thanks [@jesopo](https://github.com/jesopo)!)
85
+* Fixed the channel user limit (the `+l` mode) not persisting after server restart (#705, thanks [@bogdomania](https://github.com/bogdomania)!)
86
+* Fixed response to `JOIN` lines with parameters ending in a comma (#679, thanks [@bogdomania](https://github.com/bogdomania)!)
87
+* Fixed confusable protection not being removed from unregistered accounts (#745, thanks [@bogdomania](https://github.com/bogdomania)!)
88
+* Fixed rehash not enabling nickname reservation, vhosts, or history under some circumstances (#702, thanks [@bogdomania](https://github.com/bogdomania)!)
89
+* Fixed responses to the `USERHOST` command (#682)
90
+* Fixed bad results when running `oragono upgradedb` against a missing database file (#715, thanks [@bogdomania](https://github.com/bogdomania)!)
91
+* Fixed confusing `NS GHOST` behavior when nickname reservation is disabled (#727, thanks horseface!)
92
+* Fixed validation of authzid during SASL (#716, thanks [@xPaw](https://github.com/xPaw)!)
93
+* Non-ASCII characters are proactively disallowed in `ip-cloaking.netname` (#713, thanks [@bogdomania](https://github.com/bogdomania)!)
94
+* Limited the time during which `znc.in/playback` affects channel joins (#829)
95
+
96
+### Removed
97
+* Removed `oragono.io/maxline-2` capability in favor of the new `draft/multiline` capability (#670, #752)
98
+* Removed `oragono.io/bnc` capability (multiclient functionality is now controllable only via server config and `/NS SET MULTICLIENT`) (#787)
99
+* Removed `draft/acc` capability and related `ACC` command (#723)
100
+
101
+### Internal Notes
102
+* Updated to Go 1.14 and modules, simplifying the build process (#699)
103
+
4 104
 ## [1.2.0] - 2019-11-17
5 105
 We're pleased to announce Oragono 1.2.0. This version contains bug fixes and minor improvements.
6 106
 

+ 8
- 1
DEVELOPING.md 查看文件

@@ -9,6 +9,12 @@ You should use the [latest distribution of the Go language for your OS and archi
9 9
 
10 10
 Oragono vendors all its dependencies. Because of this, Oragono is self-contained and you should not need to fetch any dependencies with `go get`. Doing so is not recommended, since it may fetch incompatible versions of the dependencies.
11 11
 
12
+If you're upgrading the Go version used by Oragono, there are several places where it's hard-coded and must be changed:
13
+
14
+1. `.travis.yml`, which controls the version that our CI test suite uses to build and test the code (e.g., for a PR)
15
+2. `distrib/docker/Dockerfile`, which controls the version that the Oragono binaries in our Docker images are built with
16
+3. `go.mod`: this should be updated automatically by Go when you do module-related operations
17
+
12 18
 
13 19
 ## Branches
14 20
 
@@ -21,7 +27,8 @@ Develop branches are either used to work out implementation details in preperati
21 27
 
22 28
 ## Releasing a new version
23 29
 
24
-1. Run [`irctest`]() over it to make sure nothing's severely broken.
30
+1. Test backwards compatibility guarantees. Get an example config file and an example database from the previous stable release. Make sure the current build still works with them (modulo anything explicitly called out in the changelog as a breaking change).
31
+1. Run `irctest` over it to make sure nothing's severely broken. Talk to the maintainers to find out which version of irctest to run.
25 32
 1. Update the changelog with new changes and write release notes.
26 33
 1. Update the version number `irc/constants.go` (either change `-unreleased` to `-rc1`, or remove `-rc1`, as appropriate).
27 34
 1. Commit the new changelog and constants change.

+ 6
- 11
README 查看文件

@@ -7,7 +7,7 @@
7 7
 
8 8
 -----------------------------------------------------------------------------------------------
9 9
 
10
-Oragono is a modern, experimental IRC server written in Go. It's designed to be simple to setup
10
+Oragono is a modern IRC server written in Go. It's designed to be simple to setup
11 11
 and use, and to provide the majority of features that IRC users expect today.
12 12
 
13 13
 It includes features such as UTF-8 nicks and channel names, client accounts and SASL, and other
@@ -55,13 +55,8 @@ Otherwise, just starting the server will run an automagic backup and upgrade.
55 55
 
56 56
 === Credits ===
57 57
 
58
-* Jeremy Latt, creator of Ergonomadic, <https://github.com/jlatt>
59
-* Edmund Huber, maintainer of Ergonomadic, <https://github.com/edmund-huber>
60
-* Niels Freier, added WebSocket support to Ergonomadic, <https://github.com/stumpyfr>
61
-* Daniel Oakley, maintainer of Oragono, <https://github.com/DanielOaks>
62
-* Euan Kemp, contributor to Oragono and lots of useful fixes, <https://github.com/euank>
63
-* Shivaram Lingamneni, has contributed a ton of fixes, refactoring, and general improvements, <https://github.com/slingamn>
64
-* James Mills, contributed Docker support, <https://github.com/prologic>
65
-* Vegax, implementing some commands and helping when Oragono was just getting started, <https://github.com/vegax87>
66
-* Sean Enck, transitioned us from using a custom script to a proper Makefile, <https://github.com/enckse>
67
-* apologies to anyone I forgot.
58
+* Jeremy Latt (2012-2014)
59
+* Edmund Huber (2014-2015)
60
+* Daniel Oaks (2016-present)
61
+* Shivaram Lingamneni (2017-present)
62
+* Many other contributors and friends of the project <3

+ 18
- 17
README.md 查看文件

@@ -1,8 +1,13 @@
1 1
 ![Oragono logo](docs/logo.png)
2 2
 
3
-Oragono is a modern, experimental IRC server written in Go. It's designed to be simple to setup and use, and it includes features such as UTF-8 nicks / channel names, client accounts with SASL, and other assorted IRCv3 support.
3
+Oragono is a modern IRC server written in Go. Its core design principles are:
4 4
 
5
-Oragono is a fork of the [Ergonomadic](https://github.com/edmund-huber/ergonomadic) IRC daemon <3
5
+* Being simple to set up and use
6
+* Combining the features of an ircd, a services framework, and a bouncer (integrated account management, history storage, and bouncer functionality)
7
+* Bleeding-edge [IRCv3 support](http://ircv3.net/software/servers.html), suitable for use as an IRCv3 reference implementation
8
+* Highly customizable via a rehashable (i.e., reloadable at runtime) YAML config
9
+
10
+Oragono is a fork of the [Ergonomadic](https://github.com/jlatt/ergonomadic) IRC daemon <3
6 11
 
7 12
 ---
8 13
 
@@ -19,14 +24,15 @@ Oragono is a fork of the [Ergonomadic](https://github.com/edmund-huber/ergonomad
19 24
 
20 25
 ## Features
21 26
 
27
+* integrated services: NickServ for user accounts, ChanServ for channel registration, and HostServ for vanity hosts
28
+* bouncer-like features: storing and replaying history, allowing multiple clients to use the same nickname
22 29
 * UTF-8 nick and channel names with rfc7613 (PRECIS)
23
-* [yaml](http://yaml.org/) configuration
24
-* native TLS/SSL support
30
+* native TLS/SSL support, including support for client certificates
31
+* [yaml](https://yaml.org/) configuration
25 32
 * updating server config and TLS certificates on-the-fly (rehashing)
26
-* user accounts and SASL
33
+* SASL authentication
34
+* LDAP support
27 35
 * supports [multiple languages](https://crowdin.com/project/oragono) (you can also set a default language for your network)
28
-* integrated services: NickServ for user accounts, ChanServ for channel registration, and HostServ for vanity hosts
29
-* experimental support for bouncer-like features (storing and replaying history, allowing multiple clients to use the same nickname)
30 36
 * advanced security and privacy features (support for requiring SASL for all logins, cloaking IPs, and running as a Tor hidden service)
31 37
 * an extensible privilege system for IRC operators
32 38
 * ident lookups for usernames
@@ -117,13 +123,8 @@ Make sure to setup [SASL](https://freenode.net/kb/answer/sasl) in your client to
117 123
 
118 124
 # Credits
119 125
 
120
-* Jeremy Latt, creator of Ergonomadic, <https://github.com/jlatt>
121
-* Edmund Huber, maintainer of Ergonomadic, <https://github.com/edmund-huber>
122
-* Niels Freier, added WebSocket support to Ergonomadic, <https://github.com/stumpyfr>
123
-* Daniel Oakley, maintainer of Oragono, <https://github.com/DanielOaks>
124
-* Euan Kemp, contributor to Oragono and lots of useful fixes, <https://github.com/euank>
125
-* Shivaram Lingamneni, co-maintainer of Oragono, <https://github.com/slingamn>
126
-* James Mills, contributed Docker support, <https://github.com/prologic>
127
-* Vegax, implementing some commands and helping when Oragono was just getting started, <https://github.com/vegax87>
128
-* Sean Enck, transitioned us from using a custom script to a proper Makefile, <https://github.com/enckse>
129
-* apologies to anyone I forgot.
126
+* Jeremy Latt (2012-2014)
127
+* Edmund Huber (2014-2015)
128
+* Daniel Oaks (2016-present)
129
+* Shivaram Lingamneni (2017-present)
130
+* [Many other contributors and friends of the project <3](https://github.com/oragono/oragono/blob/master/CHANGELOG.md)

+ 28
- 33
docs/MANUAL.md 查看文件

@@ -28,7 +28,7 @@ _Copyright © Daniel Oaks <daniel@danieloaks.net>, Shivaram Lingamneni <slingamn
28 28
         - Nickname reservation
29 29
     - Channel Registration
30 30
     - Language
31
-    - Bouncer
31
+    - Multiclient ("Bouncer")
32 32
     - History
33 33
     - IP cloaking
34 34
 - Frequently Asked Questions
@@ -56,34 +56,24 @@ If you have any suggestions, issues or questions, feel free to submit an issue o
56 56
 
57 57
 ## Project Basics
58 58
 
59
-Let's go over some basics, for those new to Oragono. My name's Daniel, and I started the project (it was forked off a server called [Ergonomadic](https://github.com/edmund-huber/ergonomadic) that'd been around for a number of years). In addition to Oragono, I also do a lot of IRC specification work with the [various](https://modern.ircdocs.horse) [ircdocs](https://defs.ircdocs.horse) [projects](https://ircdocs.horse/specs/) and with the [IRCv3 Working Group](https://ircv3.net/).
59
+Oragono is an ircd written "from scratch" in the [Go](https://en.wikipedia.org/wiki/Go_%28programming_language%29) language, i.e., it [shares no code](https://github.com/grawity/irc-docs/blob/master/family-tree.txt) with the original ircd implementation or any other major ircd. It began as [ergonomadic](https://github.com/jlatt/ergonomadic), which was developed by Jeremy Latt between 2012 and 2014. In 2016, Daniel Oaks forked the project under its current name Oragono, in order to prototype [IRCv3](https://ircv3.net/) features and for use as a reference implementation of the [Modern IRC specification](https://modern.ircdocs.horse). Oragono 1.0.0 was released in February 2019, and as of 2020 the project is under active development by multiple contributors.
60 60
 
61
-My main goals when starting the project were to write a server that:
61
+Oragono's core design goals are:
62 62
 
63
-- Is fully-functional.
64
-- I can use to very easily prototype new [IRCv3](https://ircv3.net/) proposals and features.
65
-- I can consider a reference implementation for the [Modern spec](https://modern.ircdocs.horse).
63
+* Being simple to set up and use
64
+* Combining the features of an ircd, a services framework, and a bouncer (integrated account management, history storage, and bouncer functionality)
65
+* Bleeding-edge [IRCv3 support](http://ircv3.net/software/servers.html), suitable for use as an IRCv3 reference implementation
66
+* Highly customizable via a rehashable (i.e., reloadable at runtime) YAML config
66 67
 
67
-All in all, these have gone pretty well. The server has relatively extensive command coverage, it prototypes a whole lot of the IRCv3 proposals and accepted/draft specs, and we pretty regularly update it to match new behaviour written into the Modern spec.
68
-
69
-Some of the features that sets Oragono apart from other servers are:
70
-
71
-- Extensive IRCv3 support.
72
-- Extensive logging and oper privilege levels configuration.
73
-- Integrated user account and channel registration system (no services required!).
74
-- Native Unicode support (including appropriate casemapping).
75
-- Support for [multiple languages](https://crowdin.com/project/oragono).
76
-- Bouncer-like features, including allowing multiple clients to use the same nickname
77
-
78
-Oragono has multiple communities using it as a day-to-day chat server and is fairly mature --- we encourage you to consider it for your community!
68
+In addition to its unique features (integrated services and bouncer, comprehensive internationalization), Oragono also strives for feature parity with other major servers. Oragono has multiple communities using it as a day-to-day chat server and is fairly mature --- we encourage you to consider it for your organization or community!
79 69
 
80 70
 ## Scalability
81 71
 
82
-We believe Oragono should scale comfortably to 10,000 clients and 2,000 clients per channel, making it suitable for small to medium-sized teams and communities. Oragono does not currently support server-to-server linking (federation), meaning that all clients must connect to the same instance. However, since Oragono is implemented in Go, it is reasonably effective at distributing work across multiple cores on a single server; in other words, it should "scale up" rather than "scaling out".
72
+We believe Oragono should scale comfortably to 10,000 clients and 2,000 clients per channel, making it suitable for small to medium-sized teams and communities. Oragono does not currently support server-to-server linking (federation), meaning that all clients must connect to the same instance. However, since Oragono is implemented in Go, it is reasonably effective at distributing work across multiple cores on a single server; in other words, it should "scale up" rather than "scaling out". (Federation is [planned](https://github.com/oragono/oragono/issues/26) but is not scheduled for development in the near term.)
83 73
 
84
-In the relatively near term, we plan to make Oragono [highly available](https://github.com/oragono/oragono/issues/343), and in the long term, we hope to support [federation](https://github.com/oragono/oragono/issues/26) as well.
74
+Even though it runs as a single instance, Oragono can be deployed for high availability (i.e., with no single point of failure) using Kubernetes. This technique uses a k8s [LoadBalancer](https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/) to receive external traffic and a [Volume](https://kubernetes.io/docs/concepts/storage/volumes/) to store the embedded database file.
85 75
 
86
-If you're interested in deploying Oragono at scale, or want performance tuning advice, come find us on [`#oragono` on freenode](ircs://irc.freenode.net:6697/#oragono), we're very interested in what our software can do!
76
+If you're interested in deploying Oragono at scale or for high availability, or want performance tuning advice, come find us on [`#oragono` on freenode](ircs://irc.freenode.net:6697/#oragono), we're very interested in what our software can do!
87 77
 
88 78
 
89 79
 --------------------------------------------------------------------------------------------
@@ -284,26 +274,28 @@ The above will change the server language to Romanian, with a fallback to Chines
284 274
 Our language and translation functionality is very early, so feel free to let us know if there are any troubles with it! If you know another language and you'd like to contribute, we've got a CrowdIn project here: [https://crowdin.com/project/oragono](https://crowdin.com/project/oragono)
285 275
 
286 276
 
287
-## Bouncer
277
+## Multiclient ("Bouncer")
288 278
 
289 279
 Traditionally, every connection to an IRC server is separate must use a different nickname. [Bouncers](https://en.wikipedia.org/wiki/BNC_%28software%29#IRC) are used to work around this, by letting multiple clients connect to a single nickname. With Oragono, if the server is configured to allow it, multiple clients can share a single nickname without needing a bouncer. To use this feature, both connections must authenticate with SASL to the same user account and then use the same nickname during connection registration (while connecting to the server) – once you've logged-in, you can't share another nickname.
290 280
 
291
-To enable this functionality, set `accounts.bouncer.enabled` to `true`. Setting `accounts.bouncer.allowed-by-default` to `true` will allow this for everyone – by default, users need to opt-in to shared connections using `/msg NickServ SET BOUNCER`.
281
+To enable this functionality, set `accounts.multiclient.enabled` to `true`. Setting `accounts.multiclient.allowed-by-default` to `true` will allow this for everyone. If `allowed-by-default` is `false` (but `enabled` is still `true`), users can opt in to shared connections using `/msg NickServ SET multiclient on`.
292 282
 
293 283
 You can see a list of your active sessions and their idle times with `/msg NickServ sessions` (network operators can use `/msg NickServ sessions nickname` to see another user's sessions).
294 284
 
285
+Oragono now supports "always-on clients" that remain present on the server (holding their nickname, subscribed to channels, able to receive DMs, etc.) even when no actual clients are connected. To enable this as a server operator, set `accounts.multiclient.always-on` to either `opt-in`, `opt-out`, or `mandatory`. To enable or disable it as a client (if the server setting is `opt-in` or `opt-out` respectively), use `/msg NickServ set always-on true` (or `false`).
295 286
 
296
-## History
297 287
 
298
-Oragono can store a limited amount of message history in memory and replay it, which is useful for covering brief disconnections from IRC. You can access this using the `/HISTORY` command (depending on your client, you may need to use `/QUOTE history` instead), for example `/HISTORY #mychannel 100` to get the 100 latest messages from `#mychannel`.
288
+## History
299 289
 
300
-Server administrators can configure `history.autoreplay-on-join` to automatically send clients a fixed number of history lines when they join a channel. Users can use `/msg NickServ set autoreplay-lines` to opt in or out of this behavior.
290
+Oragono supports two methods of storing history, an in-memory buffer with a configurable maximum number of messages, and persistent history stored in MySQL (with no fixed limits on message capacity). To enable in-memory history, configure `history.enabled` and associated settings in the `history` section. To enable persistent history, enter your MySQL server information in `datastore.mysql` and then enable persistent history storage in `history.persistent`.
301 291
 
302
-We are working on a number of improvements to this functionality:
292
+Unfortunately, client support for history playback is still patchy. In descending order of support:
303 293
 
304
-* We currently emulate the ZNC playback module for clients that have special ZNC support (see the "ZNC" section below)
305
-* The [`/CHATHISTORY`](https://github.com/ircv3/ircv3-specifications/pull/349) command will be a standardized way for clients to request history lines
306
-* [Connection resuming](https://github.com/ircv3/ircv3-specifications/pull/306), which we support in draft form, automatically replays history lines to clients who return after a brief disconnection
294
+1. The [IRCv3 chathistory specification](https://github.com/ircv3/ircv3-specifications/pull/393/) offers the most fine-grained control over history replay. It is supported by [Kiwi IRC's unreleased master branch](https://kiwiirc.com/), and hopefully other clients soon.
295
+1. We emulate the [ZNC playback module](https://wiki.znc.in/Playback) for clients that support it. You may need to enable support for it explicitly in your client (see the "ZNC" section below).
296
+1. If you are not using the multiclient functionality, but your client is set to be always-on (see the previous section for details), Oragono will remember the last time your client signed out. You can then set your account to replay only messages you missed with `/msg NickServ set autoreplay-missed on`. Unfortunately, this feature will only work reliably if you are *not* using the multiclient functionality described in the above section --- you must be connecting with at most one client at a time.
297
+1. You can manually request history using `/history #channel 1h` (the parameter is either a message count or a time duration). (Depending on your client, you may need to use `/QUOTE history` instead.)
298
+1. You can autoreplay a fixed number of lines (e.g., 25) each time you join a channel using `/msg NickServ set autoreplay-lines 25`.
307 299
 
308 300
 
309 301
 ## IP cloaking
@@ -780,8 +772,11 @@ Oragono can emulate certain capabilities of the ZNC bouncer for the benefit of c
780 772
 
781 773
 # Acknowledgements
782 774
 
783
-Always, thanks to Jeremy Latt for creating Ergonomadic. Thanks for Edmund Huber for maintaining Ergonomadic and providing useful help while transitioning.
775
+Oragono's past and present maintainers and core contributors are:
784 776
 
785
-Thanks to Euan Kemp (euank) for the contributions and help with this, along with other projects, and to James Mills, Vegax and Sean Enck for various other help and contributions on the server.
777
+* Jeremy Latt (2012-2014)
778
+* Edmund Huber (2014-2015)
779
+* Daniel Oaks (2016-present)
780
+* Shivaram Lingamneni (2017-present)
786 781
 
787
-And a massive thanks to Shivaram Lingamneni (slingamn) for being an amazing co-maintainer of Oragono! You've contributed a lot to Oragono, and really convinced me to step up with this and take the server forward in a big way. I'm grateful for everything you've done, and working with ya' is a pleasure.
782
+In addition, Oragono has benefited tremendously from its community of contributors, users, and translators, not to mention collaborations with the wider IRCv3 community. There are too many people to name here --- but we try to credit people for individual contributions in the changelog, please reach out to us if we forgot you :-)

+ 4
- 3
irc/handlers.go 查看文件

@@ -1001,16 +1001,17 @@ func infoHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Resp
1001 1001
 	}
1002 1002
 	rb.Add(nil, server.name, RPL_INFO, client.nick, client.t("Oragono is released under the MIT license."))
1003 1003
 	rb.Add(nil, server.name, RPL_INFO, client.nick, "")
1004
-	rb.Add(nil, server.name, RPL_INFO, client.nick, client.t("Thanks to Jeremy Latt for founding Ergonomadic, the project this is based on")+" <3")
1005
-	rb.Add(nil, server.name, RPL_INFO, client.nick, "")
1006 1004
 	rb.Add(nil, server.name, RPL_INFO, client.nick, client.t("Core Developers:"))
1007 1005
 	for _, line := range infoString2 {
1008 1006
 		rb.Add(nil, server.name, RPL_INFO, client.nick, line)
1009 1007
 	}
1010
-	rb.Add(nil, server.name, RPL_INFO, client.nick, client.t("Contributors and Former Developers:"))
1008
+	rb.Add(nil, server.name, RPL_INFO, client.nick, client.t("Former Core Developers:"))
1011 1009
 	for _, line := range infoString3 {
1012 1010
 		rb.Add(nil, server.name, RPL_INFO, client.nick, line)
1013 1011
 	}
1012
+	rb.Add(nil, server.name, RPL_INFO, client.nick, client.t("For a more complete list of contributors, see our changelog:"))
1013
+	rb.Add(nil, server.name, RPL_INFO, client.nick, "    https://github.com/oragono/oragono/blob/master/CHANGELOG.md")
1014
+	rb.Add(nil, server.name, RPL_INFO, client.nick, "")
1014 1015
 	// show translators for languages other than good ole' regular English
1015 1016
 	tlines := server.Languages().Translators()
1016 1017
 	if 0 < len(tlines) {

+ 2
- 10
irc/server.go 查看文件

@@ -996,15 +996,7 @@ var (
996 996
 	infoString2 = strings.Split(`    Daniel Oakley,          DanielOaks,    <daniel@danieloaks.net>
997 997
     Shivaram Lingamneni,    slingamn,      <slingamn@cs.stanford.edu>
998 998
 `, "\n")
999
-	infoString3 = strings.Split(`    3onyc
1000
-    Edmund Huber
1001
-    Euan Kemp (euank)
1002
-    Jeremy Latt
1003
-    Martin Lindhe (martinlindhe)
1004
-    Roberto Besser (besser)
1005
-    Robin Burchell (rburchell)
1006
-    Sean Enck (enckse)
1007
-    soul9
1008
-    Vegax
999
+	infoString3 = strings.Split(`    Jeremy Latt,            jlatt
1000
+    Edmund Huber,           edmund-huber
1009 1001
 `, "\n")
1010 1002
 )

+ 4
- 2
oragono.yaml 查看文件

@@ -744,6 +744,8 @@ history:
744 744
         # per-channel setting):
745 745
         registered-channels: "opt-out"
746 746
 
747
-        # direct messages are only stored in the database for persistent clients;
748
-        # you can control how they are stored here (same options as above)
747
+        # direct messages are only stored in the database for logged-in clients;
748
+        # you can control how they are stored here (same options as above).
749
+        # if you enable this, strict nickname reservation is strongly recommended
750
+        # as well.
749 751
         direct-messages: "opt-out"

Loading…
取消
儲存