A Discord to XMPP bridge that tries to look as native in each of the two chat systems as possible. This repo is a codeberg mirror. https://git.polynom.me/PapaTutuWawa/xmpp-discord-bridge
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Alexander "PapaTutuWawa 757976c8f6 main: Remove Discord webhooks if they are not authenticated 7 months ago
xmpp_discord_bridge main: Remove Discord webhooks if they are not authenticated 7 months ago
.gitignore misc: Update .gitignore 1 year ago
LICENSE docs: Add readme and License 1 year ago
README.md docs: Fix typo in the toml documentation 7 months ago
setup.py repo: Pin dependencies 7 months ago



xmpp-discord-bridge's goal is to be a highly integrated bridge between XMPP and Discord.


  • Uni-directional bridging of Discord reactions to XMPP: Currently without XEP-0424, but with a "compat" mode
  • Bi-directional bridging of media using Webhook embeds and OOB data
  • Uni-directional bridging of Discord presence to XMPP
  • Puppetering support on the side of XMPP
  • Automatic webhook creation
  • Uni-directional sync of the Discord channel's topic
  • XMPP Avatar spoofing on the Discord side
  • Support for proxying media sent via Discord (With this miniproxy)


The bridge can be configured via config.toml at either the current working directory or /etc/xmpp-discord-bridge/config.toml.

jid = "discord.server.example" # JID of the server component
secret = "secret" # Component secret
server = "server.example" # Address of the actual XMPP server
port = 5869 # Component port
discord_token "...." # Token of your Discord bot

# If a message is reacted to, send the following to the MUC:
# > [Message content]
# + :someemoji:
reactions_compat = true

# Use the XMPP user's avatar in the webhook. For options, see
# the [avatars] section
relay_xmpp_avatars = false

# When a user is mentioned, also add the display name infront of the message body, e.g.
# SomeUser, PapaTutuWawa: Hello @SomeUser and @PapaTutuWawa
muc_mention_compat = true

# If true, then xmpp-discord-bridge will also make offline Discord users appear in the MUC.
# If they are offline, then they will have a presence of "xa". If false, then offline users
# will leave the MUC.
dont_ignore_offline = true

# If true, when receiving a file to embed in Discord, the bridge will remove the URL from
# the content, leaving only the embed behind. This prevents Discord users who disabled
# link previews from viewing the embed.
remove_url_on_embed = true

# When sending files from Discord to XMPP, proxy the URLS with this template. "<hmac>" and
# and "<url>" will be substituted. Proxy will not be used if not set.
proxy_discord_urls_to = "https://proxy.server.example/proxy/<hmac>/<urls>"

# Secret for the proxy. Only used when the proxy is used.
hmac_secret = "some-secret"

# Path where avatars can be stored
path = "/some/path"

# URL on which the avatars will be available
url = "https://im.server.example/avatars/"

# The ID of the guild
guild = 00000000000

# The ID of the channel to mirror
channel = 000000000

# The MUC to mirror into
muc = "channel@muc.server.example"

In order for the bridge to work, it needs to have an affiliation of owner before joining. The virtual users that follow will be automatically added to the room with an affiliation of member.