2021-03-12 06:32:12 +00:00
|
|
|
### Abaddon
|
|
|
|
---
|
|
|
|
Alternative Discord client made in C++ with GTK
|
2020-11-16 02:00:20 +00:00
|
|
|
|
2021-03-12 06:32:12 +00:00
|
|
|
<img src="/.readme/s3.png">
|
|
|
|
|
2021-11-25 03:24:40 +00:00
|
|
|
<a href="https://discord.gg/wkCU3vuzG5"><img src="https://discord.com/api/guilds/858156817711890443/widget.png?style=shield"></a>
|
2021-06-26 07:18:50 +00:00
|
|
|
|
2021-03-12 06:32:12 +00:00
|
|
|
Current features:
|
2022-04-07 06:17:59 +00:00
|
|
|
|
2021-03-12 06:32:12 +00:00
|
|
|
* Not Electron
|
|
|
|
* Handles most types of chat messages including embeds, images, and replies
|
|
|
|
* Completely styleable/customizable with CSS (if you have a system GTK theme it won't really use it though)
|
2021-09-21 05:48:49 +00:00
|
|
|
* Identifies to Discord as the web client unlike other clients so less likely to be falsely flagged as spam<sup>1</sup>
|
2021-03-12 06:32:12 +00:00
|
|
|
* Set status
|
2022-01-27 05:15:26 +00:00
|
|
|
* Unread and mention indicators
|
2021-03-12 06:32:12 +00:00
|
|
|
* 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
|
2021-03-18 03:55:41 +00:00
|
|
|
* Manage emojis
|
2021-03-12 06:32:12 +00:00
|
|
|
* View audit log
|
|
|
|
* Emojis<sup>2</sup>
|
2021-09-21 05:48:49 +00:00
|
|
|
* Thread support<sup>3</sup>
|
2021-03-12 06:32:12 +00:00
|
|
|
* Animated avatars, server icons, emojis (can be turned off)
|
2021-09-21 05:48:49 +00:00
|
|
|
|
2022-10-23 02:56:07 +00:00
|
|
|
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
|
2022-04-07 06:17:59 +00:00
|
|
|
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
|
2022-08-07 20:15:47 +00:00
|
|
|
stops this) as well as in the headers of all requests.<br>
|
|
|
|
|
2022-10-23 02:56:07 +00:00
|
|
|
**See [here](#the-spam-filter)** for things you might want to avoid if you are worried about being caught in the spam
|
|
|
|
filter.
|
2022-04-07 06:17:59 +00:00
|
|
|
|
|
|
|
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.
|
2021-09-21 05:48:49 +00:00
|
|
|
|
2021-03-12 06:32:12 +00:00
|
|
|
### Building manually (recommended if not on Windows):
|
2022-04-07 06:17:59 +00:00
|
|
|
|
|
|
|
#### 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
|
2022-08-07 20:15:47 +00:00
|
|
|
* mingw-w64-x86_64-libhandy
|
2022-04-07 06:17:59 +00:00
|
|
|
2. `git clone --recurse-submodules="subprojects" https://github.com/uowuo/abaddon && cd abaddon`
|
2020-09-09 21:37:09 +00:00
|
|
|
3. `mkdir build && cd build`
|
2022-04-07 06:17:59 +00:00
|
|
|
4. `cmake -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo ..`
|
|
|
|
5. `ninja`
|
2020-09-05 05:09:46 +00:00
|
|
|
|
2021-01-07 07:41:49 +00:00
|
|
|
#### Mac:
|
2022-04-07 06:17:59 +00:00
|
|
|
|
2022-06-06 19:07:59 +00:00
|
|
|
1. `git clone https://github.com/uowuo/abaddon --recurse-submodules="subprojects" && cd abaddon`
|
2022-08-07 20:15:47 +00:00
|
|
|
2. `brew install gtkmm3 nlohmann-json libhandy`
|
2022-06-06 19:07:59 +00:00
|
|
|
3. `mkdir build && cd build`
|
|
|
|
4. `cmake ..`
|
|
|
|
5. `make`
|
2021-01-07 07:41:49 +00:00
|
|
|
|
|
|
|
#### Linux:
|
2022-04-07 06:17:59 +00:00
|
|
|
|
2022-10-18 05:48:45 +00:00
|
|
|
1. Install dependencies
|
|
|
|
* On Ubuntu 20.04 (Focal) and newer:
|
|
|
|
```Shell
|
|
|
|
$ sudo apt install g++ cmake libgtkmm-3.0-dev libcurl4-gnutls-dev libsqlite3-dev libssl-dev nlohmann-json3-dev
|
|
|
|
```
|
2022-06-06 19:07:59 +00:00
|
|
|
2. `git clone https://github.com/uowuo/abaddon --recurse-submodules="subprojects" && cd abaddon`
|
2021-01-07 07:41:49 +00:00
|
|
|
3. `mkdir build && cd build`
|
|
|
|
4. `cmake ..`
|
|
|
|
5. `make`
|
2020-09-05 05:09:46 +00:00
|
|
|
|
2021-09-21 05:48:49 +00:00
|
|
|
### Downloads:
|
|
|
|
|
|
|
|
Latest release version: https://github.com/uowuo/abaddon/releases/latest
|
|
|
|
|
|
|
|
**CI:**
|
|
|
|
|
2022-04-15 03:26:27 +00:00
|
|
|
- Windows: [here](https://nightly.link/uowuo/abaddon/workflows/ci/master/build-windows-msys2-MinSizeRel.zip)
|
2022-04-07 06:17:59 +00:00
|
|
|
- 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 18.04 + gcc9
|
2021-01-18 06:35:27 +00:00
|
|
|
|
2022-11-15 07:47:16 +00:00
|
|
|
> **Warning**: If you use Windows, make sure to start from the `bin` directory
|
2021-07-01 01:45:26 +00:00
|
|
|
|
2021-09-21 05:48:49 +00:00
|
|
|
On Linux, `css` and `res` can also be loaded from `~/.local/share/abaddon` or `/usr/share/abaddon`
|
2021-07-01 01:45:26 +00:00
|
|
|
|
2022-04-07 06:17:59 +00:00
|
|
|
`abaddon.ini` will also be automatically used if located at `~/.config/abaddon/abaddon.ini` and there is
|
|
|
|
no `abaddon.ini` in the working directory
|
|
|
|
|
2022-08-07 20:15:47 +00:00
|
|
|
#### The Spam Filter
|
|
|
|
|
2022-10-23 02:56:07 +00:00
|
|
|
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:
|
2022-08-07 20:15:47 +00:00
|
|
|
|
|
|
|
* 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
|
|
|
|
|
2022-04-07 06:17:59 +00:00
|
|
|
#### Dependencies:
|
2020-09-09 21:37:09 +00:00
|
|
|
|
2020-08-26 02:10:39 +00:00
|
|
|
* [gtkmm](https://www.gtkmm.org/en/)
|
|
|
|
* [JSON for Modern C++](https://github.com/nlohmann/json)
|
|
|
|
* [IXWebSocket](https://github.com/machinezone/IXWebSocket)
|
2021-01-23 21:07:03 +00:00
|
|
|
* [libcurl](https://curl.se/)
|
2020-09-05 05:09:46 +00:00
|
|
|
* [zlib](https://zlib.net/)
|
2020-12-10 22:15:15 +00:00
|
|
|
* [SQLite3](https://www.sqlite.org/index.html)
|
2022-08-07 20:15:47 +00:00
|
|
|
* [libhandy](https://gnome.pages.gitlab.gnome.org/libhandy/) (optional)
|
2020-09-09 22:32:45 +00:00
|
|
|
|
2020-11-16 02:00:20 +00:00
|
|
|
### TODO:
|
2022-04-07 06:17:59 +00:00
|
|
|
|
2020-11-16 02:00:20 +00:00
|
|
|
* Voice support
|
2021-03-12 06:32:12 +00:00
|
|
|
* User activities
|
|
|
|
* More server management stuff
|
2020-11-16 02:00:20 +00:00
|
|
|
* A bunch of other stuff
|
|
|
|
|
2020-09-09 22:32:45 +00:00
|
|
|
### Styling
|
2022-04-07 06:17:59 +00:00
|
|
|
|
2020-09-09 22:32:45 +00:00
|
|
|
#### CSS selectors
|
2022-04-07 06:17:59 +00:00
|
|
|
|
2022-12-01 00:56:22 +00:00
|
|
|
**`.app-window`** - Applied to all windows. This means the main window and all popups
|
2022-11-15 07:47:16 +00:00
|
|
|
**`.app-popup`** - Additional class for `.app-window`s when the window is not the main window
|
|
|
|
|
|
|
|
**`.channel-list`** - Container of the channel list
|
|
|
|
|
2022-12-01 00:56:22 +00:00
|
|
|
**`.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
|
2022-11-15 07:47:16 +00:00
|
|
|
**`.reaction-count`** - Contains the count for reaction
|
|
|
|
|
2022-12-01 00:56:22 +00:00
|
|
|
**`.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
|
2022-11-15 07:47:16 +00:00
|
|
|
**`.completer-entry-image`** - Contains the image for an entry in the completer
|
|
|
|
|
2022-12-01 00:56:22 +00:00
|
|
|
**`.embed`** - Container for a message embed
|
|
|
|
**`.embed-author`** - The author of an embed
|
|
|
|
**`.embed-title`** - The title of an embed
|
|
|
|
**`.embed-description`** - The description of an embed
|
|
|
|
**`.embed-field-title`** - The title of an embed field
|
|
|
|
**`.embed-field-value`** - The value of an embed field
|
2022-11-15 07:47:16 +00:00
|
|
|
**`.embed-footer`** - The footer of an embed
|
|
|
|
|
2022-12-01 00:56:22 +00:00
|
|
|
**`.members`** - Container of the member list
|
|
|
|
**`.members-row`** - All rows within the members container
|
|
|
|
**`.members-row-label`** - All labels in the members container
|
|
|
|
**`.members-row-member`** - Rows containing a member
|
|
|
|
**`.members-row-role`** - Rows containing a role
|
2022-11-15 07:47:16 +00:00
|
|
|
**`.members-row-avatar`** - Contains the avatar for a row in the member list
|
|
|
|
|
2022-12-01 00:56:22 +00:00
|
|
|
**`.status-indicator`** - The status indicator
|
|
|
|
**`.online`** - Applied to status indicators when the associated user is online
|
|
|
|
**`.idle`** - Applied to status indicators when the associated user is away
|
|
|
|
**`.dnd`** - Applied to status indicators when the associated user is on do not disturb
|
2022-11-15 07:47:16 +00:00
|
|
|
**`.offline`** - Applied to status indicators when the associated user is offline
|
|
|
|
|
|
|
|
**`.typing-indicator`** - The typing indicator (also used for replies)
|
2022-04-07 06:17:59 +00:00
|
|
|
|
2022-12-01 00:56:22 +00:00
|
|
|
Used in reorderable list implementation:
|
2022-11-15 07:47:16 +00:00
|
|
|
**`.drag-icon`** **`.drag-hover-top`** **`.drag-hover-bottom`**
|
2021-03-12 06:32:12 +00:00
|
|
|
|
2022-12-01 00:56:22 +00:00
|
|
|
Used in guild settings popup:
|
|
|
|
**`.guild-settings-window`**
|
|
|
|
**`.guild-members-pane-list`** - Container for list of members in the members pane
|
|
|
|
**`.guild-members-pane-info`** - Container for member info
|
2022-11-15 07:47:16 +00:00
|
|
|
**`.guild-roles-pane-list`** - Container for list of roles in the roles pane
|
2022-04-07 06:17:59 +00:00
|
|
|
|
2022-12-01 00:56:22 +00:00
|
|
|
Used in profile popup:
|
|
|
|
**`.mutual-friend-item`** - Applied to every item in the mutual friends list
|
|
|
|
**`.mutual-friend-item-name`** - Name in mutual friend item
|
|
|
|
**`.mutual-friend-item-avatar`** - Avatar in mutual friend item
|
|
|
|
**`.mutual-guild-item`** - Applied to every item in the mutual guilds list
|
|
|
|
**`.mutual-guild-item-name`** - Name in mutual guild item
|
|
|
|
**`.mutual-guild-item-icon`** - Icon in mutual guild item
|
|
|
|
**`.mutual-guild-item-nick`** - User nickname in mutual guild item
|
|
|
|
**`.profile-connection`** - Applied to every item in the user connections list
|
|
|
|
**`.profile-connection-label`** - Label in profile connection item
|
|
|
|
**`.profile-connection-check`** - Checkmark in verified profile connection items
|
|
|
|
**`.profile-connections`** - Container for profile connections
|
|
|
|
**`.profile-notes`** - Container for notes in profile window
|
|
|
|
**`.profile-notes-label`** - Label that says "NOTE"
|
|
|
|
**`.profile-notes-text`** - Actual note text
|
|
|
|
**`.profile-info-pane`** - Applied to container for info section of profile popup
|
|
|
|
**`.profile-info-created`** - Label for creation date of profile
|
|
|
|
**`.user-profile-window`**
|
|
|
|
**`.profile-main-container`** - Inner container for profile
|
|
|
|
**`.profile-avatar`**
|
|
|
|
**`.profile-username`**
|
|
|
|
**`.profile-switcher`** - Buttons used to switch viewed section of profile
|
|
|
|
**`.profile-stack`** - Container for profile info that can be switched between
|
|
|
|
**`.profile-badges`** - Container for badges
|
2022-11-15 07:47:16 +00:00
|
|
|
**`.profile-badge`**
|
2022-04-07 06:17:59 +00:00
|
|
|
|
2021-01-01 06:48:35 +00:00
|
|
|
### Settings
|
2022-04-07 06:17:59 +00:00
|
|
|
|
2022-12-01 00:56:22 +00:00
|
|
|
Settings are configured (for now) by editing abaddon.ini
|
2022-04-07 06:17:59 +00:00
|
|
|
The format is similar to the standard Windows ini format **except**:
|
|
|
|
|
2021-11-24 08:14:41 +00:00
|
|
|
* `#` is used to begin comments as opposed to `;`
|
|
|
|
* Section and key names are case-sensitive
|
|
|
|
|
2022-12-01 00:56:22 +00:00
|
|
|
You should edit these while the client is closed even though there's an option to reload while running
|
|
|
|
This listing is organized by section.
|
2021-01-01 06:48:35 +00:00
|
|
|
For example, memory_db would be set by adding `memory_db = true` under the line `[discord]`
|
|
|
|
|
|
|
|
#### discord
|
2022-04-07 06:17:59 +00:00
|
|
|
|
2022-11-15 07:47:16 +00:00
|
|
|
* **`gateway`** (string) - override url for Discord gateway. must be json format and use zlib stream compression
|
|
|
|
* **`api_base`** (string) - override base url for Discord API
|
|
|
|
* **`memory_db`** (true or false, `default: false`) - if true, Discord data will be kept in memory as opposed to on disk
|
|
|
|
* **`token`** (string) - Discord token used to login, this can be set from the menu
|
|
|
|
* **`prefetch`** (true or false, `default: false`) - if true, new messages will cause the avatar and image attachments to be
|
2022-04-07 06:17:59 +00:00
|
|
|
automatically downloaded
|
2022-12-01 00:56:22 +00:00
|
|
|
* **`autoconnect`** (true or false, `default: false`) - autoconnect to discord
|
2021-01-01 06:48:35 +00:00
|
|
|
|
|
|
|
#### http
|
2022-04-07 06:17:59 +00:00
|
|
|
|
2022-11-15 07:47:16 +00:00
|
|
|
* **`user_agent`** (string) - sets the user-agent to use in HTTP requests to the Discord API (not including media/images)
|
|
|
|
* **`concurrent`** (int, `default: 20`) - how many images can be concurrently retrieved
|
2021-01-01 06:48:35 +00:00
|
|
|
|
|
|
|
#### gui
|
2022-04-07 06:17:59 +00:00
|
|
|
|
2022-11-15 07:47:16 +00:00
|
|
|
* **`member_list_discriminator`** (true or false, `default: true`) - show user discriminators in the member list
|
|
|
|
* **`stock_emojis`** (true or false, `default: true`) - allow abaddon to substitute unicode emojis with images from emojis.bin,
|
2022-04-07 06:17:59 +00:00
|
|
|
must be false to allow GTK to render emojis itself
|
2022-11-15 07:47:16 +00:00
|
|
|
* **`custom_emojis`** (true or false, `default: true`) - download and use custom Discord emojis
|
|
|
|
* **`css`** (string) - path to the main CSS file
|
|
|
|
* **`animations`** (true or false, `default: true`) - use animated images where available (e.g. server icons, emojis, avatars).
|
2022-04-07 06:17:59 +00:00
|
|
|
false means static images will be used
|
2022-11-15 07:47:16 +00:00
|
|
|
* **`animated_guild_hover_only`** (true or false, `default: true`) - only animate guild icons when the guild is being hovered
|
2022-04-07 06:17:59 +00:00
|
|
|
over
|
2022-11-15 07:47:16 +00:00
|
|
|
* **`owner_crown`** (true or false, `default: true`) - show a crown next to the owner
|
|
|
|
* **`unreads`** (true or false, `default: true`) - show unread indicators and mention badges
|
|
|
|
* **`save_state`** (true or false, `default: true`) - save the state of the gui (active channels, tabs, expanded channels)
|
|
|
|
* **`alt_menu`** (true or false, `default: false`) - keep the menu hidden unless revealed with alt key
|
|
|
|
* **`hide_to_tray`** (true or false, `default: false`) - hide abaddon to the system tray on window close
|
2020-09-09 22:32:45 +00:00
|
|
|
|
2021-07-23 04:35:33 +00:00
|
|
|
#### style
|
2022-04-07 06:17:59 +00:00
|
|
|
|
2022-11-15 07:47:16 +00:00
|
|
|
* **`linkcolor`** (string) - color to use for links in messages
|
|
|
|
* **`expandercolor`** (string) - color to use for the expander in the channel list
|
|
|
|
* **`nsfwchannelcolor`** (string) - color to use for NSFW channels in the channel list
|
|
|
|
* **`channelcolor`** (string) - color to use for SFW channels in the channel list
|
|
|
|
* **`mentionbadgecolor`** (string) - background color for mention badges
|
|
|
|
* **`mentionbadgetextcolor`** (string) - color to use for number displayed on mention badges
|
|
|
|
* **`unreadcolor`** (string) - color to use for the unread indicator
|
2021-07-01 01:45:26 +00:00
|
|
|
|
|
|
|
### Environment variables
|
|
|
|
|
2022-11-15 07:47:16 +00:00
|
|
|
* **`ABADDON_NO_FC`** (Windows only) - don't use custom font config
|
|
|
|
* **`ABADDON_CONFIG`** - change path of configuration file to use. relative to cwd or can be absolute
|