Installer un pont Discord - Matrix
Pour créer un pont entre Matrix et Discord, nous allons utiliser mautrix-discord
Prérequis
Il vous faut un serveur Matrix, Synapse par exemple, et PostgreSQL. Je pars du principe que vous avez suivi le tuto sur comment Installer Matrix et que vous avez déjà ces deux logiciels d'installés.
Lancez la commande suivante pour installer Libolm, nécessaire au chiffrement :
sudo aptitude install libolm-dev python3-dev build-essential
Installation
Récupérez le fichier binaire correspondant à votre architecture ici
L'installation est finie (c'était rapide), on peut passer à la configuration
Configuration
Créez une copie du fichier example-config.yaml
cp config.sample.yaml config.yaml
Ouvrez le fichier config.yaml.
remplacez la ligne
domain: "localhost"
par
domain: "votrenomdedomaine"
Si le serveur Matrix tourne sur une autre machine, indiquez l'url du serveur Matrix.
Remplacer la ligne
uri: postgres://user:password@host/database?sslmode=disable
par
uri: postgresql://discordbridge:motdepasse@localhost:5432/discordbridge?sslmode=disable"
Mettez le mot de passe de votre choix, on créera la base de données plus tard.
Dans la partie “permissions”, adaptez les lignes à votre cas. Dans mon cas, je n'ai qu'un seul utilisateur qui est admin. J'ai donc que la ligne
"@fate:matrix.nomdedomaine.fr": admin
Remplacez “fate” par votre nom d'utilisateur ainsi que “nomdedomaine.fr” par l'url d'accès à votre serveur Matrix.
Dans la partie “encryption”, passez les options “allow” et “default” à true pour activer le chiffrement entre le pont et le serveur Matrix
Passons à la base de données
Création de la base de données
Connectez-vous avec l'utilisateur postgres
sudo -i -u postgres
Lancez PostgreSQL
psql
Créez l'utilisateur
CREATE ROLE discordbridge LOGIN PASSWORD 'mot_de_passe';
Mettez le même mot de passe que celui que vous avez renseigné dans le fichier config.yaml
Créez la base de données
CREATE DATABASE discordbridge OWNER discordbridge;
Quittez PostgreSQL
exit
Déconnectez-vous de l'utilisateur postgres
exit
Registration.yaml
Les ponts ont besoin d'un fichier registration.yaml pour avoir certain droits sur votre serveur. Pour le créer, lancez la commande suivante
./mautrix-discord -g
Le fichier généré doit être visible par l'utilisateur exécutant Matrix :
chmod 644 registration.yaml
Ensuite ouvrez le fichier homeserver.yaml de votre serveur et indiquez l'emplacement du fichier registration après la ligne “app_service_config_files:”. Par exemple :
# A list of application service config file to use app_service_config_files: - "/home/pi/mautrix-discord/registration.yaml"
Relancez votre serveur Matrix
sudo systemctl restart matrix-synapse.service
Activer le double puppeting
Le “double puppeting” permet que lorsque vous envoyez un message depuis le site discord, le message sera également présent dans Matrix et les messages marqués comme lu dans Matrix seront également marqués comme lus sur les autres appareils.
Créez un fichier doublepupetting.yaml dans le répertoire du pont et copiez les lignes suivantes :
# The ID doesn't really matter, put whatever you want.
id: doublepuppet
# The URL is intentionally left empty (null), as the homeserver shouldn't
# push events anywhere for this extra appservice. If you use a
# non-spec-compliant server, you may need to put some fake URL here.
url:
# Generate random strings for these three fields. Only the as_token really
# matters, hs_token is never used because there's no url, and the default
# user (sender_localpart) is never used either.
as_token: votre_token
hs_token: votre_token
sender_localpart: votre_token
# Bridges don't like ratelimiting. This should only apply when using the
# as_token, normal user tokens will still be ratelimited.
rate_limited: false
namespaces:
users:
# Replace your\.domain with your server name (escape dots for regex)
- regex: '@.*:votre\.domaine\.fr'
# This must be false so the appservice doesn't take over all users completely.
exclusive: false
Vous pouvez générer un token avec la commande suivante (les 3 tokens doivent être différents) :
pwgen -s 128 1
Ouvrez le fichier config.yaml du pont et ajoutez les lignes suivantes dans la section double_puppet:
# Shared secrets for automatic double puppeting.
# See https://docs.mau.fi/bridges/general/double-puppeting.html for instructions.
secrets:
votre.domaine.fr: as_token:votre_token_as
Enfin, ouvrez le fichier de config de Matrix et ajoutez dans la section app_service_config_files le chemin vers votre fichier doublepupetting.yaml
Redémarrez Synapse et le pont discord
sudo systemctl restart matrix-synapse.service
sudo systemctl restart mautrix-discord.service
Lancement du pont via Systemd
Créez le fichier
/etc/systemd/system/mautrix-discord.service
Copiez les lignes suivantes dedans (adaptez les chemins et utilisateur) :
[Unit] Description=mautrix-discord bridge [Service] Type=exec Restart=on-failure RestartSec=30s WorkingDirectory=/home/pi/mautrix-discord/ ExecStart=/home/pi/mautrix-discord/mautrix-discord User=pi # Optional hardening to improve security ReadWritePaths=/home/pi/mautrix-discord NoNewPrivileges=yes MemoryDenyWriteExecute=true PrivateDevices=yes PrivateTmp=yes ProtectSystem=strict ProtectControlGroups=true RestrictSUIDSGID=true RestrictRealtime=true LockPersonality=true ProtectKernelLogs=true ProtectKernelTunables=true ProtectHostname=true ProtectKernelModules=true PrivateUsers=true ProtectClock=true SystemCallArchitectures=native SystemCallErrorNumber=EPERM SystemCallFilter=@system-service [Install] WantedBy=multi-user.target
Modifier les chemins et le nom de l'utilisateur si besoin.
Activez le service au démarrage
sudo systemctl enable mautrix-discord.service
Démarrez le service
sudo systemctl start mautrix-discord.service
Configurer le pont
Installez l'application mobile Discord et connectez-vous à votre compte.
Dans votre client Matrix (Element), lancez une conversation avec @discordbot:matrix.domaine.fr. Tapez la commande
login
Scannez le code-barre qui apparaît avec l'application mobile Discord.
Pour afficher les serveurs discords auxquels vous êtes connectés, tapez la commande
guilds status
Pour se connecter avec le pont à un serveur, tapez
guilds bridge IdDuServeur