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.

@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 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 @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...

@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).

@nandalism

> I assume your idea is to give the replying user control over visibility.

Yes.

> 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).

What it changes is that others can look up the post (by link) and see it. If as:Public is not in cc, then fedi instances will consider the to/cc lists as the ACL for read access to the post.

@robryk Ok. I'll add that change back in and see if it causes problems.

TO=originuser
CC=as:Public + (followers minus originuser)

Follow

@nandalism

What do you mean by "followers minus originuser"? Do you expand the list of followers yourself?

I thought that ~everyone did that by literally mentioning the followers collection in the cc list. Not sure whether there's any reason (other than making messages smaller) to avoid expanding, but Chesterton's peeking over their fence.

@robryk
I add the sandestin follower who sent the command (originuser) in TO = originuser.
I add all the other followers (not including the originuser) in the CC.
Now I also add as:Public in CC.

I do not use @sandestin /followers url.

I thought being explicit in CC and having a low follower count would allow me to sanely troubleshoot without adding another variable to the mix.

Concretely my messages look like this (copy/paste)

"to":"https://honk.deckc.hair/u/nandalism" "cc":["https://www.w3.org/ns/activitystreams#Public", https://mastodon.gamedev.place/users/andalism" ... etc.]

@nandalism

> I thought being explicit in CC and having a low follower count would allow me to sanely troubleshoot without adding another variable to the mix.

On one hand, yes.

// Hmm... I wonder if that makes it show up in "direct messages" feed in Mastodon.

On the other hand, it's an additional difference that might or might not matter for how the message is displayed, so sadly it might be worthwhile to try both or to actually bite the bullet and read how Mastodon interprets these lists.

@robryk I have just tested and for sure on Honk client, replying to a message with as:Public in CC causes that reply to go to all my followers.
OTOH replying to a message without as:Public anywhere does not spam my followers.
I'm not sure about other clients behaviors, one way or the other.
However, this was the original reason I avoided as:Public and have removed it again.

No messages show up in Direct Messages on mastodon:andalism.

I also wonder how does a server know who sandestin's /followers are? It must query a sandestin endpoint to find out. By avoiding that I avoid an extra step in the puzzle and avoid the question of sync problems.

I want to avoid reading the mastodon codebase. That's why I chose Honk instead (it's smaller), and I'd have to read the code base for every activitypub client to see what each one does in each case. I don't want to have to do that.

@nandalism

What do you mean by "Honk client"? Do you mean using sprayandpray?

> go to all my followers.

Am I right in assuming that you mean "the followers' instances receive it and display it in their Home feeds, even if those followers are unmentioned in to/cc otherwise"?

> I also wonder how does a server know who sandestin's /followers are? It must query a sandestin endpoint to find out. By avoiding that I avoid an extra step in the puzzle and avoid the question of sync problems.

It is expected to attempt to query it, and also the instance of that user is expected to forward it (see w3.org/TR/activitypub/#inbox-f) when it receives it (there's nothing that guarantees that it would receive it, so it's a very weird hack).

@robryk
I tried /followers like this

"cc":[]string{"https://sandestin.deckc.hair/u/sandestin/followers"}, "to":"https://honk.deckc.hair/u/nandalism",

Also like this, with to/cc swapped

"to":"https://sandestin.deckc.hair/u/sandestin/followers" "cc":[]string{"https://honk.deckc.hair/u/nandalism"}

I agree with you that it's much nicer like this and it didn't break anything. So I'll keep it this way.

(Still no effect on List/hashtags but I don't have as:Public anywhere atm. I'll try that again later)

By Honk client I mean my main client, the one where I post as honk:nandalism (this one) which is running on a Honk instance, not mastodon. The other user mastodon:andalism is just one I set up for testing interop mastodon/sandestin.

honk/sandestin is working satisfactorily but nobody else is using sandestin with honk except me.

@nandalism

So the message goes to your followers, who see it in their Home feeds? I was under the impression that home feeds don't display messages that are replies (i.e. have inReplyTo set) usually.

@robryk

So the message goes to your followers, who see it in their Home feeds?

No messages appear in their Home feeds now. Neither in their Direct Messages.
The only place to see the messages is in mastodon's sandestin user page using [posts-and-replies] tab.

Nothing appears in List:sandestin and nothing in hashtag:sandestin.

In short, nothing much has changed, but using /followers is far more elegant.

I also just tested with CC+=as:Public too

"to":"https://sandestin.deckc.hair/u/sandestin/followers" "cc":[]string{"https://honk.deckc.hair/u/nandalism", "https://www.w3.org/ns/activitystreams#Public"}

There was no change. No improvement in List, nor Hashtag.

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.