The developer of cordless (another 3rd party client) has had his account banned for using a 3rd party client.
It is very possible Discord is now actively enforcing TOS violations, I cannot recommending using this project with an account you are not ok with loosing
Usage of self-tokens is a violation of Discord's TOS
This client makes use of the "user api" and is essentially a self-bot. This client does not abuse the api however it is still a violation of the TOS.
Use at your own risk, using this program could get your account or ip disabled, banned, etc.
A plugin that adds Discord to Weechat
(Beta)
This branch (master
) is now in maintenance mode as the plugin is being rewritten in the mk3
branch.
Binaries are automatically compiled for macOS and linux on Github Actions
Dependencies:
weechat-dev
, or sometimes just weechat
includes them.Then just run make install
cd weechat-discord # or wherever you cloned it
make install
This will produce a shared object called target/release/libweecord.so
(or .dylib
on macos). Place it in your weechat plugins directory, which is probably located at either ~/.weechat/plugins
or ${XDG_DATA_HOME}/weechat/plugins
(may need to be created)
The Makefile has several other development commands:
make # (same as make all) just runs that `cargo build --release` command, produces weecord.so
make install # builds and copies the .so to the weechat plugins dir, creating the dir if required
make test # install to ./test_dir/ and opens weechat with that dir
make run # installs and runs `weechat -a` (-a means "don't autoconnect to servers")
Quitting weechat before installing is recommended
You will need to obtain a login token. You can either use a python script to find the tokens, or try and grab them manually.
find_token.py
is a simple python3 script to search the computer for localstorage databases. It will present a list of all found databases.
If ripgrep is installed it will use that, if not, it will use find
.
With the discord app open in your browser:
1) Open Devtools (ctrl+shift+i or cmd+opt+i)
2) Navigate to the Network tab
3) View only WebSockets by clicking "WS" in the inspector bar
4) Reload the page and select the "gateway.discord.gg" connection
5) Navigate to the "Response" tab of the request
6) The first or second message should begin with {"op":2,"d":{"token":"<your token here>"...
First, you either need to load the plugin, or have it set to autoload.
Then, set your token:
/discord token 123456789ABCDEF
This saves the discord token in <weechatdir>/plugins.conf
, so make sure not to commit this file or share it with anyone.
You can also secure your token with secure data.
If you saved your token as discord_token
then you would run
/discord token ${sec.data.discord_token}
Then, connect:
/discord connect
If you want to always connect on load, you can enable autostart with:
/discord autostart
Note you may also have to adjust a few settings for best use:
weechat.bar.status.items -> replace buffer_name with buffer_short_name
# additionally, buffer_guild_name, buffer_channel_name, and buffer_discord_full_name bar
# items can be used
plugins.var.python.go.short_name -> on (if you use go.py)
If you want a more irc-style interface, you can enable irc-mode:
/discord irc-mode
In irc-mode, weecord will not automatically "join" every Discord channel. You must join a channel using the
/discord join <guild-name> [<channel-name>]
command.
Watched channels:
You can use /discord watch <guild-name> [<channel-name>]
to start watching a channel or entire guild.
This means that if a message is received in a watched channel, that channel will be joined and added to the nicklist.
Autojoin channels:
You can use /discord autojoin <guild-name> [<channel-name>]
to start watching a channel or entire guild.
Any channel or guild marked as autojoin will be automatically joined when weecord connects.
A typing indicator can be added with the discord_typing
bar item by appending ,discord_typing
to weechat.bar.status.items
.
Messages can be edited and deleted using ed style substitutions.
To edit:
s/foo/bar/
To delete:
s///
An optional message id can also be passed to target the nth most recent message:
3s///
Weechat does not search for mac dynamic libraries (.dylib) by default, this can be fixed by adding dylibs to the plugin search path,
/set weechat.plugin.extension ".so,.dll,.dylib"