You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

7.5 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 file:<img src=" title="file:https://img.shields.io/github/issues/bqv/weechat-xmpp.svg" /> file:<img src=" title="file:https://img.shields.io/github/issues-closed/bqv/weechat-xmpp.svg" /> file:<img src=" title="file:https://img.shields.io/github/license/bqv/weechat-xmpp.svg" /> file:<img src=" title="file:https://img.shields.io/badge/weechat--extras-xmpp-blue.svg" /> 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 am rewriting this in C++, slowly…

Usage

  1. Start with /account add, use /help account for instructions.
  2. 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)
  • libfmt (dynamic, dependency)
  • g++ (build, >= GCC12)
  • bison (build)
  • flex (build)
  • doctest (test)
  • weechat (>= v3.0)

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 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)

  • 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)
  • 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

    • 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.