Discourse Frotz 🧙

Ouaip, un nouveau plugin ! :tada: Celui-ci est un peu moins sérieux, cependant. :video_game:

Discourse Frotz


Il n’est plus nĂ©cessaire de mentionner le bot @ Ă  chaque Ă©tape. Une fois en jeu, il suffit de lui rĂ©pondre.

DépÎt Git : GitHub - merefield/discourse-frotz: A plugin that uses Frotz to give you an interactive fiction experience on your Discourse forum · GitHub

Qu’est-ce que c’est

C’est un « bot » avec lequel jouer Ă  de la fiction interactive, aka des jeux d’aventure textuels classiques, sur votre forum Discourse. Il agit essentiellement comme un adaptateur pour l’interprĂ©teur Z-machine standard et incroyable appelĂ© « frotz » Ă  l’adresse David Griffith / frotz · GitLab

Comment l’utiliser

La configuration ajoute deux jeux ; vous pouvez en ajouter d’autres dans les paramùtres.

Chaque entrĂ©e contient un titre et le nom du fichier de l’histoire.

Pour lancer l’interaction, vous devez mentionner le bot dĂ©fini dans les paramĂštres avec @. AprĂšs cela, rĂ©pondre Ă  l’un de leurs messages suffit.

Pour lister les jeux disponibles, vous devez d’abord mentionner le bot et demander :

@monbot list games

Cela vous donnera la gamme d’options.

Pour démarrer un jeu, tapez :

start game x en remplaçant x par le numĂ©ro de l’option.

Si vous souhaitez passer à un autre jeu, vous pouvez le faire ; le plugin sauvegarde votre progression à chaque mouvement, vous permettant de revenir à la premiùre histoire à tout moment. Le plugin maintient une sauvegarde pour chaque histoire pour chaque utilisateur qui l’essaie.

Pour continuer un jeu existant, tapez :

continue game x en remplaçant x par le numĂ©ro de l’option.

NB Une reconstruction complĂšte dĂ©truira tous les fichiers de sauvegarde. C’est un compromis nĂ©cessaire.

Comment jouer à un jeu d’IF ?

De nombreux « Meta’s » ont grandi avec ces choses. Pour ceux qui sont moins familiers, consultez cette aide-mĂ©moire : Play Some Interactive Fiction

Configuration

CrĂ©er l’utilisateur Bot

(dĂ©solĂ©, l’automatisation de cela est sur ma liste !)

Dans une session ssh, entrez dans votre conteneur et la console rails :

./launcher enter app
rails c

Ensuite, faites ceci :

u = User.create!(username: "Frotz", name: "FrotzBot", id:-5, email: "not@really.valid")
u.activate

Votre nouveau bot sera alors disponible pour ĂȘtre configurĂ© dans l’interface utilisateur. AccĂ©dez aux paramĂštres de l’utilisateur dans l’interface via le bouton administrateur et dĂ©sactivez tous les courriels. Mettez Ă  jour l’avatar selon vos goĂ»ts.

Installer Discourse Frotz

Mettre Ă  jour votre app.yml

C’est un peu plus intrusif qu’un plugin habituel.

Ajoutez ceci Ă  app.yml :

hooks:
  after_code:
    - exec:
        cd: $home
        cmd:
          - git clone https://gitlab.com/DavidGriffith/frotz
    - exec:
        cd: $home/frotz
        cmd:
          - make dfrotz
    - exec:
        cd: $home/frotz
        cmd:
          - mkdir savegames
    - exec:
        cd: $home/frotz
        cmd:
          - mkdir stories
    - exec:
        cd: $home/frotz/stories
        cmd:
          - wget -O zork1.z3 https://eblong.com/infocom/gamefiles/zork1-r119-s880429.z3
    - exec:
        cd: $home/frotz/stories
        cmd:
          - wget --no-check-certificate http://www.douglasadams.com/creations/hhgg.z3
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/merefield/discourse-frotz

avant vos autres entrées de plugins.

Vous devez maintenant également ajouter le plugin Discourse BBCode !!

Reconstruisez avec la commande habituelle ./launcher rebuild app

Allez maintenant dans les paramĂštres du plugin et sĂ©lectionnez l’utilisateur bot que vous avez ajoutĂ© prĂ©cĂ©demment :

image

Histoires

Vous remarquerez que j’ai inclus quelques histoires. Vous pouvez en trouver d’autres sur https://ifdb.tads.org/. Cependant, surveillez les limites de dĂ©bit ici ! Obtenir trop d’histoires depuis le mĂȘme emplacement peut provoquer une erreur.

Notez également que les histoires ne sont pas hébergées sur des serveurs protégés par HTTPS (tut tut).

Si vous insistez pour en charger davantage, ajoutez-les Ă  app.yml. Vous pourriez Ă©galement les ajouter manuellement depuis l’invite de commande, mais sachez qu’elles seront effacĂ©es lors de la prochaine reconstruction complĂšte.

Activer FrotzBot pour les messages privés (prudence conseillée)

Permet aux utilisateurs de jouer en privĂ©, mais l’utilisation sera moins transparente. Si vous avez un serveur assez puissant, cela pourrait ne pas ĂȘtre un problĂšme pour vous. Dans tous les cas, soyez conscient des implications pour la capacitĂ©. En alternative, encouragez les utilisateurs Ă  jouer dans une CatĂ©gorie dĂ©signĂ©e.

image
par défaut : OFF

Si (il/elle) n’est pas activĂ©(e) lĂ -bas, l’utilisateur recevra un message poli :

Restreindre FrotzBot par Catégorie

Vous pouvez restreindre le bot Ă  une (liste de) CatĂ©gorie(s) pour Ă©viter de remplir d’autres zones :

Raccourcis clavier !

C’est vraiment important pour amĂ©liorer l’expĂ©rience de « jeu ». Et vous n’avez vraiment besoin de retenir que deux raccourcis :

  • Shift-R pour rĂ©pondre au bot

  • Ctrl-Enter pour soumettre votre prochain mouvement

Limitations et considérations

Tous les formats d’histoires et jeux ne sont pas encore pris en charge, ni susceptibles de l’ĂȘtre. De nombreux jeux ne fonctionnent pas en raison de la nature de leurs protocoles d’appel et de rĂ©ponse. En raison de la maniĂšre dont nous interagissons message par message, nous devons demander Ă  Frotz de sauvegarder l’état aprĂšs chaque mouvement. Si une Ă©tape du jeu ne conduit pas Ă  une invite Ă  laquelle le systĂšme peut sauvegarder (en ignorant les invites « appuyez sur une touche » ou « Plus » qui devraient ĂȘtre gĂ©rĂ©es), alors l’histoire ne fonctionnera pas. Par exemple, dans Act of Murder (excellent jeu !), la dame Ă  la porte demande si vous ĂȘtes un policier. Malheureusement, c’est un Ă©tat du jeu qui ne peut pas ĂȘtre sauvegardĂ©, ce qui Ă©choue Ă  cette exigence, et je ne vois pas comment nous pourrions faire fonctionner cela.

NB Le mode liste de diffusion est un dĂ©sastre avec cela, alors assurez-vous que ce n’est pas quelque chose que vous utilisez avant d’essayer d’utiliser ce plugin !

On pourrait dire que c’est un peu gaspilleur de ressources du forum car cela nĂ©cessite au moins deux messages pour chaque « mouvement ». Il est Ă©videmment souvent plus appropriĂ© de jouer Ă  ce type de jeux en utilisant une interface de chat plutĂŽt qu’un forum, mais vous pourriez argumenter que cela pourrait ĂȘtre utilisĂ© pour crĂ©er des guides de jeu ? :wink:

Pour une solution moins intrusive, considérez : Turning a topic into interactive fiction ;)

Commentaires

Tous les commentaires sont les bienvenus !

Crédits

Ce plugin exploite David Griffith / frotz · GitLab, l’interprĂ©teur Z Frotz, qui est clonĂ© et « compilĂ© » par le script de configuration.

Merci Ă  @P16 de m’avoir permis d’utiliser des extraits de code d’un chatbot propriĂ©taire sur lequel nous avons travaillĂ© ensemble.

45 « J'aime »

Wooah, back again!

New Feature-rettes

Enable FrotzBot for private messages (at your peril! :wink: )

Allows users to play in private, but usage will be less transparent. If you have a big enough server this may not be an issue for you.

image
default: OFF

If (s)he is not enabled there, the user will get a polite message:

Restrict to a list of Categories, or allow all:


default: ON for all Categories

10 « J'aime »

Salut Robert ! Merci, j’apprĂ©cie vraiment ce plugin !
J’ai essayĂ© de l’installer dans un environnement de dĂ©veloppement (sans Docker) et mon systĂšme a demandĂ© la bibliothĂšque ncursesw lors de la compilation de dfrotz. AprĂšs l’avoir installĂ©e, tout a fonctionnĂ©. Est-ce que ce sera le cas dans un environnement de production avec Docker ?

1 « J'aime »

J’ai testĂ© en production et la construction sur Docker (Ă  ma surprise) a fonctionnĂ© sans problĂšme. N’hĂ©sitez pas Ă  dĂ©ployer sur une instance de production et faites-moi savoir comment cela se passe.

Content que cela vous plaise !!

2 « J'aime »

Pour ceux comme moi, qui pourraient perdre leurs derniers cheveux Ă  ce sujet :

hhgg.z3,9,7,3
c’est :

  story_header_lines = 9
  story_load_lines = 7
  story_save_lines = 3

et maintenant, comment l’adapter
 :sweat_smile:, c’est une aventure dans une aventure
 !

1 « J'aime »

Je travaille actuellement avec le mainteneur de Frotz pour voir si nous pouvons nous passer de ceux-ci. C’est une approche que j’ai portĂ©e depuis restful-Frotz, mais loin d’ĂȘtre parfaite :slight_smile:

1 « J'aime »

Oui ! Je l’ai trouvĂ© !
kheper.z8,20,15,4 fonctionne presque
pour celui-ci :

:smiley:

Ce n’est rien, mais il y a quelque chose d’étrange

) Affichage par ligne DÉSACTIVÉ
Mode de compression MAX, masquant les 0 premiĂšres lignes

est affiché une fois par Pause() avec

[Pause notNeeded;
@read_char 1 notNeeded;
rtrue;
];

1 « J'aime »

Ha, oui, il y a beaucoup de particularités et une variété considérable dans les histoires. Je ne peux pas promettre de toutes les prendre en charge.

Actuellement, mon objectif est de :

  1. simplifier le code
  2. rendre le code plus sécurisé
  3. ajouter de la mise en forme lorsque c’est pragmatique.

Le point n°3 est étonnamment difficile.

1 « J'aime »

J’ai poussĂ© quelques amĂ©liorations sur une branche de fonctionnalitĂ© :

Cela Ă©limine les paramĂštres de suppression absurdes, introduit la traduction vers BBCode pour prendre en charge le formatage et les couleurs, exploite mieux les options de ligne de commande de Dumb Frotz, rend inutile l’écriture dans un flux de texte et corrige une vulnĂ©rabilitĂ©.

Cette branche nécessite que le plugin BBCode officiel soit installé.

Je suis encore en train d’expĂ©rimenter avec. N’hĂ©sitez pas Ă  faire de mĂȘme.

Je ferai probablement la fusion aprĂšs quelques tests significatifs.

1 « J'aime »

Le plugin a-t-il besoin de cloner l’ensemble du dĂ©pĂŽt frotz ou suffit-il que $home/frotz/dfrotz existe ? Je prĂ©fĂ©rerais le compiler une seule fois et conserver le binaire entre les reconstructions.

Je ne sais pas vraiment pourquoi cela vous importe ? Les ressources dont nous parlons sont comparativement minuscules (6 Mo pour l’ensemble du dĂ©pĂŽt aprĂšs make, contre des gigaoctets pour le forum ?). Il clone l’intĂ©gralitĂ© du dĂ©pĂŽt, puis compile simplement dfrotz. Peut-ĂȘtre que c’est un peu gaspilleur, mais la simplicitĂ© et la reproductibilitĂ© sont, selon moi, plus importantes. Je pourrais entrer dans plus de dĂ©tails et effectuer un clone partiel, mais cela rendrait le script de construction plus complexe et moins robuste. En vaudrait-il la peine ? N’hĂ©sitez pas Ă  suggĂ©rer une optimisation. Tout cela est construit Ă  l’intĂ©rieur du conteneur, donc sera nettoyĂ© Ă  chaque fois que le conteneur l’est.

Je cherche simplement Ă  optimiser pour mon petit serveur, je ne vous demande pas de modifier l’installation gĂ©nĂ©rale.

1 « J'aime »

C’est vraiment un super plugin ! Cela me rappelle un jeu d’ordinateur « classique » créé il y a des annĂ©es (j’ai oubliĂ© le nom).

3 « J'aime »

C’est une excellente suggestion pour une future optimisation, à condition que je puisse la garder simple et robuste. Merci !

1 « J'aime »

Oui, il existe de nombreux classiques jouables. Davantage via le lien dans le message original.

2 « J'aime »

Grosse mise Ă  jour : :tada: :kiwi_fruit:

(Cela a nĂ©cessitĂ© plusieurs mois de travail occasionnel en arriĂšre-plan et de coordination avec l’équipe Frotz).

Présentation du formatage couleur complet et du texte en police à chasse fixe pour les histoires

Cette importante mise Ă  jour s’accompagne de nombreuses amĂ©liorations :

  • AJOUT du support du formatage couleur et du texte en police Ă  chasse fixe
  • AMÉLIORATION des paramĂštres simplifiĂ©s : plus besoin de calibrer l’en-tĂȘte et le pied de page, il suffit de spĂ©cifier le titre souhaitĂ© et le fichier d’histoire, ouaou !
  • AMÉLIORATION : utilisation de la gemme Open3 pour les commandes systĂšme, rĂ©duisant ainsi les risques d’abus et de vulnĂ©rabilitĂ©s.
  • AMÉLIORATION de l’interaction interne avec la ligne de commande pour supprimer le besoin de fichiers de flux ; le systĂšme gĂšre dĂ©sormais les invites « plus » ou « appuyez sur une touche ».

Cette mise à jour REQUIERT désormais le plugin Discourse BBCode !!

Cela a nĂ©cessitĂ© la collaboration du mainteneur de Frotz, David Griffiths, et d’un membre trĂšs actif de cette communautĂ©, Borg323, qui a Ă©crit les extensions BBCode conformĂ©ment Ă  la norme BBCode de Discourse. Un immense merci Ă  eux ! Nous avons dĂ» faire preuve de crĂ©ativitĂ© pour faire fonctionner le texte en police Ă  chasse fixe, mais la solution est vraiment excellente !

Quelques exemples du nouveau formatage (je n’ai pas entiĂšrement testĂ© ces histoires, il s’agit simplement d’exemples de formatage)

et remarquez la boussole colorée ici :

PROBLÈMES CONNUS : De nombreux jeux ne fonctionnent pas en raison de la nature de leurs protocoles de requĂȘte et de rĂ©ponse. Si une Ă©tape du jeu ne vous mĂšne pas Ă  une invite oĂč vous pouvez sauvegarder (en ignorant les invites « appuyez sur une touche » ou « plus » qui devraient ĂȘtre gĂ©rĂ©es), l’histoire ne fonctionnera pas. Par exemple, dans Act of Murder (excellent jeu !), la femme Ă  la porte vous demande si vous ĂȘtes policier. Malheureusement, c’est un Ă©tat du jeu qui ne peut pas ĂȘtre sauvegardĂ©, ce qui Ă©choue Ă  respecter cette exigence, et je ne vois pas de moyen de faire fonctionner cela.

Il existe probablement des jeux qui sont dĂ©sormais compatibles avec Discourse Frotz alors qu’ils ne l’étaient pas auparavant
 n’hĂ©sitez pas Ă  expĂ©rimenter, mais notez la limitation mentionnĂ©e ci-dessus !

Faites-moi part de tout problùme que vous rencontreriez pour faire fonctionner cela, et j’affinerai les instructions selon les besoins.

8 « J'aime »

Rappel : vous pouvez utiliser des raccourcis clavier pour améliorer votre expérience avec ce plugin :

  • Maj-R pour rĂ©pondre au bot

  • Ctrl-EntrĂ©e pour soumettre votre prochain coup

(Raccourcis clavier standard fournis par défaut).

5 « J'aime »

Salut Robert !
J’ai enfin eu le temps d’aller plus loin. Jusqu’ici, tout va bien, ça a fonctionnĂ© directement en environnement de production :+1:

Étrangement, frotz ne parvient pas Ă  rĂ©pondre aux messages privĂ©s sauf si je le configure Ă©galement dans une catĂ©gorie quelconque :thinking:
Prochaine étape : jouer :grinning_face_with_smiling_eyes:

1 « J'aime »

Merci pour le rapport !

J’ai corrigĂ© le problĂšme : FIX: behaviour of private messages playing permission setting · merefield/discourse-frotz@34b022e · GitHub

NTS : il faut ajouter quelques tests unitaires !

2 « J'aime »

J’ai essayĂ© d’ajouter :grin: dans une source,

Ça va ĂȘtre amusant !

1 « J'aime »