Envoyer un message sur Discord quand un serveur Minecraft est ouvert
-
Ce message a été supprimé ! -
Discord a refusé la requête (code 403, forbidden) assures-toi que l’url de web-hook est correcte (d’ailleurs, c’est pas une super idée de la publier sur le forum, des gens pourraient envoyer des messages vers ton discord avec).
-
@robin4002 Ok, j’ai supprimer
merci. le lien est le bon pourtant -
Bizarre. Je vais regarder ça en détails ce soir.
-
@robin4002 Ok, prends ton temps

-
Bon après multiple tentative :
@EventHandler public void onServerStart(FMLServerStartedEvent event) { try { sendDiscordWebhookMessage("Server status notifier", "Le serveur vient de démarrer"); } catch(IOException ex) { System.err.println("Impossible d'envoyer le message de démarrage sur discord"); ex.printStackTrace(); } } public void sendDiscordWebhookMessage(String username, String message) throws IOException { HttpPost post = new HttpPost("lien webhook discord"); post.addHeader("Content-Type", "application/json"); post.addHeader("User-Agent", "Minecraft Server"); JsonObject json = new JsonObject(); json.addProperty("username", username); json.addProperty("content", message); // send a JSON data post.setEntity(new StringEntity(json.toString())); CloseableHttpClient httpClient = HttpClients.createDefault(); CloseableHttpResponse response = httpClient.execute(post); if (response.getEntity() != null) { String result = EntityUtils.toString(response.getEntity()); System.out.println(result); } }Il faut impérativement avoir un
User-Agentsinon Discord refuse la requête.
J’ai séparé l’envoie dans une fonction à part, comme ça tu peux également réutiliser la fonctionsendDiscordWebhookMessagepour l’extinction du serveur
-
@robin4002 Ok, je teste ça demain et je te tiens au courant, et déjà d’avance, merci pour toute cette implication

-
@robin4002 Et y-a-t-il des trucs a modifier ? (a part le lien a rajouter) car j’ai encore un crash mais ca na pas l’air d’être le meme
-
Non, il y a que le lien à changer.
Envoies le rapport de crash ?
-
@robin4002 Voici le crash :
---- Minecraft Crash Report ---- // Who set us up the TNT? Time: 16/01/21 14:14 Description: Exception in server tick loop java.lang.NoClassDefFoundError: org/apache/http/HttpEntity at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Unknown Source) at net.minecraftforge.fml.common.FMLModContainer.constructMod(FMLModContainer.java:539) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at com.google.common.eventbus.Subscriber.invokeSubscriberMethod(Subscriber.java:91) at com.google.common.eventbus.Subscriber$SynchronizedSubscriber.invokeSubscriberMethod(Subscriber.java:150) at com.google.common.eventbus.Subscriber$1.run(Subscriber.java:76) at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:399) at com.google.common.eventbus.Subscriber.dispatchEvent(Subscriber.java:71) at com.google.common.eventbus.Dispatcher$PerThreadQueuedDispatcher.dispatch(Dispatcher.java:116) at com.google.common.eventbus.EventBus.post(EventBus.java:217) at net.minecraftforge.fml.common.LoadController.sendEventToModContainer(LoadController.java:219) at net.minecraftforge.fml.common.LoadController.propogateStateMessage(LoadController.java:197) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at com.google.common.eventbus.Subscriber.invokeSubscriberMethod(Subscriber.java:91) at com.google.common.eventbus.Subscriber$SynchronizedSubscriber.invokeSubscriberMethod(Subscriber.java:150) at com.google.common.eventbus.Subscriber$1.run(Subscriber.java:76) at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:399) at com.google.common.eventbus.Subscriber.dispatchEvent(Subscriber.java:71) at com.google.common.eventbus.Dispatcher$PerThreadQueuedDispatcher.dispatch(Dispatcher.java:116) at com.google.common.eventbus.EventBus.post(EventBus.java:217) at net.minecraftforge.fml.common.LoadController.distributeStateMessage(LoadController.java:136) at net.minecraftforge.fml.common.Loader.loadMods(Loader.java:566) at net.minecraftforge.fml.server.FMLServerHandler.beginServerLoading(FMLServerHandler.java:102) at net.minecraftforge.fml.common.FMLCommonHandler.onServerStart(FMLCommonHandler.java:335) at net.minecraft.server.dedicated.DedicatedServer.func_71197_b(DedicatedServer.java:169) at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:688) at java.lang.Thread.run(Unknown Source) Caused by: java.lang.ClassNotFoundException: org.apache.http.HttpEntity at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:106) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) ... 34 more -
hum donc contrairement à ce que je pensais, le client http d’apache est pas dispo, pourtant il était présent sur le classpath de la workspace alors que je n’ai rien ajouté.
Donc il va falloir encore modifier le code, revenir sur le client http de java.
@EventHandler public void onServerStart(FMLServerStartedEvent event) { try { sendDiscordWebhookMessage("Server status notifier", "Le serveur vient de démarrer"); } catch(Exception ex) { System.err.println("Impossible d'envoyer le message de démarrage sur discord"); ex.printStackTrace(); } } public void sendDiscordWebhookMessage(String username, String message) throws Exception { URL url = new URL ("url"); HttpURLConnection con = (HttpURLConnection)url.openConnection(); con.setRequestMethod("POST"); con.setRequestProperty("Content-Type", "application/json; utf-8"); con.setRequestProperty("User-Agent", "Minecraft Server"); con.setRequestProperty("Accpet", "application/json"); con.setDoOutput(true); JsonObject json = new JsonObject(); json.addProperty("username", username); json.addProperty("content", message); try(OutputStream os = con.getOutputStream()) { byte[] input = json.toString().getBytes("utf-8"); os.write(input, 0, input.length); } BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "utf-8")); StringBuilder response = new StringBuilder(); String responseLine = null; while ((responseLine = br.readLine()) != null) { response.append(responseLine.trim()); } System.out.println(response.toString()); }P.S : j’ai reprit le code des précédents message supprimé (les admin voient les messages supprimés) et en testant je crois que j’ai envoyé un message vers ton discord car j’ai oublié de changer l’url par mon webhook de test x).
-
@robin4002 J’ai bien reçu le message
ca devrai bien marcher alors. Je vais test -
@robin4002 Nickel ca marche ! Juste petit problème, le démarrer est bugé sur Discord, il apparait sans le é et il y a @… a la place, possible de modifier ca ? Sinon merci
-
Assures-toi que ta workspace est en UTF8.
Dans les préférences d’eclipse :

-
@robin4002 Pourtant c’est bien config, mais bon, je vais trouver un texte sans accent. Merci pour tout

-
@robin4002 Et pour l’extinction c’est ça ? :
@EventHandler public void onServerStart(FMLServerStoppedEvent event) { try { sendDiscordWebhookMessage("Server status notifier", "Le serveur de s'arrêter"); } catch(Exception ex) { System.err.println("Impossible d'envoyer le message de démarrage sur discord"); ex.printStackTrace(); } } public void sendDiscordWebhookMessage(String username, String message) throws Exception { URL url = new URL ("url"); HttpURLConnection con = (HttpURLConnection)url.openConnection(); con.setRequestMethod("POST"); con.setRequestProperty("Content-Type", "application/json; utf-8"); con.setRequestProperty("User-Agent", "Minecraft Server"); con.setRequestProperty("Accpet", "application/json"); con.setDoOutput(true); JsonObject json = new JsonObject(); json.addProperty("username", username); json.addProperty("content", message); try(OutputStream os = con.getOutputStream()) { byte[] input = json.toString().getBytes("utf-8"); os.write(input, 0, input.length); } BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "utf-8")); StringBuilder response = new StringBuilder(); String responseLine = null; while ((responseLine = br.readLine()) != null) { response.append(responseLine.trim()); } System.out.println(response.toString()); } -
Oui, par contre tu n’as pas besoin de répéter la fonction
sendDiscordWebhookMessage, elle ne doit que être une fois dans ton code. (et nommes la fonctiononServerStoppedau lieu deonServerStart).
Tu peux alors avoir les deux fonctions (onServerStopped & onServerStarted) dans la même classe. -
Ce message a été supprimé ! -
@robin4002 C’est bon, ça marche, et encore… Merci pour tout !!!
-
@robin4002 Bonjour, j’ai encore un petit problème à ce sujet, quand un joueur allume le jeu avec ce mod, ca envoie aussi le message. Je veux que ce soit juste un mod “serveur” que les gens peuvent se connecter sans l’avoir dans le dossier mod. Est-ce possible ? Merci de ton aide
