uowuo / abaddon Goto Github PK
View Code? Open in Web Editor NEWAn alternative Discord client with voice support made with C++ and GTK 3
License: GNU General Public License v3.0
An alternative Discord client with voice support made with C++ and GTK 3
License: GNU General Public License v3.0
I know that you can view and add reactions already displayed, but is it possible to add reactions of your own?
right now its an ISO 8601 timestamp which is gross and unreadable
So I've been using abaddon for quite some time now and I still like it.
However, I find it hard to follow changes in the software and–since I had to package the software myself–I have trouble following what changes might require an adjustment of the build system (e.g. #29, which removes the need for me to create a wrapper script as a workaround) and–more importantly–when there are notable changes that might require me to update the software, since I don't get notified about updates without following all the commits that happen on master.
Thus, I propose creating releases, e.g. whenever there are notable changes or when some time has gone by without a new release, but new commits (features, bugfixes, changes) have been added to master since the last release. This makes maintenance downstream much easier, since distro maintainers just have to wait for new releases (in GitHub, this is as easy as enabling notifications for new releases) and users don't have to watch for new commits to decide when to re-build their package to get the latest version (which even is a bit counter-intuitive, from a user's perspective).
For development, planning releases with sets of issues to resolve is also a good way to organize in which order issues shall be resolved (e.g. bugfixes for the next patch-level bump, non-breaking changes for the next minor-level bump, breaking changes for the next major-level bump).
Running latest vcpkg, but apparently abaddon is based upon <GTK4 and <libsigc++3. Latest vcpkg pulls GTK4 and libsigc++3. I was able to modify the libsigc++ conflicts since it's a simple syntactic change fixable with a bunch of find replace operations (https://www.murrayc.com/permalink/2016/03/17/libsigc-stdfunction-style-syntax/), but as I tried to implement GTK4 style menu items I gave up.
If you don't have plans, what git version of vcpkg are you running so I can downgrade to the correct packages? Ttrying to compile this on x86/i686.
There is no text after the "Mac/Linux: " build instructions
channel tabs are like the things at the top of the browser. this issue is for me to keep track of stuff because i am bad at remembering things, and maybe if someone comes along they can chime in.
this is what they look like right now (ugly). it uses libhandy but it will be an optional dependency
stuff:
Please provide a license that would make the project legal to use and redistribute. Of course, the best if it would comply the Open Source Definition by OSI and Free Software Definition by FSF. That will make it possible to add abaddon to most linux distros.
it should do nothing instead
It will be really good if there is a feature to be able to Auto-scroll / Middle Click Scroll just like on the official Discord Windows Client. If you’re not sure what what Auto-scroll / Middle Click Scroll is, you can check it out by just using Firefox.
Firefox has a feature called “Use auto-scrolling” when enabled, when you middle click on a page you will be able to scroll instead of pasting text ( in Linux case ) or do nothing ( in macOS case ).
Hi! I'm having an issue trying to launch the application. Since I'm running Arch, I installed the it through the AUR, but whenever I try to open the app I get an error, "The Discord cache could not be created!" When I launch it from a terminal it also gives me "failed to clear database: database disk image is malformed"
So glad to see this project though!!
if click [enter] in dm with no text yours app crash
the same if you spam in dm's multiple times like.
a
a
a
b
b
b
...
And using discord token in this discord wrapper , orginal one log me off
I've installed libgtkmm-3.0-dev, libcurl4-gnutls-dev, and nlohmann-json and git clone --recurse-submodules="subprojects" https://github.com/uowuo/abaddon && cd abaddon mkdir build && cd build && cmake .. && make
gives me:
[100%] Linking CXX executable abaddon
/bin/ld: /usr/local/lib/libixwebsocket.a(IXGzipCodec.cpp.o): in function `ix::gzipCompress(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
IXGzipCodec.cpp:(.text+0x1e): undefined reference to `libdeflate_alloc_compressor'
/bin/ld: IXGzipCodec.cpp:(.text+0x55): undefined reference to `libdeflate_gzip_compress_bound'
/bin/ld: IXGzipCodec.cpp:(.text+0xa0): undefined reference to `libdeflate_gzip_compress'
/bin/ld: IXGzipCodec.cpp:(.text+0xb0): undefined reference to `libdeflate_free_compressor'
/bin/ld: /usr/local/lib/libixwebsocket.a(IXGzipCodec.cpp.o): in function `ix::gzipDecompress(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&)':
IXGzipCodec.cpp:(.text+0x1a8): undefined reference to `libdeflate_alloc_decompressor'
/bin/ld: IXGzipCodec.cpp:(.text+0x237): undefined reference to `libdeflate_gzip_decompress'
/bin/ld: IXGzipCodec.cpp:(.text+0x246): undefined reference to `libdeflate_free_decompressor'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/abaddon.dir/build.make:1225: abaddon] Error 1
make[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/abaddon.dir/all] Error 2
make: *** [Makefile:91: all] Error 2
Seems like ixwebsocket has trouble finding libdeflate. I've tried adding -ldeflate
in various parts of the code but it hasn't helped.
CMake Error at CMakeLists.txt:21 (add_subdirectory):
The source directory
/Users/atg/abaddon/subprojects/ixwebsocket
does not contain a CMakeLists.txt file.
I'm trying to compile on arch and I just keep getting this issue:
usr/bin/ld: /usr/local/lib/libixwebsocket.a(IXSocketOpenSSL.cpp.o): undefined reference to symbol 'SSL_load_client_CA_file@@OPENSSL_1_1_0'
/usr/bin/ld: /usr/lib/libssl.so.1.1: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/abaddon.dir/build.make:1206: abaddon] Error 1
make[2]: Leaving directory '/home/andrew/programs/abaddon-git/src/build'
make[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/abaddon.dir/all] Error 2
make[1]: Leaving directory '/home/andrew/programs/abaddon-git/src/build'
make: *** [Makefile:91: all] Error 2
make: Leaving directory '/home/andrew/programs/abaddon-git/src/build'_
I tried cloning directly from the repository, and also tried the arch AUR package for abaddon
Do you have a discord server where we can ask for help or support?
It seems I am experiencing the same issue described #26. Whenever I open anything under direct messages, abaddon crashes. I am using Arch Linux with everything fully updated. I installed abaddon using the 'abaddon-git' AUR package.
Here is the output:
sending {"d":null,"op":1}
sending {"d":{"capabilities":125,"client_state":{"guild_hashes":{},"highest_last_message_id":"0","read_state_version":0,"user_guild_settings_version":-1},"compress":false,"presence":{"activities":[],"afk":false,"since":0,"status":"online"},"properties":{"browser":"Chrome","browser_user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36","browser_version":"67.0.3396.87","client_build_number":91734,"client_event_source":null,"device":"","os":"Windows","os_version":"10","referrer":"","referrer_current":"","referring_domain":"","referring_domain_current":"","release_channel":"stable","system_locale":"en-US"},"token":"<SECRET>"},"op":2}
/usr/include/c++/11.1.0/optional:447: constexpr const _Tp& std::_Optional_base_impl<_Tp, _Dp>::_M_get() const [with _Tp = Snowflake; _Dp = std::_Optional_base<Snowflake, true, true>]: Assertion 'this->_M_is_engaged()' failed.
/usr/bin/abaddon: line 3: 2057528 Aborted (core dumped) ./abaddon
To get this output, I just launched abaddon from the command line and clicked on a DM.
Hello!
YFYI I created a package to ease the installation of abaddon on Arch Linux and uploaded it to the Arch User Repository: https://aur.archlinux.org/packages/abaddon-git
Feel free to close this issue without any further comments.
Thank you for creating abaddon!
Hi there!
First of all, great client.
I'd like to suggest ability to insert images in messages :).
Keep up good work!
Hi, I am on ArchLinux with the newest version of abaddon installed using the "abbadon-git" package. When I close abbadon, I get this message "failed to save settings KeyFile: Failed to create file “./abaddon.ini.91VJE1”: Permission denied". The symptom of this is that I am unable to set my token from the UI.
It's a bit annoying that every time I start abaddon, I have to re-open the chats I had opened last time and collapse categories I had collapsed last time.
Thus, I'd really love to see abaddon cache some parts of the application state across application startups. This could e.g. be just done in a file inside ~/.cache/
. I honestly don't know where most applications save such a state, but the cache directory is definitely not the wrong place, although settings might get lost when the cache gets cleared (which some people do manually, if the cache directory becomes too big).
This seems to be similar to the issue I had in #37. When I scroll up to the point that new messages need to be fetched, abaddon crashes. Just like #37, it only happens on Arch Linux with the AUR packages and not when I compile the program myself.
Output:
sending {"d":null,"op":1}
sending {"d":{"capabilities":125,"client_state":{"guild_hashes":{},"highest_last_message_id":"0","read_state_version":0,"user_guild_settings_version":-1},"compress":false,"presence":{"activities":[],"afk":false,"since":0,"status":"online"},"properties":{"browser":"Chrome","browser_user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36","browser_version":"67.0.3396.87","client_build_number":91734,"client_event_source":null,"device":"","os":"Windows","os_version":"10","referrer":"","referrer_current":"","referring_domain":"","referring_domain_current":"","release_channel":"stable","system_locale":"en-US"},"token":"<TOKEN>"},"op":2}
Unknown event SESSIONS_REPLACE
GET /channels/302289852991537154/messages?limit=50
GET /channels/302289852991537154/messages?limit=50&before=879868259954987068
/usr/include/c++/11.1.0/optional:440: constexpr _Tp& std::_Optional_base_impl<_Tp, _Dp>::_M_get() [with _Tp = Snowflake; _Dp = std::_Optional_base<Snowflake, true, true>]: Assertion 'this->_M_is_engaged()' failed.
/usr/bin/abaddon: line 3: 121519 Aborted (core dumped) ./abaddon
If I click on a DM or a guild channel abaddon crashes.
I am on arch linux.
I installed the abaddon-git
AUR package and my system is up to date
here is the output
neo@fukushima ~
λ abaddon
sending {"d":{"capabilities":61,"client_state":{"guild_hashes":{},"highest_last_message_id":"0","read_state_version":0,"user_guild_settings_version":-1},"compress":false,"presence":{"activities":[],"afk":false,"since":0,"status":"online"},"properties":{"browser":"","browser_user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36","browser_version":"67.0.3396.87","client_build_number":82826,"client_event_source":null,"device":"Chrome","os":"Windows","os_version":"10","referrer":"","referrer_current":"","referring_domain":"","referring_domain_current":"","release_channel":"stable","system_locale":"en-US"},"token":"[REDACTED]"},"op":2}
sending {"d":null,"op":1}
Unknown event SESSIONS_REPLACE
GET /channels/662673667809083452/messages?limit=50
sending {"d":{"activities":true,"channels":{"662673667809083452":[[0,99],[100,199]]},"guild_id":"638020853107523604","typing":true},"op":14}
/usr/bin/abaddon: line 3: 7808 Segmentation fault (core dumped) ./abaddon
neo@fukushima ~ 6s
λ abaddon
sending {"d":null,"op":1}
sending {"d":{"capabilities":61,"client_state":{"guild_hashes":{},"highest_last_message_id":"0","read_state_version":0,"user_guild_settings_version":-1},"compress":false,"presence":{"activities":[],"afk":false,"since":0,"status":"online"},"properties":{"browser":"","browser_user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36","browser_version":"67.0.3396.87","client_build_number":82826,"client_event_source":null,"device":"Chrome","os":"Windows","os_version":"10","referrer":"","referrer_current":"","referring_domain":"","referring_domain_current":"","release_channel":"stable","system_locale":"en-US"},"token":"[REDACTED]"},"op":2}
/usr/include/c++/10.2.0/optional:448: constexpr const _Tp& std::_Optional_base_impl<_Tp, _Dp>::_M_get() const [with _Tp = Snowflake; _Dp = std::_Optional_base<Snowflake, true, true>]: Assertion 'this->_M_is_engaged()' failed.
/usr/bin/abaddon: line 3: 7843 Aborted (core dumped) ./abaddon
The first one is the guild channel, second is the DM.
If there is a need for more information, just ask.
I hope I didn't just leak my token
I'm getting an error saying
/usr/local/include/pango-1.0/pango/pango-coverage.h:28:10: fatal error: 'hb.h' file not found
But I already have harfbuzz installed. What's wrong?
There is currently no functional discord app for pinephone, this app would be the perfect fit.
After some testing I've found that the app runs amazingly and the only real change thats needed for smooth pinephone support is collapsing the channel/member areas when the window is low width.
The only other issue I've found on pinephone is sometimes when I try to tap on channels to select them it will try to select the text instead of swap to the channel.
Code markdown seems to be unimplemented, with and without syntax highlighting.
Abaddon:
Discord:
Hypertext too (here combined with code markdown). That's an embed only feature tho:
Abaddon:
EDIT: Hadn't even noticed, but it seems like pretty much no markdown is supported. Thought those two were outliers.
In the official Discord client, there's a white dot on the server list for any server with messages you haven't read yet, and the specific channels are boldened in white. So, is it possible to do that here?
Support for keybindings with the ability to customize them would be nice.
these are pretty important but i don't know of a good way to display an unread indicator in the UI. having something floating on the right like the stock client seems to be pretty difficult in GTK given the current layout (mainly because of the GtkPaned)
When I click "Connect" button, abaddon do not connect and prints the following messages to stderr:
javi@Victor ~/P/a/a/build ((v0.1.3))> ./abaddon
error handling message (opcode 0): [json.exception.type_error.302] type must be number, but is null
Unknown event VOICE_STATE_UPDATE
Unknown event CHANNEL_UNREAD_UPDATE
Unknown event VOICE_STATE_UPDATE
Unknown event VOICE_STATE_UPDATE
Unknown event VOICE_STATE_UPDATE
Unknown event VOICE_STATE_UPDATE
Unknown event VOICE_STATE_UPDATE
Unknown event VOICE_STATE_UPDATE
It seems to only happen with version 0.1.3.
Tell if I can do anything to provide you more information about the error.
Thank you for all your work!
First of all: nice work!
I just found out about abaddon and it looks very nice.
However, while trying to package it properly, I noticed a two major problems:
$(pwd)/abaddon.ini
.css
and res
pointing to the respective source directories (or rather having their contents).While the current approce surely is comfortable for a developer, it makes packaging the software hard, as a system-wide installation can not allow config or resource files to sit in /usr/bin
, where the executable has to sit (at the very least, config files must not sit there as they need to be writable by the user who executes the binary). My current solution is this tiny wrapper script, that does the job, but is not a suitable solution, but rather a workaround:
#!/bin/sh
set -e
ABADDON_CONFIG_DIR="${HOME}/.config/abaddon"
ABADDON_RES_DIR="/usr/share/abaddon"
ABADDON_BIN="/usr/share/abaddon/abaddon"
mkdir -p "${ABADDON_CONFIG_DIR}"
cd "${ABADDON_CONFIG_DIR}"
ln -sf "${ABADDON_RES_DIR}"/css
ln -sf "${ABADDON_RES_DIR}"/res
exec "${ABADDON_BIN}"
The easiest solution would probably be to just take compile-time parameters (e.g. via a config.h.in
and CMake's configure_file
) to specify default locations for resource directories or implementing a fallback to /usr/share/abaddon
(which is probably the resource directory appropriate for most Linux distributions).
For a config file, one might implement a mechanism to first check for a config file in pwd
and then fall back to e.g. ~/.config/abaddon.ini
or ~/.config/abaddon/abaddon.ini
.
To support multiple configuration files, one might also allow passing the config file location via an environment variable or command-line parameter (the latter one is probably the easier to implement). The same goes for the resource directory, but it's rather unnecessary for that one, as one should always use the resources which are packaged together with the installed binary.
fonts are super finicky because gtk is lame, at least on windows
also affects reactions ending in variation selectors
Me again :D
I've tried extracting the vendored dependencies and I had luck extracting IXWebsocket.
However, when I tried using an external SimpleIni, I got these compiler errors:
$ LANG=c ninja
[1/65] Building CXX object CMakeFiles/abaddon.dir/abaddon.cpp.o
FAILED: CMakeFiles/abaddon.dir/abaddon.cpp.o
/usr/bin/c++ -I/usr/include/simpleini -I. -I/usr/include/gtkmm-3.0 -I/usr/lib64/gtkmm-3.0/include -I/usr/include/gdkmm-3.0 -I/usr/lib64/gdkmm-3.0/include -I/usr/include/gtk-3.0 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/glibmm-2.4 -I/usr/lib64/glibmm-2.4/include -I/usr/include/giomm-2.4 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/lib64/giomm-2.4/include -I/usr/include/pangomm-1.4 -I/usr/lib64/pangomm-1.4/include -I/usr/include/pango-1.0 -I/usr/include/harfbuzz -I/usr/include/cairo -I/usr/include/freetype2 -I/usr/include/cairomm-1.0 -I/usr/lib64/cairomm-1.0/include -I/usr/include/atkmm-1.6 -I/usr/lib64/atkmm-1.6/include -I/usr/include/atk-1.0 -I/usr/include/sigc++-2.0 -I/usr/lib64/sigc++-2.0/include -O3 -DNDEBUG -std=gnu++17 -MD -MT CMakeFiles/abaddon.dir/abaddon.cpp.o -MF CMakeFiles/abaddon.dir/abaddon.cpp.o.d -o CMakeFiles/abaddon.dir/abaddon.cpp.o -c ../abaddon.cpp
In file included from ../abaddon.cpp:13:
../dialogs/verificationgate.hpp:4:10: fatal error: ../../discord/objects.hpp: No such file or directory
4 | #include "../../discord/objects.hpp"
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
What is interesting is that a file in .../dialogs
wants to include a file in .../discord
, but has ../../discord
in its #include
statement.
This only happens if the build configuration is patched not to use the submodules. The relevant change is:
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 82d405f..d0e775e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -23,7 +23,8 @@ if (NOT IXWEBSOCKET_LIBRARY)
include_directories(IXWEBSOCKET_INCLUDE_DIRS)
endif()
-include_directories(thirdparty/simpleini)
+#include_directories(thirdparty/simpleini)
+include_directories("/usr/include/simpleini")
if(MINGW OR WIN32)
link_libraries(ws2_32)
Thus, include_directories(thirdparty/simpleini)
not only makes the submodule files available in the build, but is also a requirement for building files unrelated to simpleini.
The workaround is simple – just add a random directory two levels below the repository root to the include path.
The fix, however, involves adjusting a bunch of files which I haven't identified yet. I just noticed – upon trying to fix .../dialogs/verificationgate.hpp
– that there are multiple occurences.
I recommend just adding ${CMAKE_CURRENT_SOURCE_DIR}
and make all include statements of project files (not vendored dependencies!) relative to the repository root. This avoids the hassle of figuring out what ../discord/xyz.hpp
and similar mean when reading through the source code, creates a uniform look of all #include
statements (thus improving the code style as well!) and – of course – avoids errors with messed up include paths like above very unlikely, if not impossible.
So, it is not a bug in the way this software is usually built, but should still be considered. Vendoring dependencies – while comfortable for software developers – is not very welcome to some distro maintainers as it introduces the problem that not only the package maintainers, but also the software developers have to keep an eye on software releases (and thus potential security fixes!) for the vendored dependencies. After all, keeping an application with network access secure and up to date is very important.
You can't hide channels. in the official client you would do this by muting them and then setting it to hide muted channels. i find this approch a little stupid because i think it would be nicer to have the ability to mute OR hide channels.
When i choose a channel, a rules popup comes up with the rules and a "Accept" button every single time, even though i am already in the server and accepted those said rules.
should ignore unknown stuff or maybe be stored per-user id
I pasted my token in the set token dialogue and the Connect option in the menu stayed grayed out. After restarting Abaddon, the token shows up in ~/.config/abaddon/abaddon.ini
, but the Connect option is still grayed out.
I'm running Arch Linux with abaddon installed from the AUR and from git. When running the abaddon binary, I get the error "The Discord cache could not be created!'
any vc integration?
So, running abaddon for a few days now, I've noticed that sometimes the gateway connection gets closed. While this is a normal side-effect of having connections over the Internet, this gets annoying if I manually have to re-connect every time this happens. And, unfortunately, this sometimes happens several times in a few hours (which is a bit too much for my very stable network connection, but I think this is just the Discord server initiating a disconnect rather than the transport networks' effects).
I suggest automatic reconnects with something like an exponential backoff in case the disconnects happen more frequently. Ideal would be to have a behavior similar to the Discord web application, but since we don't know for sure how that one behaves, we can just assume the behavior. And usually, exponential backoff is a good tradeoff between having fast reconnects when it's possible (i.e. when the disconnects happen for a minor reason, like getting a new IPv4 address) and not flooding the network/server with reconnection attempts when the network/server doesn't allow a reconnect. This could be implemented in the hope that it doesn't make the Discord server suspicious of us having a custom client and still allowing fast automatic reconnects where applicable.
Is this planned or?
every time you click on an image, it opens in the browser. in the official client, it opens a bigger view of the picture. i like it better that way but maybe still have the option to make it behave the other way.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.