Baike.dev
All toolsAI codingTrendingOpen sourceNewsSubmit
Log in
< Back to tools
A

abaddon

> 开发工具
Open source

An alternative Discord client with voice support made with C++ and GTK 3

2.2K stars0 likes0 views
WebsiteGitHub

About

An alternative Discord client with voice support made with C++ and GTK 3

### Abaddon --- Alternative Discord client made in C++ with GTK Current features: * Not Electron * Voice support * Handles most types of chat messages including embeds, images, and replies * Completely styleable/customizable * Identifies to Discord as the web client unlike other clients so less likely to be falsely flagged as spam1 * Set status * Unread and mention indicators * Notifications (non-Windows) * Start new DMs and group DMs * View user profiles (notes, mutual servers, mutual friends) * Kick, ban, and unban members * Modify roles and modify members' roles * Manage invites * Manage emojis * View audit log * Emojis2 * Thread support3 * Animated avatars, server icons, emojis (can be turned off) 1 - Abaddon tries its best (though is not perfect) to make Discord think it's a legitimate web client. Some of the things done to do this include: using a browser user agent, sending the same IDENTIFY message that the official web client does, using API v9 endpoints in all cases, and not using endpoints the web client does not normally use. There are still a few smaller inconsistencies, however. For example the web client sends lots of telemetry via the `/science` endpoint (uBlock origin stops this) as well as in the headers of all requests.
**See [here](#the-spam-filter)** for things you might want to avoid if you are worried about being caught in the spam filter. 2 - Unicode emojis are substituted manually as opposed to rendered by GTK on non-Windows platforms. This can be changed with the `stock_emojis` setting as shown at the bottom of this README. A CBDT-based font using Twemoji is provided to allow GTK to render emojis natively on Windows. 3 - There are some inconsistencies with thread state that might be encountered in some more uncommon cases, but they are the result of fundamental issues with Discord's thread implementation. ### Building manually (recommended if not on Windows): #### Windows (with MSYS2): 1. Install following packages: * mingw-w64-x86_64-cmake * mingw-w64-x86_64-ninja * mingw-w64-x86_64-sqlite3 * mingw-w64-x86_64-nlohmann-json * mingw-w64-x86_64-curl * mingw-w64-x86_64-zlib * mingw-w64-x86_64-gtkmm3 * mingw-w64-x86_64-libhandy * mingw-w64-x86_64-opus * mingw-w64-x86_64-libsodium * mingw-w64-x86_64-openssl * mingw-w64-x86_64-spdlog 2. `git clone --recurse-submodules="subprojects" https://github.com/uowuo/abaddon && cd abaddon` 4. `mkdir build && cd build` 5. `cmake -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo ..` 6. `ninja` 7. [Copy resources](#resources) #### Mac: 1. `git clone https://github.com/uowuo/abaddon --recurse-submodules="subprojects" && cd abaddon` 2. `brew install gtkmm3 nlohmann-json libhandy opus libsodium spdlog adwaita-icon-theme` 3. `mkdir build && cd build` 4. `cmake ..` 5. `make` 6. [Copy resources](#resources) #### Linux: 1. Install dependencies * On Ubuntu 22.04 (Jammy)/Debian 12 (bookworm) and newer: ```Shell $ sudo apt install g++ cmake libgtkmm-3.0-dev libcurl4-gnutls-dev libsqlite3-dev libssl-dev nlohmann-json3-dev libhandy-1-dev libsecret-1-dev libopus-dev libsodium-dev libspdlog-dev ``` * On Arch Linux: ```Shell $ sudo pacman -S gcc cmake gtkmm3 libcurl-gnutls lib32-sqlite lib32-openssl nlohmann-json libhandy opus libsodium spdlog ``` * On Void Linux: ```Shell $ # Install core dependencies $ sudo xbps-install cmake make meson pkg-config gcc libcurl libcurl-devel libsecret libsecret-devel gtkmm gtkmm-devel sqlite sqlite-devel openssl openssl-devel libhandy1 libhandy1-devel opus opus-devel libsodium libsodium-devel spdlog libspdlog $ # Clone and install nlohmann json: $ git clone https://github.com/nlohmann/json && cd json $ mkdir build $ meson build $ cd build $ sudo meson install $ cd ../.. ``` * On Fedora Linux: ```Shell $ sudo dnf install g++ cmake gtkmm3.0-devel libcurl-devel sqlite-devel openssl-devel json-devel libsecret-devel libhandy-devel opus-devel libsodium-devel spdlog-devel ``` > **Note:** On older versions of fedora you might need to install gtkmm30-devel instead of gtkmm3.0-devel. Use `dnf search gtkmm3` to see available packages. 2. `git clone https://github.com/uowuo/abaddon --recurse-submodules="subprojects" && cd abaddon` 3. `mkdir build && cd build` 4. `cmake ..` 5. `make` 6. [Copy resources](#resources) #### FreeBSD: 1. `pkg install git cmake nlohmann-json spdlog gtkmm30 libhandy libsodium` 2. `git clone https://github.com/uowuo/abaddon --recurse-submodules="subprojects" && cd abaddon` 3. `mkdir build && cd build` 4. `cmake ..` 5. `make` 6. [Copy resources](#resources) ### Downloads: Latest release version: https://github.com/uowuo/abaddon/releases/latest **CI:** - Windows: [here](https://nightly.link/uowuo/abaddon/workflows/ci/master/build-windows-msys2-MinSizeRel.zip) - MacOS: [here](https://nightly.link/uowuo/abaddon/workflows/ci/master/build-macos-RelWithDebInfo.zip) unsigned, unpackaged, requires gtkmm3 (e.g. from homebrew) - Linux: [here](https://nightly.link/uowuo/abaddon/workflows/ci/master/build-linux-MinSizeRel.zip) unpackaged (for now), requires gtkmm3. built on Ubuntu 22.04 + gcc9 > **Warning**: If you use Windows, make sure to start from the `bin` directory #### Resources The two folders within the `res` folder (`res/res` and `res/css`) are necessary. Windows also uses the `fonts` folder. You can put them directly next to the executable. On Linux, `css` and `res` can also be loaded from `~/.local/share/abaddon` or `/usr/local/share/abaddon` `abaddon.ini` will also be automatically used if located at `~/.config/abaddon/abaddon.ini` and there is no `abaddon.ini` in the working directory #### How do I get my token? Follow [these](https://github.com/Tyrrrz/DiscordChatExporter/issues/76#issuecomment-410067054) instructions. #### The Spam Filter Discord likes disabling accounts/forcing them to reset their passwords if they think the user is a spam bot or potentially had their account compromised. While the official client still often gets users caught in the spam filter, third party clients tend to upset the spam filter more often. If you get caught by it, you can usually [appeal](https://support.discord.com/hc/en-us/requests/new?ticket_form_id=360000029731) it and get it restored. Here are some things you might want to do with the official client instead if you are particularly afraid of evoking the spam filter's wrath: * Joining or leaving servers (usually main cause of getting caught) * Frequently disconnecting and reconnecting * Starting new DMs with people * Managing your friends list * Managing your user profile while connected to a third party client #### Dependencies: * [gtkmm](https://www.gtkmm.org/en/) * [JSON for Modern C++](https://github.com/nlohmann/json) * [IXWebSocket](https://github.com/machinezone/IXWebSocket) (provided as submodule) * [libcurl](https://curl.se/) * [zlib](https://zlib.net/) * [SQLite3](https://www.sqlite.org/index.html) * [spdlog](https://github.com/gabime/spdlog) * [libhandy](https://gnome.pages.gitlab.gnome.org/libhandy/) (optional) * [keychain](https://github.com/hrantzsch/keychain) (optional, provided as submodule) * [miniaudio](https://miniaud.io/) (optional, provided as submodule, required for voice) * [libopus](https://opus-codec.org/) (optional, required for voice) * [libsodium](https://doc.libsodium.org/) (optional, required for voice) * [rnnoise](https://gitlab.xiph.org/xiph/rnnoise) (optional, provided as submodule, noise suppression and improved VAD) * [libdave](https://github.com/discord/libdave) (provided as submodule, required for voice E2EE) * [mlspp](https://github.com/cisco/mlspp) (provided as submodule, required for voice E2EE) ### TODO: * User activities * More server management stuff * A bunch of other stuff probably ### Styling Show all styles #### CSS selectors | Selector | Description | |--------------------------------|---------------------------------------------------------------------------------------------------| | `.app-window` | Applied to all windows. This means the main window and all popups | | `.app-popup` | Additional class for `.app-window`s when the window is not the main window | | `.channel-list` | Container of the channel list | | `.messages` | Container of user messages | | `.message-container` | The container which holds a user's messages | | `.message-container-author` | The author label for a message container | | `.message-container-timestamp` | The timestamp label for a message container | | `.message-container-avatar` | Avatar for a user in a message | | `.message-container-extra` | Label containing BOT/Webhook | | `.message-text` | The text of a user message | | `.pending` | Extra class of .message-text for messages pending to be sent | | `.failed` | Extra class of .message-text for messages that failed to be sent | | `.message-attachment-box` | Contains attachment info | | `.message-reply` | Container for the replied-to message in a reply (these elements will also have .message-text set) | | `.message-input` | Applied to the chat input container | | `.replying` | Extra class for chat input container when a reply is currently being created | | `.reaction-box` | Contains a reaction image and the count | | `.reacted` | Additional class for reaction-box when the user has reacted with a particular reaction | | `.reaction-count` | Contains the count for reaction | | `.completer` | Container for the message completer | | `.completer-entry` | Container for a single entry in the completer | | `.completer-entry-label` | Contains the label for an entry in the completer | | `.completer-entry-image` | Contains the image for an entry in the completer | | `.embed` | Container for a message embed | | `.embed-author` | The author of an embed | | `.embed-title` | The title of an embed | | `.embed-description`

GitHub Issues· 0 open

View all on GitHub

No open issues yet, or sync has not completed.

Highlights

  • •Not Electron
  • •Voice support
  • •Handles most types of chat messages including embeds, images, and replies
  • •Completely styleable/customizable
  • •Identifies to Discord as the web client unlike other clients so less likely to be falsely flagged as spam<sup>1</sup>
  • •Set status
  • •Unread and mention indicators
  • •Notifications (non-Windows)
  • •Start new DMs and group DMs
  • •View user profiles (notes, mutual servers, mutual friends)

> Tags

C++alternativeclientcppdiscord

No comments yet. Be the first to share.

> Details

PublishedAug 1, 2026
UpdatedSep 17, 2026
Category开发工具
PricingOpen source

> Related tools

V
VS Code
流行的开源代码编辑器
G
Git
分布式版本控制系统
V
Vite
下一代前端构建工具