7.4 KiB
weechat-xmpp
https://api.travis-ci.org/bqv/weechat-xmpp.svg?branch=master">file:https://api.travis-ci.org/bqv/weechat-xmpp.svg?branch=master https://coveralls.io/repos/github/bqv/weechat-xmpp/badge.svg?branch=master">file:https://coveralls.io/repos/github/bqv/weechat-xmpp/badge.svg?branch=master " title="file:" /> " title="file:" /> " title="file:" /> " title="file:" /> https://img.shields.io/badge/xmpp-weechat%40muc.xa0.uk-yellow">file:https://img.shields.io/badge/xmpp-weechat%40muc.xa0.uk-yellow
Status: | XMPP for power users and digital masochists |
Location: | http://github.com/bqv/weechat-xmpp |
Version: | 0.2.1 |
Disclaimer: | I'm lazy and unashamedly clinically insane |
Description
A weechat plugin in C to extend the chat client to support XMPP and a currently minimal but ideally maximal set of XEPs. My priority here is to have an android-available XMPP client that hides as little as possible from the user. To use this with android, set up a relay (`/relay`) and see weechat-android. I might rewrite this in C++ at some point when I feel like I can do it without burning out.
Usage
- Start with
/account add
, use/help account
for instructions. - Use
/account connect <account-name>
with the name set at add-time.
Installing
Place xmpp.so in the appropriate place for weechat plugins.
Dependencies
- libstrophe (dynamic, dependency)
- libxml2 (dynamic, dependency)
- lmdb (dynamic, dependency)
- libomemo-c (libsignal-protocol-c) (dynamic, dependency)
- gpgme (dynamic, dependency)
- weechat (>= v3.0)
.. or just use the guix spec in .envrc
Building
git clone git://github.com/bqv/weechat-xmpp.git
cd weechat-xmpp
git submodule update --init --recursive
make
make install
Do NOT run make install as root, it installs the plugin to your local weechat plugins directory
Development
I use emacs for development of this, although I am also a fan of vim.
My debug build process involves static analysis with clang and cppcheck,
and dynamic analysis with address-sanitizer and leak-sanitizer.
My debug evaluation process involves gdb/mi run with the arguments
-ex "handle SIGPIPE nostop noprint pass" --args weechat -a 2>asan.log
since part of weechat and it's default plugins use SIGPIPE as control.
I have no real requests for style of pull requests besides a wish that you keep vaguely to the indentation style I use for this project.
Happy coding!
Tasks
DONE Implement basic functionality (milestone v0.1)
- Connecting
- Pretty-printing stanzas
- Receiveing and formatting PMs to a dedicated buffer
- Responding to PMs and formatting responses
- Opening PMs (/chat)
TODO [A] Implement essential functionality (milestone v0.2)
- Opening PMs with initial message
- Buffer autoswitch on enter/open
- Handle open/enter jids with a resource without breaking
- Allow /close without crashing
- Highlight
- MUC PMs
- Send typing notifications
- Recv typing notifications
- Message Carbons
- MAM Fetching
-
[/] Read receipts
- Message Delivery (XEP-0184)
-
Chat Markers (XEP-0333)
- Composing
- Paused
- [?] Active
- [#] Inactive
- [#] Gone
-
OMEMO (libomemo-c)
-
Presence
- Disco
- Disco response
-
Key Generation / storage (lmdb)
- Generation
- Storage
-
Announce
- Device ID
- Bundles
- Messages
-
-
PGP (gpgme)
- Use keyrings (from gnupg)
- Presence
- Decryption
- Encryption
- Custom set/clear key (/pgp)
- [#B] Save pgp key set per jid/muc
- [#A] Account renaming
-
OOB messages
- Single media on a line
- [#D] Multiple media inline (protocol?)
- [#C] Encrypted (pgp/omemo)
-
Handle wide errors gracefully
- [#C] Event-driven MUC entrance
-
XMPP Ping (xep-199)
- [#C] Respond to s2c and m2c
- [#B] /ping for c2s and c2c
-
MUCs
-
Presence/nicklist
- Enters
- Leaves
- Tracking
- Set/show topic
- Opening (/enter)
- Receiving
-
Sending
- With /msg
- Handle errors gracefully
-
Edits
- Displaying
- Tagging
- Diff highlighting
- [#B] Making (/edit)
- [#A] Leave on /close
-
-
Service Disco
- [#B] /disco [domain]
-
/whois [user|muc]
- [#B] User Avatars
- [#B] MUC Icons
-
Bookmarks / Roster (xep-048)
-
Autojoin bookmarks
- [#A] Except biboumi rooms
- [#B] Add bookmarks
- [#B] Delete bookmarks
- [#B] Roster
-
- [#D] OTR (libotr)
- [#C] Room Explorer (https://search.jabber.network/docs/api)
- [#C] DOAP
- [#C] Link sniffing for oob
TODO [C] Adhere to CCS2022 (XEP-459) (milestone v0.3)
-
Core
- Service Discovery (xep-030)
- Entity Capabilities (xep-115)
-
Advanced
- Direct TLS (require secure connection)
- Personal Eventing Protocol (xep-163)
-
IM
- File Upload (xep-363)
- VCard-temp (xep-054)
- MUC Invitations (xep-249)
-
Advanced
- User Avatar (xep-084)
- User Avatar Compatibility (xep-398 xep-153)
- User Blocking (xep-191)
- PEP Native Bookmarks (xep-402)
- MUC Self-Ping (xep-410)
- Persistent Storage (xep-223)
- XML Storage (xep-049)
- Message Correction (xep-308)
- Direct File Transfer - Jingle (xep-234 xep-261)
-
Extras
- Stateless Inline Media Sharing (xep-385)
- Consistent Color Generation (xep-392)
- Message Styling (xep-393)
- Extended Channel Search (xep-433)
- Message Retraction (xep-424)
- Message Moderation (xep-425)
TODO [#D] Close all issues (milestone v1.0)
Contributing
Your contributions are always welcome! Please submit a pull request or create an issue to add a new or missing feature.
Testimonials
"Weechat-Strophe - for the discerning dual IRCer XMPPer" – Ellenor et al Bjornsdottir
License
weechat-xmpp is licensed under the Mozilla Public License Version 2.0 available here and in LICENSE.