[no bump] Ghost Mode: AyuGram's ghost mode with per-account and per-chat settings
Publish plugin / publish (push) Successful in 5s

Read receipts, story views, typing and online status are held back per
the options; read on interact, scheduled and silent sending as in AyuGram.
Every option resolves chat -> account -> global; forum topics follow
their group. Settings live in the plugin page, a chat/profile menu popup,
and a drawer row for the current account.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
lyuksovannyyandClaude Opus 5.5 committed 2026-10-09 15:54:41 +02:00
1 parent dfd1f659fe
commit 00553970b7
20 files changed
+3223 -178

No files matched your search

+52 -18
View File
@@ -1,38 +1,72 @@
<p align="center">
<img src="images/icon.svg" width="128" height="128" alt="exteraGram Plugin Base icon">
<img src="images/icon.svg" width="128" height="128" alt="Ghost Mode icon">
</p>
<h1 align="center">exteraGram Plugin Base</h1>
<h1 align="center">Ghost Mode</h1>
**TL;DR:** a template repo for writing [exteraGram](https://exteragram.app) plugins as normal
multi-file Python projects. Write code in `src/`, run one command, get a single `.plugin`
file deployed to your phone or published to Releases.
**TL;DR:** AyuGram's ghost mode as an [exteraGram](https://exteragram.app) plugin: read,
browse and type without anyone seeing it. You can set every option globally, per account
and per chat.
## Description
exteraGram loads every plugin from exactly one Python file. This template lets you split a
plugin into ordinary modules and packages anyway: a bundler compiles `src/` and `plugin.json`
into that single file, an offline harness verifies the result without a device, ADB scripts
push it to a connected phone and reload it, and CI publishes every version to the repo's
Releases tab.
Ghost Mode stops the app from sending the signals that give you away: read receipts, story
views, typing statuses and your online status. It also adds AyuGram's companion options:
read on interact, scheduled sending and silent sending. Nothing is sent and nothing changes
until you turn something on.
Every option works on three levels, and the most specific one with a value wins:
1. **Chat**: open a chat or profile, tap ⋮ → *Ghost mode*.
2. **Account**: plugin settings → *Accounts* → pick an account.
3. **Global**: the switches on the plugin's main settings page.
So you can stay a ghost everywhere except in one chat, or only on a second account. A forum
(a group with topics) is one chat: its settings cover every topic, and there's nothing per
topic.
## Features
None for the end user. The bundled sample plugin (`Hello Bundle`) only proves that the
toolchain works. This repo is meant to be used as a **template** for creating other plugins:
click "Use this template" (or clone it), then replace `plugin.json` and `src/` with your own.
**Ghost essentials** (the *Ghost mode* switch turns all five on or off)
- **Don't read messages.** Read receipts aren't sent. Chats still look read on your side.
- **Don't read stories.** Story views aren't sent.
- **Don't send online.** Your online status is sent as offline. *Account level only.*
- **Don't send typing.** Typing, recording and uploading statuses aren't sent.
- **Go offline automatically.** Every online status is followed straight away by an
offline one. *Account level only.*
**Options**
- **Read on interact** (on by default). Sending a message to a chat where messages aren't
read marks that chat as read, as AyuGram does.
- **Use scheduled messages.** Messages and forwards are scheduled 12 seconds ahead (media
gets more time to upload). Telegram's servers then deliver them, so sending doesn't put you
online. Secret chats, bots and Saved Messages are never scheduled.
- **Send without sound.** Messages and forwards are sent silently.
**In the app**
- Chat and profile ⋮ menu → **Ghost mode**: this chat's options. Each one shows its value
and whether it comes from the chat, the account or the global settings. Tapping an option
cycles *Default → On → Off*. The menu also has a ghost toggle for the chat, *Read all
messages now* and a reset.
- Message menu → **Read until here**: sends a read receipt up to that message.
- Side menu → **Ghost mode**: the options of the account in use. It has the same list and
*Global → On → Off* cycling as its settings page, plus a ghost toggle and a reset.
- Plugin settings → **Accounts**: each account's options (*Global / On / Off*) and its list
of chat exceptions.
## Documentation
- [How Ghost Mode works](docs/how-it-works.md): what is intercepted, how settings resolve,
runtime notes
- [Development](docs/development.md): getting started, repo layout, building and verifying, icon export
- [How exteraGram plugins work](docs/how-plugins-work.md): the plugin format and lifecycle
- [Device setup and ADB automation](docs/device-and-adb.md): deploy, watch, logs, debugger
- [Versioning and releases](docs/versioning-and-releases.md): git hooks, auto-bump, CI publishing
- [SDK notes](docs/sdk-notes.md): condensed exteraGram SDK API surface
## Quick start
## Credits
```bash
python3 tools/bundle.py --check # once after cloning: enables the git hooks
bash scripts/deploy.sh --enable # build + push to a connected device + enable
```
Ghost mode's behaviour follows [AyuGram](https://github.com/AyuGram/AyuGram4A) by Radolyn.