Envoyer un message sur Discord quand un serveur Minecraft est ouvert
-
@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.
-
@robin4002 J’ai retirer le lien exprès, le webhook existe bien (c’est le même que la dernière fois).
-
Il faudrait regarder les logs de ton serveur alors pour voir s’il y a une erreur.
-
@robin4002 Alors, finalement quand je test, ça m’envoie le message, mais ca m’envoie ca dans les logs
[17:16:02] [Server thread/ERROR] [FML]: The mod serverstatus appears to have an invalid event annotation EventHandler. This annotation can only apply to methods with recognized event arguments - it will not be called -
@robin4002 J’essaye également de le mettre en serverSideOnly, mais on me demande encore le mod coté client…
-
Ah oui, retires le @EventHandler qu’il y a haut dessus de la fonction sendDiscordWebhookMessage.
Et pour qu’il ne demande plus le mod en solo :
@Mod(modid = ServerStatusMod.MODID, name = "ServerStatus", version = "1.0", acceptedMinecraftVersions = "[1.12.2]")
à remplacer par
@Mod(modid = ServerStatusMod.MODID, name = "ServerStatus", version = "1.0", acceptedMinecraftVersions = "[1.12.2]", acceptableRemoteVersions = "*") -
@robin4002 Ok merci, je vais test ça.
J’ai créer un plugin de maintenance et j’ai essayer de faire en sorte que ça envoie un message au Discord (comme pour l’ouverture et la fermeture) mais ca ne marche pas, déjà il n’y a pas le FML, ça c’est normal puisque je développe en Spigot, mais est ce que tu connais un moyen ? Ou peut être que tu ne connais pas Spigot. Ou est-ce qu’on peux détecter une commande (par exemple celle pour la maintenance) et que quand elle est détecter, ca envoie le message.
Merci de m’éclairer, le développement Java est assez compliqué (même si c’est le plus simple x)
Bonne soirée -
Il te suffit de reprendre la fonction
sendDiscordWebhookMessagedans ton plugin et l’utiliser là où tu as besoin. -
@robin4002 Ok, et dans le message, c’est pas dérangeant de mettre par exemple :Joy: pour ajouter un émoji Discord ?
-
à mon avis il faudra plutôt mettre l’unicode de de l’émoji plutôt que le nom.
-
@robin4002 Ok, merci beaucoup, plus de question
