Envoyer un message sur Discord quand un serveur Minecraft est ouvert
-
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 fonctiononServerStopped
au 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
-
Heu oui, faut pas le donner au client ce mod ! Il ne doit que être installé sur le serveur.
Et effectivement, j’ai oublié de te préciser qu’il faut que tu ajoutes
serverSideOnly = true
dans la partie@Mod(modid = "tonmodid", name = "tonnom", version = "1.0.0", <ICI>)
-
@robin4002 Ok, merci beaucoup, car avec cette histoire de serveur, je suis un peu pommer, aussi sur un autre point mais je ferai un nouveau post je pense
-
@orgealexj06 Salut, compte tu mettre ton mod à disposition dans le futur ou non ? Car j’aime vraiment beaucoup le principe et cela peut être très utile (avec un moyen de changer l’url du webhook ou autre), merci d’avance !
-
@imperomaximo Je verrai, je te dirai ça
-
@orgealexj06 Merci beaucoup :beaming_face_with_smiling_eyes:
-
@robin4002 Bonjour,
Je voudrais savoir comment faire pour envoyer le message quand une commande est envoyer. J’ai créer un plugin maintenance et je voudrai que ca envoie un message au début et a la fin de la maintenance mais je ne sais pas comment faire…
Merci de ton aide
Bonne fin de journée -
tu peux suivre ce tutoriel pour créer une commande : https://www.minecraftforgefrance.fr/topic/4471/créer-une-commande
-
@robin4002 Ok,merci, le morceau de code que j’ai mis à partir du onServerStarted, je peux le mettre dans un plugin ?
Merci -
Oui.
-
@robin4002 Bonjour,
Je voudrai poser une autre questions qui pourrai aider moi et d’autres personnes qui peuvent suivre ce post. Quand le mod envoie le messages sur Discord, les messages s’accumule. A-t-il un moyen de supprimer à chaque fois le dernier message avant de poster le nouveau. Ce n’est pas forcement dérangeant mais c’est plus rapide et plus clean. Merci -
https://discord.com/developers/docs/resources/webhook#delete-webhook-message
Il a bien un webhook pour supprimer un message, mais il faut l’id du message donc il faudrait regarder en mémoire cette id lors que le message est posté. -
@robin4002 Ok, je verrai ça, et encore une petite chose, j’ai revu mon mod que j’avais un peu délaisser et mtn, il fonctionne plus, ai-je supprimer un truc sans faire exprès ?
package fr.orgealexj06.serverstatus; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import org.apache.logging.log4j.Logger; import com.google.gson.JsonObject; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.entity.minecart.MinecartEvent; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod.EventHandler; import net.minecraftforge.fml.common.Mod.Instance; import net.minecraftforge.fml.common.SidedProxy; import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.event.FMLServerStartedEvent; import net.minecraftforge.fml.common.event.FMLServerStoppedEvent; @Mod(modid = ServerStatusMod.MODID, name = "ServerStatus", version = "1.0", acceptedMinecraftVersions = "[1.12.2]") public class ServerStatusMod { public static final String MODID = "serverstatus"; @Instance(ServerStatusMod.MODID) public static ServerStatusMod instance; @SidedProxy(clientSide = "fr.orgealexj06.serverstatus.ServerStatusClient", serverSide = "fr.orgealexj06.serverstatus.ServerStatusServer") public static ServerStatusCommon proxy; public static Logger logger; @EventHandler public void preInit(FMLPreInitializationEvent event) { logger = event.getModLog(); proxy.preInit(event.getSuggestedConfigurationFile()); } @EventHandler public void init(FMLInitializationEvent event) { proxy.init(); MinecraftForge.EVENT_BUS.register(ServerStatusMod.class); } @EventHandler public void onServerStart(FMLServerStartedEvent event) { try { sendDiscordWebhookMessage("FallenGloryStatus", "Le serveur est En-Ligne !"); } catch(Exception ex) { System.err.println("Impossible d'envoyer le message de démarrage sur discord"); ex.printStackTrace(); } } @EventHandler public void onServerStopped(FMLServerStoppedEvent event) { try { sendDiscordWebhookMessage("FallenGloryStatus", "Le serveur est Hors-Ligne !"); } catch(Exception ex) { System.err.println("Impossible d'envoyer le message de démarrage sur discord"); ex.printStackTrace(); } } @EventHandler public void sendDiscordWebhookMessage(String username, String message) throws Exception { URL url = new URL ("MonUrlDiscord"); 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()); } }
Si tu as un peu de temps pour voir ça, ça m’aiderai
-
Hormis MonUrlDiscord (que je pense que tu as changé juste pour envoyer le code ?) ça me semble bon. Vérifies ton webhook sur les paramètres de discord.