Show more

Apologies for the cross-posting delay - there was some networking trouble this morning.


πŸ› If you quote a tweet with your own media then it takes priority over the quoted tweets media
πŸ› Quoted tweets are now shown the same as retweets so its clear what they are
✨There's a new option to turn off including the link in instagram posts
✨There's a new option to enable conditional posting using the (don't post to mastodon) and (don't post to twitter) hashtags

I think I've got a fix in to allow 280 character tweets to go through reliably BUT Mastodon and twitter don't count characters the same way. No matter how many codepoints are in an emoji Mastodon counts it as 1 character so πŸ’© and πŸ‘©β€πŸ‘©β€πŸ‘§β€πŸ‘§ are 1 but twitter counts those as 2 and 11 characters respectively so Tweet splitting/truncating will still happen if people use emoji and go over 280 chars. There's nothing I can do about it sadly.

New Feature:

If an image is marked as sensitive in a toot you can choose to link to your toot over on twitter instead of sending the image across.

Important Change:

Retweets are now *always* posted as Unlisted to the fediverse. This matches the behavior of boosted toots in Mastodon.

Well turns out my db corruption fix from this afternoon only created a different type of corruption. I apologize if things were cross-posted incorrectly. I believe I've got it sorted out now.

Fortunately I had a backup of the DB from before the update. The bad thing is that the workers had run after that DB dump was made so I couldn't be sure that the message IDs hadn't been updated so restoring ran the risk of duplicate messages.

I wrote some code to dump the pickled settings from the good db backup out to files, moved them to the server, and restored just the good settings.

It was a big mistake to store the settings as pickled objects so fixing that is my top priority.


Show thread

OK sorry for the downtime. What happened is that I added a feature which added some new settings.
This is all fine and good.

Each user's settings are stored as pickled python objects in the DB. Not the best choice but also not really a problem. Weirdly when the updated settings were written back to the DB the data was corrupted by mysql!

"Invalid utf8mb4 character string: '800495'"

When the settings would get read back out moa would crash.



Terribly sorry but right after you hooked up Moa I had to rollback the database to address a serious bug. You'll have to set up the connection again.

Very sorry!

Unfortunately moa is down at the moment. I'm trying to squash a bug.

That was 9 days and now Moa is processing 405 bridges.

Show thread

@limedaring The delay in cross-posting can be up to 5 minutes.

I just discovered that the Instagram API is hanging for *minutes* at a time. To work around this I'm randomzing the batches of accounts so that the sames ones don't always get stuck behind an Instagram job.

Last night I added a deferral function to cause a host to be skipped for 10 minutes if a worker gets a connection error. So far it's been working really well. The ongoing connection problems with aren't causing big delays like they normally would.

Welcome to all of the python devs that are signing up!


I added a new graph to show the ratio of message types.

I added 3 more workers to split up the queue and then stopped responding causing the workers to hit their time limits Β―\_(ツ)_/Β―

I'm going to add a feature to put a server in the penalty box if it responds with an error or timeout. All other accounts at that server will be skipped until a time limit is reached. Maybe 10 minutes?

Welcome to user #420


If the per-bridge time doesn't change Moa should be able to scale up to ~1000 bridges and maintain a 5-minute delivery schedule.

Show thread

It takes a worker about 90 seconds right now to process ~130 bridges. That's about 1.4 seconds to check mastodon, twitter, and possibly instagram for new messages.

Show thread
Show more is a server for folks who live in the Portland, OR region. Registration is by invitation only and you can receive an invitation by contacting a member or emailing You must abide by our Code of Conduct.

Hosted at Donations gratefully accepted via LiberaPay