Many features require bots, but they don’t require “complicated” bots. I think it would be very useful to be able to run bots, aka automatic treatment of messages, directly inside deltachat:
Individual bots, like downloader, AI, text to image, voice to image, Mastodon bridge… will only take instructions from me and talk to me, they will handle potentially private data so I’d rather use something I trust than something public
For many if not all of these usecases there’s no need for an always-on computer running somewhere, I can do it from my own device. But if I really want to I can install DeltaChat anywhere and run the bot there.
There’s a huge security window to look at here because the bot should be able to basically do anything
The ability to host client-side bots (bots running in a Deltachat client) would have advantages.
easier to host and test bots
harder to block bots (especially if they offered their own source code)
harder to do traffic analysis (is the target talking to a human or a bot? is the target a bot?)
easier to add experimental functionality to the client
The main disadvantage, bot downtime, could be mitigated where necessary by hash-based indexes of identical sibling bots, and people sending bot contacts to one another. At least one of the identical bots should be up almost all the time.
Security
Bots could be public, private (ignoring messages not from whitelisted contacts), or internal (interacting only with the accounts of their host client). Internal bots could implement functions (like link preview, backup, reading aloud, transcribing, etc.) if added to a chat.
Bots could be given permissions (access the internet through this proxy, write to this local directory, access microphone or speaker).
Examples
A mailman bot could run a public mailing list.
A vacation-response bot
A screening bot could transfer a new contact made via a posted QR code to a new account with an unpublished key
I have experimented with this in the past, I created channels and also anonymous super-groups via bot in the middle, and it was extremely slow, because the bot has to forward (and encrypt) the message to every member, having one bot per group/channel it could kinda work but still worse than the actual channels that are going to be added
Speed does sound like a showstopper for some types of bot, then. I’ll look forward to the new channels (which I’m guessing will be P2P, not like mesh-networked bots, where each bot sends a message to two or more other bots via mail servers).
I assume channels will not have the functionality proposed for individual, internal bots.
Many existing bots and proposals could be ported that are delay-tolerant and need neither Internet access nor relaying everything between a large number of subscribers, such as:
moderated forums (PixelSocial)
multi-player games (Deltaland, others where a game master is needed such as Werewolf/Mafia/Amongus)
webxdc gallery (xstore): share apps (and client side bots) with each other
Public Bots: send the contacts and description of all known bots, being able to update via gossip
Group Editor Bot: shared notepad
FAQ Bot: pin posts and save a tag for each
stalebot: invites users to a group and removes members whose last seen date is greater than 30 days
Yozuk: programmer’s utilities
mutual credit system
moderation bot to kick based on bad words or big attachments
…
Many IRC and XMPP clients had hundreds of such client-side addon “scripts” in the 90s and these could also be ported.
Yes, it would be great to have an Android app like in the good old days with IRC: you install it on an old Android phone, set it up, and that’s it — the bot works. That’s cool. I tried to run the bot on Android via Termux, but unfortunately, no matter what I tried, the Delta Chat core does not deploy. Maybe I was doing something wrong.
But I implemented another approach: I installed the Macrodroid and Delta Chat apps on Android. In Macrodroid, I set up a trigger for new notifications from Delta Chat, and Macrodroid sends a direct reply via the notification. All that remains is to process the incoming command and generate a response to it.