Alright, getting things ready for an interactive fiction club! If folks are interested, I think we can start December off with a classic infocom game, Planetfall. I've got a discord up & running, which folks can join, here discord.gg/cf69sWjEE5

It's not mandatory, but if you are interested, you can also just join the discussion here on Mastadon with the hashtag #ifclub The club will rotate each month between a classic text adventure snd a more modern interactive fiction
#infocom #infocomodon

@intficpics I've just made a bot which allows multiplayer on z-machine games on mastodon (and honk).
If you follow the bot here @sandestin you will receive a welcome message.
Reply to the welcome message to play the game.
(See screenshot attached)

@nandalism @intficpics @sandestin

Can you branch off by replying for a second time to a previous response of the bot?

(I had a bot that allowed for that in the short time Wave was a thing and it IMO was much nicer than standard UNDO constructs.)

@robryk Hi! It's a nice idea but it seems technically very difficult. I'd need to keep multiple game instances running, one per conversation/thread.

In fact I'd probably have to checkpoint every action since it could later be a branch point... at any time in the future.

That's way too much complexity for me, sorry.

You can save/restore tho (see /help).

The availability of undo depends on the actual game being played. I guess some of the newer ones have the feature but zork and planetfall don't?

This is intended for group play rather than having a separate game instance for each player.
It's more intended that people gather as a group to play a single game instance together.

Follow

@nandalism Huh, so you don't checkpoint at every post? That's surprising; I would expect it to be way easier to do so (otherwise the synchronisation of the current state of the game between what's published on fedi and the internal state is much harder).

> It's more intended that people gather as a group to play a single game instance together.

+1. Are you aware of Club Floyd? (They do that over a text MUD.)

Is the source for the bot available somewhere?

@robryk Yes. This concept is entirely inspired by Club Floyd.

The source is not available for the moment. However, it is based heavily on Honk (for the activitypub part) and uses Dumb Frotz for the Z-machine part.

@nandalism Do you intend to make it available (and legal to make derivatives of) within ~weeks?

@robryk I have no plans to make the source available. It seems like more effort than I want to invest at the moment.

I want to see how much work running the bot takes first before committing to running an open source project.

I always welcome any improvement suggestions tho. Although I may decide that they are too complicated to implement...

@nandalism Also, do you have any ideas on how to integrate the commentary track?

@robryk I'm not sure I really understood that.

I must admit that how/when mastodon/honk decide to publish/show messages and where is a bit of a mystery to me. Though I am trying to learn more about it.

I really want to avoid spamming people who subscribe to sandestin but at the same time keep them up to date on the actions of other players.

I've tried various combinations of to/cc and /followers but want to avoid activitystreams#Public since that seems very noisy.

There should also be a way to communicate among players without hitting sandestin. I thought that would be possible by posting to the thread/conversation but now I'm no longer sure.

Do you have any suggestions?

@nandalism

Sadly, fedi doesn't have a concept of following a thread (the same issue that mailing lists have, because it's modelled after them). If it had, that would be an obvious fit for following a game. Given that it doesn't, it might be useful to have a bot farm instead of a bot and create a new bot every time a new game is started. (I expect that honk's half-support for multiple users might be enough for that.)

Regarding players messaging each other _but not the bot_: there are two issues with that. First is that unless you are one of the players you can't feasibly find those messages, so public commentary track is not a thing. Secondly, Mastodon's (not fedi's) semantics around who-a-reply-is-cc'd-to are weird and I still don't understand them well, so I expect that players will not do that correctly most of the time.

> I really want to avoid spamming people who subscribe to sandestin but at the same time keep them up to date on the actions of other players.

I'm somewhat confused: what do you want them to see/not see in their inboxes?

> I must admit that how/when mastodon/honk decide to publish/show messages and where is a bit of a mystery to me.

Mastodon is confusing. If you speak in APub terms, then (if the source server doesn't lie -- the source server is the only guardian of the relationship between to/cc/bcc and where the message is actually sent):
- messages go to inboxes of all users who are in to/cc/bcc and end up in their feeds,
- messages addressed to Public go to public instance-wide and wider timelines (Mastodon terminology: they are not unlisted),
- messages addressed at whatever-the-name-is-for-followers-outbox get the moral equivalent of being sent to all followers inboxes.
What you can see on the public timeline _of the user_ on their local instance is instance-specific, on their timeline on a remote instance I don't know.

@nandalism @robryk I don't know how honk works but mastodon has post visibility options like public, unlisted, friends only and mentioned users only. I think one of those last two would be appropriate for this bot.

@objectinspace @nandalism

That would work for non-public games only. There'd be no way to link anyone else to a post from such a game.

@robryk @nandalism If it @s everyone who posts to a game it would work in mentions-only, but then you'd have to be able to tell it when you're no longer interested. So probably friends only makes the most sense. Maybe a hashtag at the end with the current game so people can mute posts from games they aren't playing?

@objectinspace @nandalism

Mastodon has a feature of muting a thread (for some obscure reason only a thread that you've already participated in).

Note that @ing is a Mastodonism. It's only (mostly?) Mastodon that decides on whom to cc on a post nearly solely based on mentions in the post. It's perfectly fine to cc someone on an ActivityPub object they are not mentioned in at all.

Having a separate Actor (IOW user) for each game would probably solve most of the issues you think of.

@robryk @objectinspace I have since added a tag [hashtag] sandestin to each game message. Maybe that helps?

I tried to follow that hashtag from mastodon but didn't see any messages. Maybe it only works for posts originating in the same mastodon instance?

Can you make use of the new hashtag? For muting or filtering?

@objectinspace if you want to try sending some replies here with those "friends only and mentioned users only" settings? I can examine the underlying activitypub message and try to learn from it. I don't even see those options on my mastodon client.

I have the problem of mapping "mastodon client terminology" to the actual, underlying activitypub message format which I need to send.

Sandestin's pretty spammy on your home feed at the moment. The only advice I've seen to filtering Home is to create a hashtag and follow it, but that doesn't work for me.

@nandalism @objectinspace

> I tried to follow that hashtag from mastodon but didn't see any messages

IIUC following hashtags only works for public, non-unlisted messages (it's essentially a filter over the federated timeline).

> Can you make use of the new hashtag? For muting or filtering?

In Mastodon you can filter on any words in the message, incl. hashtags. By filtering I mean "cause messages that match not to appear in your home feed".

> I have the problem of mapping "mastodon client terminology" to the actual, underlying activitypub message format which I need to send.

Note that Mastodon (happily) doesn't really require incoming messages to look like messages Mastodon could have generated. TTBOMK it's perfectly fine to e.g. send a non-public boost to a Mastodon instance and it will be handled correctly.

> Sandestin's pretty spammy on your home feed at the moment. The only advice I've seen to filtering Home is to create a hashtag and follow it, but that doesn't work for me.

First, you might wish to make messages unlisted. I believe unlisted is equivalent to "as:public is not in to or cc". Otherwise they will appear in e.g. federated timelines of other instances, which they might mind.

The second question is what would you actually want to happen? I expect players would want the messages to appear in their feeds. I also expect that usually you'd want games to be public and others to be able to view links to those messages and maybe get them in their feed, too. This really sounds like you want to have a notion of following a game.

On the ActivityPub level this suggests that you want to have a collection of all followers of the game (so that commentary and commands are also sent to them). This can most easily be done with an Actor you can follow. I expect that APub would support doing that without an actor in some way, but that it would be very confusing for existing implementations.

@robryk

First, you might wish to make messages unlisted. I believe unlisted is equivalent to "as:public is not in to or cc"

That sounds interesting but I'm afraid I didn't understand what you mean in the sense of concrete activitypub structures to add/change.

Focusing on a single actor for a moment. I have a single actor. I have only a single game. My problem is not that the followers cannot see the messages. I believe, they can. The problem is that it's currently too noisy in the Home feed. I'd like a way of filtering out from the home feed (you say filters can do that, good), but then also providing the game messages in another feed e.g. a list or a hashtag or something else I don't know about.

I think this can be something done in the mastodon client. Tidying the home feed and splitting off separate feeds seems to be a thing that should be possible. However, I have not found out how to do that.

If I can add some fields/tags to my messages to aid this I can. However, multiple actors doesn't seem to solve the current problem. I have only one game, so I need only one actor [sandestin], at the moment.

@nandalism

Feeds other than the Home feed are not a concept that's exposed via ActivityPub. An account (Actor) exposes a single endpoint to send them messages, just like there's just one way to send an e-mail to an address (nb. e-mail is a very good mental model for APub IMO).

Now, there are various kinds of fediverse instances or clients for various instance kinds that have the concept of multiple feeds. This works in two different ways:
- by showing you a subset of messages you receive via your inbox (e.g. Mastodon, or at least some versions thereof, allow you to decide which feeds a particular account's posts end up in),
- by picking some posts from the federated feed (i.e. all the posts the instance receives that you are allowed to see) and putting them there -- this is how following a hashtag works.

So, at least on some versions of Mastodon (I'm always unsure which things are a feature of vanilla Mastodon and which are of the fork my instance's running) you can make a separate feed and cause messages from a particular account to show up only there, with no need to mark them in any additional way.

@robryk

Feeds other than the Home feed are not a concept...

Good to know. I was hoping, as you said later, that the client would allow me to split the home feed based on rules into user-defined feeds.
Something like how some email clients allow rules for filtering inbox messages into separate folders.
The underlying activitypub system doesn't need to know anything about it. It's just a client-side, human convenience.

by picking some posts from the federated feed ... this is how following a hashtag works.

This is what I was hoping for but it doesn't seem to happen on my mastodon client (the web client as delivered by https://mastodon.gamedev.place/). What version? How can I tell? I don't see any details on https://mastodon.gamedev.place/about.
I follow the hashtag but nothing appears (actually one post appears, which was a reply on the initial thread/conversation where I announced sandestin). So it might be that only as:Public messages appear in hashtag feeds? I want to avoid as:Public since they cause all game replies to spam player followers.

I was working on getting Honk and Mastodon working with sandestin, but now you give me the scary news that there are various forks of Mastodon...

@robryk @objectinspace The system as it currently is allows me to select actor:sandestin in mastodon and see everything. It works perfectly. Excepting only that one must switch tabs to refresh.

Now @robryk has explained that Home-filtering can remove the messages from the home feed (by saying "please no" to the game hashtag), It could be that this is as good as it gets.

No more Home spamming and all the game messages under a single hashtag, which you can easily ignore, just by not looking at the hashtag.

I've tested the following on mastodon web client and it seems to be a viable interim solution.

Search for user @sandestin in the search bar
Mute the user (disappears from Home feed!)
Follow the game in the @sandestin page under Posts and Replies (which is still there despite Mute)

@nandalism My instance runs a customized version of Glitch (glitch-soc.github.io/docs/). If I flip some settings options, my follow dialog looks like the attached image.

@nandalism Answering someone's curious questions is both very nice and very useful, so it was all my pleasure.

BTW. I've dug up my Wave bot from 2009 and you might be overestimating how hard would it be to do the branching version (I expect it to be easier than what you're doing) -- you just need to keep a mapping from post the bot made to the state of the game just after this post. When a reply comes, the reply tells you what post it's a reply to, so you load, execute action, save, make a reply, and store the mapping of the reply to the new state.

Back them zmpp (zmpp.sourceforge.net/) was the z-machine engine that made all that easiest, but I expect that's not the case anymore.

@robryk I understand the concept. You oneshot the entire game emulator every time and execute [restore/command/save].

I once did a *Massively Scalable Zork" docker container when I was learning docker. It was just a joke really but it worked like I think you mean.

@nandalism Yup. Note that you don't need to save/restore via game commands, but simply dump the emulator state.

@nandalism BTW. I just realized that in that model there's a very natural way of specifying targets of messages: use standard e-mail rules (i.e. "to" author of the command, "cc" to everyone the command had in to/cc).

The nice property of that is that it allows players to determine privacy of the game by simply setting privacy of the commands.

@robryk Originally I had TO=author-of-command and CC=all-other-followers
(Nowhere as:Public)

That's not exactly what you are saying I suppose, but close.
I don't know how much control end-users have over the contents of CC. I assume your idea is to give the replying user control over visibility.

Again, the only reason I don't have as:Public in CC too is that it doesn't seem to help and I think it might cause reply-spamming (maybe not).

Show newer

@nandalism

as:Public has little to do with spamming followers. You can (but Mastodon never does) send a post that's "to" or "cc" as:Public but is not "to" or "cc" honk.deckc.hair/u/nandalism/fo.

Also, for purposes of not spamming federated timelines of anyserver that federates with you, as:Public should not be in "to", but rather in "cc".

Re various forks of Mastodon: then there's Pleroma, Akkoma, ..... I personally would appreciate if people didn't try to "work with Mastodon" for the same reasons I don't want people to develop websites for Chrome specifically.

@robryk
Currently sandestin does not send as:Public in any part of its messages. So that means I should not be spamming federated timelines. This should be very unlisted and I think I can safely leave it that way?

The remaining 2 points of confusion:

why I cannot see sandestin's posts in [hashtag] sandestin, on mastodon client.
why I cannot see sandestin's posts in a List including [user] sandestin, on mastodon client.

Is it possible that I need as:Public in "cc" for hashtags and List to work? Or is that irrelevant?

@nandalism

as:Public _in cc_ is used to indicate that anyone is allowed to see this post. If you don't have it fedi instances will now allow anyone who's not listed in to or cc to see it (I might be slightly wrong here somewhere around the area of expanding followers).

as:Public _in to_ is used to indicate that the post belongs on federated timelines.

Re hashtag: Try sending an equivalent of an unlisted post and see if it appears there? I'm not sure how this is intended to work exactly.

Re list: that's surprising. Maybe you've set it so that list in your client doesn't display replies (see screenshot)?

@robryk
My Home/settings are as you show (boosts + replies)
I've added a screenshot of my list settings and there is one user [sandestin] added to the list.

My lack of as:Public anywhere may be the cause of the problems. I read somewhere that "to":".../followers" (the mastodon default reply-to message) will spam followers if the original message is as:Public, so I removed as:Public everywhere. I do have all followers in "cc"+"to".

As you suggest, I will try making a new list for nandalism and try various posts from there. I'm pretty sure sandestin's posts are unlisted since they have no as:public and also have "directMessage":true.

@nandalism Well, the bot is not replying to itself, so the settings you've pasted would exclude its replies.

E: Unless I totally misunderstand that UI.

@robryk Thanks for the suggestion on creating a new list with a normal (honk) user. As long as I follow that user, his messages appear in the list.
Muting the user deletes all the messages in the list and blocks further messages. (This explains some of the other behavior I was seeing.)
Unmuting shows any subsequent messages.
(Unmuting Sandestin does not help. I still see nothing in the List)

I'll add logging to my honk server and try to see the difference between these visible messages and the failing sandestin messages (at the activitypub/json level).

It's getting late in UTC-land so I'll continue thinking about this as I sleep and report my progress tomorrow.

@nandalism @robryk I'll do that, sure. Not sure why post visibility isn't on your account but yeah I will reply with different visibilities and see if it changes anything on your end. Might not actually. You should be able to follow hashtags across instances so not sure why it didn't work. I'll see if the hashtag works on my end. TBH though if the bot is using the same tag on each post I don't think it'll be all that useful unless other people use it, which is a lift.

@objectinspace @nandalism

Apologies for confusion that I cause about unlisted.

Mastodon's interpretation is:
- public, not-unlisted are posts sent "to" as:Public,
- public unlisted are posts sent with as:Public in "cc",
- if as:Public is in neither, this is a post visible to some group of people only.

@objectinspace Thanks I see your 2 test messages [private and unlisted]. I will have a look at their activitypub content in a while.

It seems what you call "as:Public" I call
"cc": "https://www.w3.org/ns/activitystreams#Public". So now I understand. I avoid using that completely and send to each follower. I avoid as:Public since otherwise every players game replies get sent to all their followers. Terrible! At least this was my understanding and I will examine your 2 test messages to check.

The reason for the same hashtag each reply is that I am hoping players can filter on the hashtag to create a separate feed for the game, and "delete" the messages from their home feed.

@nandalism Is that how hashtags work? I don't actually use them so I don't know. LOL. That would be perfect though, right now I open a separate page to follow the bot, which is okay, but having it not appear in home would be better for sure!

@objectinspace

Is that how hashtags work?

Sadly, I feel that I don't know how anything works any more :)

It is how I wished/imagined hashtags worked. Otherwise what are they for? Who knows!?

I received your 3 test messages. Thanks. Then I realized I am not logging JSON/ActivityPub on my server (only sandestin has that level of logging at the moment). So I didn't get see how they looked at the activitypub level. Sorry about that.

@objectinspace I have to rebuild my server to add the logging first. So I'm not ready at the moment.

Maybe you can answer this question. When I send a command like "open pod door" do you see 2 messages? One short one, from me, with just the command and one longer one from sandestin with game response?

Or do you just see one message from sandestin? (this is how I want it to be)

@objectinspace @robryk
Breakfast Report:

I now understand the reason why sandestin's messages don't turn up in Lists (probably hashtags same).

The activity pub message from a Honk (which works/appears in mastodon List).
Note the "to" as:Public. This is the important difference. (Also note the lack of /followers in the "cc")

"cc":[]string{"https://mastodon.gamedev.place/users/andalism"}, "to":"https://www.w3.org/ns/activitystreams#Public", directMessage - missing

For comparison a sandestin message currently looks like this (and it fails to appear in List)
(as:Public is nowhere)

"to":"[a single follower]" "cc":["https://honk.deckc.hair/u/nandalism", ... all the followers except to] directMessage - missing

@objectinspace @robryk
Action:
I could now change sandestin to set "to"=as:Public (maybe "cc" as:Public, but I don't have evidence it works yet)
Put all followers in "cc" or possibly still include one of them in "to" along with as:Public.
I fear spamminess will go up...but I will try it briefly.
@objectinspace @robryk
I now send messages like this:
CC = as:Public + all followers
TO = empty
Summary: It didn't work.
I only get items in List:sandestin if the sender is the mastodon user but not my Honk user (honk sees both).

# details "actor":"https://sandestin.deckc.hair/u/sandestin", "cc":[]string{"https://www.w3.org/ns/activitystreams#Public", "https://mastodon.gamedev.place/users/andalism", "https://honk.deckc.hair/u/nandalism", ...} "to":"",

@objectinspace @robryk
Finally I tried TO=as:Public CC=followers. As before posts fail to show in the List:sandestin.
I realize that List is the proper way to separate streams but I cannot make it work.

"actor":"https://sandestin.deckc.hair/u/sandestin" "to":"https://www.w3.org/ns/activitystreams#Public" "cc":[]string{"https://mstdn.social/users/arnicas", "https://honk.deckc.hair/u/nandalism", ... "https://mastodon.gamedev.place/users/andalism", ... }

Show newer
Show newer

@nandalism @objectinspace

WDYM by the case when the sender is the Mastodon user? I don't think Mastodon ever generates such a message.

@objectinspace @nandalism A message in reply that mentions both of you and is made "unlisted" instead of "direct".

@robryk @nandalism Interesting, you're thinking each game would have its own "account" to follow on the instance so folks can choose what games to play? That would work from a user perspective but I'm not sure how much effort it would be considering the amount of available zmachine games out there.

@objectinspace @nandalism

How does the number of games in existence matter? You create one bot that accepts commands like "start game foo". When it receives such a command, it creates a new Actor that will be the account for that *instance* of the game (note: not the game, but the playthrough). Whoever commanded start of the game can now follow that Actor.

The initial command can happen over fedi, or maybe simply over https.

@objectinspace Just to clear up something. With sandestin there is only one game, the current game. That's what everyone sees. All followers share that same game.

Sandestin is not about individuals playing their own, separate, IF game. There are much more comfortable ways to play IF games as an individual.

I realize that you may be speculating about a future feature of some other system, in which case feel free to ignore the above.

Sign in to participate in the conversation
Qoto Mastodon

QOTO: Question Others to Teach Ourselves
An inclusive, Academic Freedom, instance
All cultures welcome.
Hate speech and harassment strictly forbidden.