[PSDK] Configurer des Webhooks Discord et les utiliser

5 Réponses • 965 Vues

Suite à des demandes j'ai souhaité faire ce poste afin de répondre à tous et à bien d'autres qui ne savent pas comment faire :3
Le travail a surtout été fait par Nuri Yuri dans un sujet existant => https://pokemonworkshop.fr/forum/index.php?topic=5025.0

Comment configurer un webhook discord (en 4 étapes) ?
1/Accéder aux paramètres de son serveur


2/Aller dans "Intégrations"


3/ Cliquer sur "Créer un webhook"


4/ Spécifier son webhook : vous lui donner un nom, un logo et le salon où il enverra ces messages. Puis faites "Enregistrer les modifications"

Faites "copier l'URL du webhook" et mettez-vous le dans un coin. Attention de ne pas le partager,  toute personne disposant du lien peut utiliser votre webhook.

Comment utiliser mes webhooks ?

Téléchargez le zip => https://mega.nz/file/qzxDmQDL#Mxqy34ht19uHkDnDZITcOIThv9EwanMlEt2VxxK-gwE

Déplacez le dans le dossier "scripts" à la racine de votre jeu sous PSDK

Puis décompressez ce zip à l'intérieur de ce dossier. Vous aurez donc ce dossier :

Vous aurez les 2 fichiers suivants :


Dans webhooks :
Vous pourrez définir vos Webhooks dans DISCORD_WEBHOOK_URI :

Lorsque vous ferez un appel, si vous ne précisez pas quelle webhook vous utilisez, ça ira chercher par défaut :default

Dans InterpreterWebhooks :
Pour poster un message simple il est possible d'utiliser ceci :
post_simple_message_on_discord(MESSAGE, avatar: AVATAR, username: USERNAME, webhook_url: WEBHOOK)
Avec :
MESSAGE: le message à envoer
AVATAR: le lien de l'image qu'aura votre webhook
USERNAME: Le nom de votre webhook
WEBHOOK : le lien de votre webhook que vous aurez au préalable copier ou la clé (comme :example) de DISCORD_WEBHOOK_URI

Concernant l'avatar et le nom, si vous ne les précisez pas, votre webhook aura l'image et le nom que vous aurez défini sur votre serveur discord au préalable?
Pour le webhook_url, si vous ne le précisez pas

1er Exemple :

Résultat :


2eme exemple :

Ici je dis d'aller chercher la clé :example dans DISCORD_WEBHOOK_URI
Résultat :


Envoyer un message personnalisé :
La méthode présentée ci-dessus permet une utilisation rapide afin de ne pas se surcharger inutilement. Si vous voulez quelque chose de personnalisé avec des embeds par exemple, allez sur ce site => https://discohook.org/
Vous pourrez avoir une prévisualisation et générer du code pour votre embed, exemple :


Une fois vos modifications faites, récupérez ce qui se trouve être du JSON en-bas :


Maintenant revenez dans InterpreterWebhooks et créez une nouvelle méthode (que je nommerai "post_example_message_on_discord" ici). Dedant vous appellerez la méthode :
DiscordWebhooks.post()
Puis collez le JSON entre les parenthèses que vous avez précédemment copié. Vous obtiendrez quelque chose similaire à ceci :


Il ne vous reste plus qu'à exécuter la méthode que vous venez de créer en event :

Résultat :


Dans le cadre de la loi RGPD, il est conseillé de demander au joueur s'il souhaite utiliser cette fonctionnalité de Webhooks que vous avez mis en place.
Vous pouvez le faire facilement, Redder a mis un message plus bas à ce sujet.

Et voilà, si vous avez des questions / remarques n'hésitez pas  (a)

« Modifié: 10 avril 2021, 10:42:48 par Aerun »

Linux c'est plus qu'un OS, c'est une passion

Tuto Script PSDK

Attention : 2 bugs dont un patch :
1ere erreur :
Le 1er bug concerne le Yuki_ErrorHandler. Quand la 2eme erreur a lieu, un message est remonté dans Yuki_ErrorHandler. lors du traitement de l'exception une erreur d'encodage dû au message fait planter la méthode critical_section de Yuki_ErrorHandler.
Comme il s'agit d'un bug sur le core de PSDK, le problème ainsi que la possible résolution a été remontée à Nuri Yuri.

2eme erreur :
Il se trouve que le script de base génère une erreur si le joueur est hors-ligne. J'ai patch le problème en transformant l'exception en un simple Warning sur le cmd  si vous êtes sur Windows ou bash si vous êtes sur Linux.

Vous pouvez télécharger directement la nouvelle archive corrigée (sachant que comme la 2eme erreur est corrigé, la 1ere n'est plus levée également) : https://mega.nz/file/qzxDmQDL#Mxqy34ht19uHkDnDZITcOIThv9EwanMlEt2VxxK-gwE
Le lien est aussi mis à jour dans le 1er message de ce fil

Si vous préférez modifier à la main, voilà comment faire :
Dans 09100 NuriYuri Webhooks/09101 webhooks.rb l.22 :
Remplacez :
def post(url, data = url, key = :default)
      url = DISCORD_WEBHOOK_URI[key] 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

Par :
def post(url, data = url, key = :default)
      url = DISCORD_WEBHOOK_URI[key] if url.is_a?(Hash)
      url = URI(url) if url.is_a?(String)
      begin
        Net::HTTP.post(url, data.to_json, "Content-Type" => "application/json")
      rescue SocketError => exception
        puts "DiscordWebhooks::post - Warning : #{exception.message}\n"
        # No Internet connection, we ignore the problem
      end
  end

Et voilà, vous pouvez jouer en hors-ligne sans craindre de bug  (a)

« Modifié: 11 novembre 2020, 01:37:49 par Damien Linux »

Linux c'est plus qu'un OS, c'est une passion

Redder

Programmeur

Petit rajout de fonctionnalité pour ce script, je vais vous expliquer comment rajouter une option dans les paramètres de la sauvegarde pour bloquer les Webhooks si le joueur le veut.
Pour ceci on aura besoin de 4 choses (rien de bien compliqué) :
- Ajouter les textes de l'option dans le RH
- Modifier le project_identity pour ajouter l'option
- Créer un petit script qui initialise l'option au lancement d'une nouvelle partie
- Modifier le script Webhooks.

Premièrement, les textes.
Ouvrez RubyHost, et la fenêtre de textes.
Vous ouvrez le fichier 42 - Options, et vous ajoutez 4 textes a la fin.
4, parce qu'il vous en faut un pour le Oui, un pour le Non, un pour le titre de l'option, un pour sa description. Notez bien quel id correspond a quoi. On en a fini avec les textes.

Deuxièmement, le project_identity.
La première chose a faire est d'ouvrir cmd, et de taper "game --util=convert"
Ensuite, vous ouvrez le fichier Data/project_identity.yml avec un éditeur comme notepad++
Aux alentours de la ligne 32, vous trouverez ceci :
options: !ruby/object:ScriptLoader::PSDKConfig::OptionsConfig
  order:
  - :item1
  - :item2
  - ...
 
Vous devez intégrer
- :discord
à l'endroit que vous voulez, cette partie détermine l'ordre d'affichage.
Juste après, vous avez :
options:
  - - :message_speed
    - :choice
    - - 1
      - 2
      - 3
    - - - :text_get
        - 42
        - 4
      - - :text_get
        - 42
        - 5
      - - :text_get
        - 42
        - 6
    - - :text_get
      - 42
      - 3
    - - :text_get
      - 42
      - 7
    - :message_speed
...

Vous devez y intégrer ceci :
- - :discord
    - :choice
    - - true
      - false
    - - - :text_get
        - 42
        - ID_OUI
      - - :text_get
        - 42
        - ID_NON
    - - :text_get
      - 42
      - ID_TITLE
    - - :text_get
      - 42
      - ID_DESC
    - :discord
En remplaçant ID_X par les id des textes notés précedement.
Vous pouvez fermer le fichier, et executer dans cmd : "game --util=restore". On a fini pour cette partie.

3 partie, l'initialisation de l'option.
Rien de bien complexe, vous créez un script dans votre dossier script contenant ceci(fichier joint au message)
module PFM
class Options
attr_accessor :discord

alias old_initialize initialize
def initialize(starting_language)
old_initialize(starting_language)
@discord = true
end
end
end

Dernière partie, la modification du script Webhooks.
Si vous testez votre jeu maintenant, vous pourrez constater que l'option est bien présente, mais ne change rien.
Pour ce faire, je vous invite a télécharger le fichier présent en pièce jointe, il s'agit du script 09100 NuriYuri Webhooks/09101 webhooks.rb.

Voilà, c'est tout pour moi, j'espère avoir été assez claire pour ne perdre personne haha :)

« Modifié: 12 décembre 2020, 18:05:14 par Redder »

Lors de l'utilisation des Webhooks, pour la saisie du nom certains ont eu pas mal de soucis entre les insultes et les mentions [censuré] et [censuré] sur discord.

Pour régler ce problème, mettez le script ci-joint dans le dossier "Scripts" de votre projet sous PSDK.

Fonctionnement :

Pour ajouter des mots à interdire, ajouter une virgule après 'pede' et votre mot. Attention de ne pas mettre d'accents ou de caractère "@", ils ne seront pas pris en compte.
Si un mot indésirable est trouvé, votre héros va prendre son nom par défaut.

Plus-bas dans le script il y a :

Le programme va traduire les caractères entre [] en caractère indiquez avec "=>"

Par exemple :
Imaginons que vous saisissez le nom "méssagè", le programme va traduire cela en "message". Ca permet de gérer plein de cas.
Donc dans le tableau qui regroupe la liste des insultes, pour interdire "méssagè", il y a juste à ajouter ", message".
Pareil, inutile de préciser des majuscules.

Pour aller plus loin :
Pour configurer la partie sur le 2eme screen.
Il y a :
['ç'] => 'c'
Maintenant si vous modifiez :
['ç', 'u'] => 'c'
Imaginons que vous voulez interdire : "aux", il faudra donc indiquer "acx"
tous les "u" seront traduits à "c" lors de la vérification.

Précision : Les mots sont changés uniquement lors de la vérification. Si vous nommez votre personnage "Cé", pendant la vérification il sera traduit en "ce" mais le texte renvoyé par le script sera "Cé".

Crédits : Eurons, Metaiko, Damien Linux

« Modifié: 01 avril 2021, 22:20:17 par Damien Linux »

Linux c'est plus qu'un OS, c'est une passion

Nuri Yuri

HostMaster

Attention la méthode include? va faire que contrat sera capté alors que ce n'est pas un mot problématique.
ln(yo) = <3
J'en profite pour faire une petite suggestion : afin de faciliter l'ajour de mots à interdire, ne serait-il pas préférable d'opter pour un fichier texte afin d'y stocker ligne par ligne un mot ? Ceci permettra d'ajouter facilement des mots/noms à interdire plutôt que de devoir modifier le tableau dans le code même.

There was an error while thanking
Thanking...