[PSDK] Discord Webhook

16 Réponses • 1031 Vues

Nuri Yuri

HostMaster

Salut, il y a pas moins d'une heure j'ai vu un script pour envoyer des messages sur Discord à l'aide des webhook. Je trouve que c'est une idée intéressante qui peut être exploitée pour vos fangames alors je l'ai traduit dans un langage qui est 100% sur de fonctionner sous PSDK :)

require 'json'
require 'net/http'

ENV['SSL_CERT_FILE'] ||= './lib/cert.pem' if $0 == 'Game.rb' # Launched from PSDK

module DiscordWebhooks
  DISCORD_WEBHOOK_URI = URI('<INSERT WEBHOOK URL HERE!>')
 
  module_function
 
  # @overload post(data)
  #  Post data to the default DISCORD_WEBHOOK_URI
  #  @param data [Hash] the webhook data
  # @overload post(url, data)
  #  Post data to a Discord Webhook using an URL or an URI
  #  @param url [URI, String] the Discord Webhook
  #  @param data [Hash] the webhook data
  def post(url, data = url)
    url = DISCORD_WEBHOOK_URI if url.is_a?(Hash)
    url = URI(url) if url.is_a?(String)
    Net::HTTP.post(url, data.to_json, "Content-Type" => "application/json")
  end
end

Exemple d'utilisation :
DiscordWebhooks.post(
  username: 'Nuri Yuri',
  avatar_url: 'https://yt3.ggpht.com/-ZQxRItl-UQA/AAAAAAAAAAI/AAAAAAAAAIc/OoeMfVC1D0E/s88-mo-c-c0xffffffff-rj-k-no/photo.jpg',
  content: 'Coucou :)',
  embeds: [
    {
      color: 0x961696, # Asking decimal but no need to convert when using 0x :)
      author: {
        name: 'Chat-Tan',
        url: 'https://pokemonworkshop.fr/',
        icon_url: 'https://cdn.discordapp.com/app-icons/186157007500345345/c695c6232a85260b7016684a12773f35.png'
      },
      title: 'Your Game',
      url: 'http://resources.luka-sj.com',
      description: 'Yuri sucessfully traded its [Pikachu](https://www.pokepedia.fr/Pikachu) for a [Meowth](https://www.pokepedia.fr/Miaouss).'
    }
  ]
)

Résultat :


Pour plus d'infos sur le contenu à mettre dans le Hash : https://birdie0.github.io/discord-webhooks-guide/discord_webhook.html

« Modifié: 25 mai 2019, 23:59:11 par Nuri Yuri »

ln(yo) = <3

Script PSDK

:o super cool ça mais par exemple si on veut le faire pour l'obtention d'un badge il faudrait faire une fonction mais comment cela fonctionne t'il et pour le relier au jeu :) comme ça avec ce petit exemple je pense qu'on pourra inventer plein de choses formaidable avec le discord :) et pas que

SirMalo

Graphiste

C'est hyper original comme truc ! Il y a moyen d'en faire une petite fonctionnalité très sympa
Okay c'est méga-simple d'utilisation (même moi j'ai réussi :ahde: )

Est-ce que le jeu ne plantera pa si le joueur n'a pas Internet et/ou pas de compte Discord ? :o

Nuri Yuri

HostMaster

Si l'utilisateur n'a pas internet le jeu va freeze pendant quelques secondes. Sauf si tu fais comme j'ai dit à Amelya : tu encapsule ta requête dans un Thread. (En gros le requette se fera en parallèle et c'est le Thread qui sera freeze, pas ton jeu).

Le compte discord n'est pas requis pour ce genre de truc puis-ce que c'est un webhook.

@Amelya :
Je te propose le script suivant :
module DiscordWebhooks
  BADGE_NAMES = %w[Roche Cascade Foudre Prisme Ame Marais Volcan Terre]
  BADGE_IMAGES = [
    'https://www.pokepedia.fr/images/6/65/Badge_Roche_Kanto.png',
    'https://www.pokepedia.fr/images/thumb/5/50/Badge_Cascade_Kanto.png/30px-Badge_Cascade_Kanto.png',
    'https://www.pokepedia.fr/images/5/5c/Badge_Foudre_Kanto.png',
    'https://www.pokepedia.fr/images/a/ac/Badge_Prisme_Kanto.png',
    'https://www.pokepedia.fr/images/thumb/1/14/Badge_%C3%82me_Kanto.png/35px-Badge_%C3%82me_Kanto.png',
    'https://www.pokepedia.fr/images/8/83/Badge_Marais_Kanto.png',
    'https://www.pokepedia.fr/images/c/c3/Badge_Volcan_Kanto.png',
    'https://www.pokepedia.fr/images/6/68/Badge_Terre_Kanto.png'
  ]
  BADGE_COLORS = [0xBDB76B, 0x1E90FF, 0xFFA500, 0xFFFAF0, 0xFF69B4, 0xFFD700, 0xB22222, 0x228B22]

  module_function
 
  def badge_notif(numero)
    Thread.new do
      post(
        username: 'Nuri Yuri',
        avatar_url: 'https://yt3.ggpht.com/-ZQxRItl-UQA/AAAAAAAAAAI/AAAAAAAAAIc/OoeMfVC1D0E/s88-mo-c-c0xffffffff-rj-k-no/photo.jpg',
        content: format('%<name>s a obtenu le badge %<badge>s !', name: $trainer&.name || 'Dresseur', badge: BADGE_NAMES[numero - 1]),
        embeds: [
          {
            color: BADGE_COLORS[numero - 1],
            author: {
              name: "Badge #{BADGE_NAMES[numero - 1]}",
              icon_url: BADGE_IMAGES[numero - 1],
            },
            description: "Badge \##{numero}"
          }
        ]
      )
    end
  end
end
Ainsi tu fais : DiscordWebhooks.badge_notif(numero) où numero vaut un chiffre entre 1 et 8.
ln(yo) = <3
Bonjour, quelque chose à changer avec le DiscordWebhooks dernièrement ?

Car depuis les dernières majs de PSDK, le "DiscordWebhooks.badge_notif(numero) " ne semble plus fonctionner, je l'utilise sur mon Fan-game depuis quelque mois et je m'en suis rendu compte qu'il ne fonctionnais plus quand j'ai refait un test complet sur mon Fan-Game hier ^^

J'ai un message qui apparait dans le Log, je le montre si ça peut aider.


[/url]

Nuri Yuri

HostMaster

Ah je crois avoir une idée.
As-tu bien le fichier "cert.pem" dans ton dossier lib du projet ?
ln(yo) = <3
Oui je vois bien le fichier "cert.pem" dans le dossier lib.
[/url]

Nuri Yuri

HostMaster

Ok, peux-tu écrire "ENV['SSL_CERT_FILE']" dans la console et m'indiquer le retour (également me dire si tu test depuis le debug ou la release).
ln(yo) = <3
Voilà la console dit ça :


J'ai commencer à tester sur la version release et ensuite quand j'ai vu que ça ne fonctionnais pas, j'ai continuer en mode debug ^^
[/url]

Nuri Yuri

HostMaster

Ok, donc tout est correct.
Je vais vérifier de mon coté ^^
ln(yo) = <3

Nuri Yuri

HostMaster

J'ai trouvé le soucis. Depuis les dernières versions, PSDK charge net/http automatiquement, du coup Discord Webhooks assigne le chemin des certificats après le chargement de net/http et non avant.
Voici le commit qui corrige le soucis : https://gitlab.com/NuriYuri/pokemonsdk/commit/8e248899743474311a37f7bf7ff2cf0558873315
Tu peux l'appliquer chez toi ça devrait fonctionner :p
ln(yo) = <3
Je confirme, ça fonctionne maintenant.
Merci de l'aide rapide  :)
[/url]

Nuri Yuri

HostMaster

De rien :)
T'as eu la chance que je lurkais le forum :p
(Si jamais votre sujet n'a pas de rep au bout de 24h pas de problème pour poster un lien dans le discord sous fr-psdk-talk :q)
ln(yo) = <3
Désolé de remonter ce topic,mais je voulais savoir si ce scrip est encore bon, et quelle version je dois mettre pour que ca fonctionne. Merci !
"La vie, c'est comme une bicyclette, il faut avancer pour ne pas perdre l'équilibre" -Albert Einstein

There was an error while thanking
Thanking...