$(eval) external js code

AS (Ante-scriptum): Im Belgian and I dont speak english in my daily life, my apologise.

Yo,
I saw several topics that looked like my problem but it didn’t help me at all…

I want to make a command “!but” (means “goal” in French), this command had to adapt its response to the game played (and in the case of Minecraft, to the type of mini-game with a title check (“Taupe Gun” and “Switch” in my example).
I don’t think I had a problem with the code itself…
The command was to explain the rules/objectives of the actual game.

I quickly ran into the character limit of Twitch… so I used $(urlfetch) with messages on individual “pastebin.com. Then I shortened the links with “bit.ly” but I still have a long message !

So I was wondering if it was possible to “stock” the code or a part (an “if section” for example for minecraft titles) on an external site and do a little the same principle as pastebin ?
If yes, should I declare parameters or others at the beginning of the code? And what to put in the $(eval) and/or $(urlfetch) for Nightbot to understand?

Voici le code “intégral” qui est beaucoup trop long

$(eval
var r = false;
	var title = '$(twitch $(channel) "{{title}}")';
if('$(twitch $(channel) "{{game}}")' == 'Project Winter')
    r = '$(urlfetch https://bit.ly/30QFOI4 )';
else if('$(twitch $(channel) "{{game}}")' == 'The Hunter')
    r = '$(urlfetch https://bit.ly/3hCpsIY )';
	else if('$(twitch $(channel) "{{game}}")' == 'Minecraft')
		if(title.includes("switch"))
			r = '$(urlfetch https://bit.ly/2Ch1RgN )';
		else if(title.includes("taupe"))
			r = '$(urlfetch https://bit.ly/2Y6SN6C )';

if(r)
    r;
	else
		'Réflechis frerot';
)

And it’s my more recent try, with parameters
NIGHTBOT:
—> $(eval $(urlfetch https://pastebin.com/raw/AtrtLaAZ ))

And on the Pastebin:

Parameters:
c = $(channel)
t = {{title}}
g = {{game}}

var r = false;
var title = '$(twitch c "t")';
if('$(twitch c "g")' == 'Project Winter')
    r = '$(urlfetch https://bit.ly/30QFOI4 )';
else if('$(twitch c "g")' == 'The Hunter')
    r = '$(urlfetch https://bit.ly/3hCpsIY )';
else if('$(twitch c) "g")' == 'Minecraft')
	if(title.includes("switch"))
		r = '$(urlfetch https://bit.ly/2Ch1RgN )';
	else if(title.includes("taupe"))
		r = '$(urlfetch https://bit.ly/2Y6SN6C )';

if(r)
    r;
else
    'Réflechis frerot';
)

Thank you very much, very much to everyone who will take the time to read and try to help me find a solution :slight_smile:

Have a good day,
Clément

Hey @sugiiiiii!

As it’s an English forum here’s the translation of the important part of the answer:
You’re on the right track, the idea is to declare variables before calling the extra code inside the Pastebin, so for the command it looks like this:

$(eval //declare your variables// $(urlfetch json https://pastebin.com/raw/XXXXXXXX))

Replace XXXXXXXXX by the paste ID, and then inside the paste use the variables you declared before.


Tu es sur la bonne voie, l’idée est bien de déclarer les variables en amont, et ensuite d’appeler le code supplémentaire.
Cependant je vois quelques améliorations possible pour ton code afin de le rendre plus fiable, ainsi que quelques erreurs à corriger.

Donc pour la commande Nightbot ça donne ça:

$(eval var a=`$(twitch $(channel) "{{title}};;;{{game}}")`.split(`;;;`); $(urlfetch json https://pastebin.com/raw/XXXXXXXX))

a est un array contenant le title (en a[0]) et le game (en a[1]) du stream pour avoir moins de variables à gérer.
Seul bémol, tu ne dois pas utiliser ;;; (trois point-virgule d’affilée) dans ton title, mais c’est parce que c’est peu probable que j’ai choisi ces caractères pour créer l’array.
Bien sûr n’oublie pas de remplacer XXXXXXXX par l’ID du Pastebin.

Ensuite pour le code du Pastebin, le voici:

var r = `/me Réflechis frérot`;
if(a[1]==`Project Winter`){
	r=`/me Les survivants doivent rassembler des ressources, réparer les structures et survivre au froid, l'objectif final est d'accomplir une série de tâches afin de faire appel à l'un des nombreux véhicules de sauvetage. Il y a des traîtres au sein du groupe leur seul objectif est d'arrêter les survivants par tous les moyens possibles.`;
}
else if(a[1]==`The Hunter`){
	r=`/me C'est une compétition entre 3 équipes composées de 3 chasseurs, ils ont 1h30 pour chasser le maximum d'animaux. Chaque bête vaut un certain nombre de points. A la fin du temps imparti, on compte les points et l'equipe perdante doit chanter une chanson honteuse choisie par la majorité.`;
}
else if(a[1]==`Minecraft`){
	if(a[0].toLowerCase().includes(`switch`)){
		r=`/me Switch est un mode de jeu Minecraft dans lequel, toutes les 15 minutes, un membre de chaque équipe est "switché" dans une autre équipe. L'objectif final est d'être la dernière équipe.`;
	}
	else if(a[0].toLowerCase().includes(`taupe`)){
		r=`/me Taupe Gun est un mode de jeu Minecraft où plusieurs équipes s'affrontent. Dans chacune d'elles se trouve une taupe qui devra éliminer ses partenaires pour gagner, et cela sans se faire repérer par ses potes.`;
	}
}
r;

Comme r a une réponse par défaut tu peux la déclarer au début, ensuite si les conditions sont vraies, r sera mis à jour.
Ensuite, puisque tu n’es pas limité sur Pastebin, tu peux écrire les réponses entières dans la paste contenant le code, pense juste à rajouter json dans $(urlfetch) pour passer outre les limitations.
J’ai également rendu le test sur le title plus fiable en utilisant .toLowerCase() qui compare le title en minuscule avec “switch” ou “taupe” au cas où ils seraient écrit avec des majuscules.
Enfin, en JS, lors de test if(){}else{}, les crochets sont nécessaires.

1 Like

Ho merci beaucoup !
Déjà pour m’avoir répondu et éclairé mais encore plus pour avoir répondu en francais et expliqué la démarche :smiley:
C’est super sympa, je ne m’attendais pas à un tel investissement ^^

For the english translation: Thank you very much
for the time spent on my problem and even more for having explained the approach/reasoning :slight_smile:

Solved topic :slight_smile:

1 Like

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.