weechat-xmpp
weechat-xmpp copied to clipboard
#+TITLE: weechat-xmpp #+AUTHOR: Tony Olagbaiye #+EMAIL: [email protected] #+DATE: 2021-06-26 #+DESCRIPTION: Weechat plugin for XMPP #+KEYWORDS: weechat xmpp c api #+LANGUAGE: en #+OPTIONS: H:3 num:nil toc:nil \n:nil @:t ::t |:t ^:t -:t f:t *:t <:t #+OPTIONS: TeX:t LaTeX:nil skip:nil d:nil todo:t pri:t tags:not-in-toc #+EXPORT_EXCLUDE_TAGS: exclude #+STARTUP: showall
[[https://travis-ci.org/bqv/weechat-xmpp][file:https://api.travis-ci.org/bqv/weechat-xmpp.svg?branch=master]] [[https://coveralls.io/github/bqv/weechat-xmpp?branch=master][file:https://coveralls.io/repos/github/bqv/weechat-xmpp/badge.svg?branch=master]] [[https://github.com/bqv/weechat-xmpp/issues][file:https://img.shields.io/github/issues/bqv/weechat-xmpp.svg]] [[https://github.com/bqv/weechat-xmpp/issues?q=is:issue+is:closed][file:https://img.shields.io/github/issues-closed/bqv/weechat-xmpp.svg]] [[https://github.com/bqv/weechat-xmpp/blob/master/LICENSE][file:https://img.shields.io/github/license/bqv/weechat-xmpp.svg]] [[https://github.com/bqv/weechat-extras/][file:https://img.shields.io/badge/weechat--extras-xmpp-blue.svg]] [[https://inverse.chat/#converse/[email protected]][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 am rewriting this in C++, slowly... -
Usage
-
Start with =/account add=, use =/help account= for instructions.
-
Use =/account connect
= 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)
- libfmt (dynamic, dependency)
- g++ (build, >= GCC12)
- bison (build)
- flex (build)
- doctest (test)
- weechat (>= v3.0)
-
Building
#+begin_src sh git clone git://github.com/bqv/weechat-xmpp.git cd weechat-xmpp git submodule update --init --recursive make make install #+end_src
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 don't expect any, but I have no real requests for style of pull requests besides a wish that you keep vaguely to the indentation style I use.
-
Tasks
** DONE Implement basic functionality (milestone v0.1)
-
[X] Connecting
-
[X] Pretty-printing stanzas
-
[X] Receiveing and formatting PMs to a dedicated buffer
-
[X] Responding to PMs and formatting responses
-
[X] Opening PMs (/chat) ** TODO [#A] Implement essential functionality (milestone v0.2)
-
[X] Opening PMs with initial message
-
[X] Buffer autoswitch on enter/open
-
[X] Handle open/enter jids with a resource without breaking
-
[X] Allow /close without crashing
-
[X] Highlight
-
[X] MUC PMs
-
[X] Send typing notifications
-
[X] Recv typing notifications
-
[X] Message Carbons
-
[X] MAM Fetching
-
[/] Read receipts
- [X] Message Delivery (XEP-0184)
- [X] Chat Markers (XEP-0333)
- [X] Composing
- [X] Paused
- [?] Active
- [#] Inactive
- [#] Gone
-
[X] OMEMO (libomemo-c)
- [X] Presence
- [X] Disco
- [X] Disco response
- [X] Key Generation / storage (lmdb)
- [X] Generation
- [X] Storage
- [X] Announce
- [X] Device ID
- [X] Bundles
- [X] Messages
- [X] Presence
-
[-] PGP (gpgme)
- [X] Use keyrings (from gnupg)
- [X] Presence
- [X] Decryption
- [X] Encryption
- [X] Custom set/clear key (/pgp)
- [ ] [#B] Save pgp key set per jid/muc
-
[ ] [#A] Account renaming
-
[-] OOB messages
- [X] Single media on a line
- [ ] [#D] Multiple media inline (protocol?)
- [ ] [#C] Encrypted (pgp/omemo)
-
[X] Join and handle events asynchronously
-
[ ] Cache caps
-
[ ] 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
- [X] Presence/nicklist
- [X] Enters
- [X] Leaves
- [X] Tracking
- [X] Set/show topic
- [X] Opening (/enter)
- [X] Receiving
- [X] Sending
- [X] With /msg
- [X] Handle errors gracefully
- [-] Edits
- [X] Displaying
- [X] Tagging
- [X] Diff highlighting
- [ ] [#B] Making (/edit)
- [ ] [#A] Leave on /close
- [X] Presence/nicklist
-
[ ] Service Disco
- [ ] [#B] /disco [domain]
-
[ ] /whois [user|muc]
- [ ] [#B] User Avatars
- [ ] [#B] MUC Icons
-
[-] Bookmarks / Roster (xep-048)
- [X] Autojoin bookmarks
- [ ] [#A] Except biboumi rooms
- [ ] [#B] Add bookmarks
- [ ] [#B] Delete bookmarks
- [ ] [#B] Roster
- [X] Autojoin bookmarks
-
[ ] [#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" -- [[github.com/janicez][Ellenor et al Bjornsdottir]]
-
License
weechat-xmpp is licensed under the Mozilla Public License Version 2.0 available [[https://www.mozilla.org/en-US/MPL/2.0/][here]] and in LICENSE.