- Contacts' notify / name values were just being discarded (!) on
contacts sync. This is now fixed.
- A new whatsapp.mark_read option can be used to control whether
new incoming messages are automatically marked as read.
This now defaults to off, as the old behaviour was somewhat
confusing.
- Instead of contacts/recipients potentially being created in like
three disparate places, there is now one and only one place
where this happens: the object responsible for the protocol,
i.e. the WhatsApp or modem manager.
- This makes everything far simpler, and means we can actually
keep track of things like contact names properly, instead of
wondering which part of the bridge will end up making the
contact in the end.
- All of the WhatsApp contacts we get on the initial burst, and
any added thereafter, are now translated into recipients.
- In addition, we keep track of their 'notify' property (i.e.
the ~tildename for each contact, or the contact name from the
user address book), and store that in the database.
- In future, the bridge will perhaps let you autoname people,
or display their notify in some meaningful way to allow you
to differentiate people amongst the sea of random numbers...
- A new macro, sink_outbox!, was added to deduplicate the same
"send messages into this futures sink from this outbox array"
behaviour used in multiple places now.
- We now have the beginnings of an IRC server / s2c protocol impl!
It handles client registration, and pretty much nothing else
after that at this stage - but it's getting along!
- whatsappweb-eta has now been hacked up to support PendingSend and
Sent ack types, making our ack tracking actually worthwhile!
- We now additionally warn if a message has been in the PendingSend
state for too long, indicating the phone might be disconnected.
- We now store each WhatsApp message ID we've received in the database,
so we can determine whether an incoming message has already been
delivered or not.
- 'Old' messages (those without the 'new' flag) are now delivered,
instead of merely being thrown away, with a timestamp prepended to
indicate that they're part of the backlog.
- A new config option `backlog_start` under the [whatsapp] section
enables users to hide backlog messages before a given timestamp, specified
in ISO 8601 format. This is useful if you're migrating to this version
and don't want a million copies of all your messages to be sent.
- The `ignore_other_libraries` config flag was fixed to actually work.
- We now track the MessageAcks received for each WA message we send.
- If we don't receive acks for a given message, the user gets warned
about this and can configure the bridge to auto-resend the message
after a given delay.
- ReportFailure now generates a less ignorable PRIVMSG that mentions
the admin, instead of a NOTICE.
- Log levels for things like contacts being changed or chat actions
have been toned down somewhat, to avoid spamming the logs.
- We now have a docker-compose.yml, which will automatically provision
an InspIRCd docker container alongside an sms-irc one and handle all
the linking for you, such that you only have to give it a postgres
database, deal with its files, and you can connect to an IRC port!
- However, some work could still be done to document it a bit better.
- This lets you build sms-irc and get a nice Docker container out of it.
- However, the generated container still requires _alot_ of manual
setup, and you'll need to mount a volume to give it some config.
- Instead of using heavyweight log4rs, which didn't really get us
much, we now just implement a logger with the log crate directly.
- Logging is configurable via three parameters:
* stdout log level
* IRC channel log level
* whether to log messages from other libraries, or not
- Logging configuration now has its own section in the config.
- Contact cards are now handled nicely, and can be downloaded.
- More message types, like redactions and location messages, are now
printed nicely.
- Quoted messages are now handled!
- We now enforce the use of CMGL, primarily because polling the modem
every once in a while helps us check it's still alive.
(This has led to at least one incident of messages being delayed!)
- In addition, we add timeouts to all of our modem calls, and knife
the modem connection in the side if it fails to respond within 2s.
- We have a new fancy command interface that works more like NickServ
and less like people yelling random !commands into the admin channel.
- Hacky /NOTICEs to ghosts are gone and replaced with "GHOST nick
command", which should be friendlier to people trying to run the
bridge on things like Matrix!
- Commands actually have help!
- Currently, commands just do the same thing they always did (i.e.
send some backend message). In the future, the backend components will
handle user commands directly, in order to provide better UX.
- You can now configure a `autocreate_prefix` in the top-level config.
If this is set, messages sent to unbridged or new WA groups will
automatically trigger the creation of a new channel, autogenerated
based off the group's subject.
- You can also set `ensure_joined` in s2s config to issue a SVSJOIN
before every message sent to a group's bridged channel, to ensure that
your admin user is joined to the channel and can receive the message.
(Currently this just spams SVSJOIN a lot, which doesn't seem to have
any negative consequences, although this isn't exactly ideal.)
- We now negotiate versions the right way, which helps by not breaking
when linking to insp3 servers.
- We also use version 1202 (the 2.0 protocol), which makes the most sense.