Plugin Jellyfin DiscordNotifier
Aujourd’hui je vais vous parler d’un de mes projets actuels : développer un plugin de notification Jellyfin pour Discord.
Pourquoi ?
J’utilise Jellyfin depuis un moment maintenant et j’aime vraiment ça. Au début, je l’avais configuré juste pour moi, mais après en avoir parlé autour de moi, j’ai fini par donner accès à ma famille et mes amis (ils ne sont pas toujours actifs, mais ça me fait plaisir).
Vous pourriez dire qu’il existe déjà des projets qui font cela, et c’est vrai — surtout le projet de notification webhook Jellyfin, qui inclut un module pour Discord. Mais je le trouve mal conçu ; certes, vous êtes libre de formater les notifications vous-même, mais ça ne rend pas super bien et c’est compliqué à configurer.
Je voulais faire un projet comme celui-ci pour le défi, mais aussi pour m’impliquer davantage dans la communauté Jellyfin à ma manière.
Le but est simple : recevoir des notifications sur un serveur Discord quand quelque chose se passe sur notre serveur (un utilisateur est créé/supprimé, un film a commencé/arrêté, etc.).
WARNINGNotez bien que je suis encore étudiant, pas développeur (et encore moins développeur C#). Je suis juste passionné d’informatique et fan du monde open source.
Entrer dans le vif du sujet
Pour faire un plugin, vous n’êtes pas laissé seul — il y a une communauté sympa et ils ont fait un dépôt assez utile pour comprendre comment faire et quelles règles suivre pour réussir à développer un plugin Jellyfin.
Donc je me suis inspiré de ça pour commencer, mais je me suis aussi beaucoup appuyé sur d’autres projets de la communauté pour d’autres systèmes de notification, comme le Telegram Notifier, que je trouve super cool !
Pour faire simple, je suis parti du principe que ce plugin serait une solution clé en main, facile à utiliser, sans besoin de s’embêter à faire des modèles de notification comme avec le plugin webhook. Mon plugin a des notifications prêtes à l'emploi ; pour les avoir sur Discord, il suffit de les activer dans l’interface de gestion des plugins dans Jellyfin — pas de configuration manuelle nécessaire.
Par exemple, dans la version actuelle, j’ai seulement fait 4 (5 avec le testeur) notifieurs.
- Utilisateur créé
- Utilisateur supprimé
- Connexion utilisateur
- Échec de connexion utilisateur
C’est encore basique, mais pas mal pour un début, je trouve.
Pour commencer avec le plugin, bien sûr il faut créer ou avoir déjà un serveur Discord, créer un canal de discussion pour créer un webhook.
Documentation pour Discord Webhook ici
TIPPour rendre ça plus joli, je recommande de définir l’avatar et le nom du bot depuis Discord, car sinon il utilisera les défauts de Discord. Je n’ai pas encore implémenté la personnalisation du bot.
Une fois que vous avez l’URL du webhook, vous devez la mettre dans le champ dédié dans l’interface de gestion du plugin. Vous pouvez tester la connexion avec la notification de test — si ça marche, vous pouvez sauvegarder les paramètres.
Par défaut, toutes les options de notification sont activées ; c’est à vous de choisir ce que vous voulez.
Développement
Donc, comme vous le savez probablement et comme mentionné plus haut, Jellyfin et ses plugins sont faits en C#, un langage que j’ai rarement utilisé.
Nix
![]()
Je suis récemment passé à NixOS sur mon PC principal. C’était un gros changement et beaucoup de travail pour m’adapter, mais c’est vraiment une étape énorme et bénéfique quand on voit tout ce qu’on peut faire avec. J’ai aussi mis mon Mac sous Nix et mon autre ordinateur portable sous NixOS. Résultat : toutes mes configs sont synchronisées sur toutes mes machines, c’est vraiment sympa. Mais je parlerai de ça dans un futur article…
❄️ Pour travailler proprement, j’ai mis en place un direnv flake dans le projet — c’est une fonctionnalité Nix super cool qui me permet de switcher entre mes PC sans perdre la configuration, sans me soucier des versions de paquets à installer.
NOTESi vous n’êtes pas familier avec Nix, je recommande d’y jeter un œil — c’est vraiment
génial.
Task et Docker
Pour tester mon plugin à la volée, j’ai utilisé Docker 🐋, avec une simple image Jellyfin avec le dossier de config mappé sur mon PC, donc j’ai un accès direct au dossier plugins et j’ai juste besoin de faire un mv ou cp pour placer la DLL du plugin compilé.
Mais après l’avoir fait manuellement des dizaines de fois pour chaque changement, j’y ai réfléchi (et j’ai été inspiré par mes collègues devops qui utilisent cet outil).
Je suis parti sur l’outil Task (Task est un exécuter de tâches/outil de build). C’est pareil que Make ; je ne connais pas vraiment la différence, mais Task m’a plus attiré. Donc j’ai choisi cette solution pour faciliter les builds et les cleans, etc.
infoTask se gère simplement avec un fichier Yaml.
Pour commencer, j’ai juste fait deux étapes avec build et clean.
task build →
Compile la DLL, vérifie le dossier plugin dans mon Jellyfin de test, copie la DLL dans le dossier, et redémarre le conteneur Jellyfin.
Une fois fait, je teste le plugin manuellement et vérifie mes changements, etc.
task clean →
Quand je veux repartir à zéro, je nettoie tout : ça supprime le dossier /bin (où est le plugin compilé), supprime /obj (avec les dépendances), et nettoie aussi le dossier plugin dans le Jellyfin de test en supprimant la DLL et le fichier XML créé pour le plugin.
Problèmes rencontrés
Pendant le développement et encore maintenant, j’ai un problème : je ne sais pas comment récupérer l’URL du serveur.
Pour la version actuelle, j’ai juste ajouté un paramètre dans la page de config du plugin où l’admin peut entrer l’URL utilisée pour son serveur, par exemple https://jellyfin.example.com.
Cela signifie que pour les notifications, quand ils cliquent sur le titre, ça ouvrira le lien vers le bon serveur Jellyfin et pas l’URL par défaut (bien sûr, si rien n’est entré, ce sera l’adresse localhost).
Mais c’est un problème que j’ai rencontré qui m’a vraiment dérangé. Il y a un paramètre dans Jellyfin qui correspond à l’URL publique du serveur, mais je n’ai pas encore trouvé comment l’utiliser dans le plugin.
Futur
Pour ce projet de Plugin, j’ai plusieurs points à améliorer.
- alertes pour d’autres événements
- personnalisation du bot Discord
- modèles personnalisés
- choix de notification par utilisateur
Mais tout ça viendra avec le temps et les versions, je ne suis pas pressé…
Même si ce projet est vraiment intéressant, j’ai beaucoup d’autres projets en ce moment, surtout ma configuration Nix, qui me prend du temps.
infoJ’ai d’autres articles à venir bientôt, notamment sur mon expérience avec NixOS et Hyprland, et mes autres projets en cours.
Merci d'avoir pris le temps de lire cet article. J’espère qu’il a été utile et vous a donné des idées pour vos propres projets.