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 »

Hi Robert! Thank you, I really like this plugin !
I tried to install it on dev environment (without docker) and my system asked for the ncursesw lib when making dfrotz, after installing that it worked, will it be the case with a prod env with docker?

1 « J'aime »

I tested on Production and building on Docker (to my surpirse) worked out of the box. Feel free to deploy to a Production instance and let me know how you get on.

Glad you like it!!

2 « J'aime »

For those like me, who might loose their last few hairs about that:

hhgg.z3,9,7,3
that’s :

  story_header_lines = 9
  story_load_lines = 7
  story_save_lines = 3

and now, how to adapt it
 :sweat_smile:, that’s an adventure inside an adventure
!

1 « J'aime »

I’m currently working with the maintainer of Frotz to see if we can do away with those. It’s an approach I ported from restful-Frotz but hardly perfect :slight_smile:

1 « J'aime »

Yes ! found it !
kheper.z8,20,15,4 almost works
for this one :

:smiley:

it’s nothing, but there is something weird

) Line-type display OFF
Compression mode MAX, hiding top 0 lines

is displayed once by Pause() with

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

1 « J'aime »

Ha, yeah, there are lots of quirks and a considerable amount of variety in the stories. I cannot promise to support all.

Right now my focus is on:

  1. simplifying code
  2. making the code more secure
  3. adding formatting where pragmatic.

#3 is surprisingly hard.

1 « J'aime »

I’ve pushed some improvements to a feature branch:

This does away with the silly suppression settings, introduces translation to BBCode to support formatting and colour, leverages the Dumb Frotz command line options better, obviates the need to write to a text stream and squashes a vulnerability.

This branch requires the official BBCode plugin to be installed.

I’m still experimenting with it. Feel free to do so too.

I’ll probably merge after some significant trials.

1 « J'aime »

Does the plugin need the whole frotz repo clone or does it just need $home/frotz/dfrotz to exist? Because I’d rather just compile it once and save the binary between rebuilds.

Not sure why you would care? The resources we are talking about are comparatively tiny. (6MB for the entire repo post make versus Gigabytes for the forum?). It clones the whole repo, then just makes dfrotz. Perhaps that is slightly wasteful, but the simplicity and repeatability is more important I feel. I could go into greater detail and perform a sparse clone, but that would make the build script more complex and less robust. Would it be worth it? Feel free to suggest an optimisation. This is all building inside the container, so will get cleaned whenever the container does.

I’m just trying to optimize for my tiny server, not asking you to change the general install.

1 « J'aime »

This is a really cool plugin! This reminds me of a “classic” computer game that was created years ago(I forgot the name).

3 « J'aime »

It’s a great suggestion for a future optimisation if I can keep it simple and robust. Thanks!

1 « J'aime »

Yes there are many playable classics. More via the link in the OP.

2 « J'aime »

BIG update: :tada: :kiwi_fruit:

(this has taken months of occasional background work and coordination with Frotz team).

Introducing full colour and monospaced formatting for stories

This big update comes with a bunch of improvements:

  • ADDED colour formatting and monospaced text support
  • IMPROVED simplified settings: no longer requires calibration of header and footer, just the desired title and story file, whoop!
  • IMPROVED uses Open3 gem for system commands, reducing risk of abuse/vulnerabilities.
  • IMPROVED internal interaction with command line to remove need for stream files, now copes with more/press any key prompts

Now REQUIRES the Discourse BBCode plugin!!

This required the collaboration of the maintainer of Frotz, David Griffiths and one of the very active members of that community, Borg323 who wrote the BBCode extensions against the BBCode Discourse standard. Many many thanks to them! We had to get a bit creative to get the monospaced text stuff to work, but the solution is really great!

Some examples of the new formatting (I’ve not fully tested these stories, these are just examples of formatting)

and notice the coloured compass here:

KNOWN ISSUES: There are loads of games that don’t work because of the nature of their call and response protocols. If one step of the game doesn’t lead you to a prompt at which you can save (ignoring press any key or More prompts which should be handled), then the story won’t work. e.g. in Act of Murder (great game!) the lady at the door asks if you are a policeman. Unfortunately this is a state of the game that’s unsaveable so fails this requirement and I can’t see a way we would get that to work.

There are probably games that are now compatible with Discourse Frotz that weren’t before 
 please experiment but note the limitation above!

Let me know if you have any issues getting this to work and I’ll refine the instructions as required.

8 « J'aime »

A reminder that you can use keyboard shortcuts to improve your experience with this plugin:

  • Shift-R to reply to the bot

  • Ctrl-Enter to submit your next move

(Standard out of the box keyboard shortcuts).

5 « J'aime »

Hi Robert !
finally had time to go further, so far so good, it worked right out of the box in prod env :+1:

Weirdly frotz is not able to respond in private messages unless I also set it in any category :thinking:
Next step : to play :grinning_face_with_smiling_eyes:

1 « J'aime »

Thanks for the report!

I’ve gone ahead and fixed that: FIX: behaviour of private messages playing permission setting · merefield/discourse-frotz@34b022e · GitHub

NTS: must add some unit tests!

2 « J'aime »

I tried to add :grin: in a source,

it’s going to be fun !

1 « J'aime »