Initial bridge: Discord <-> Fluxer channel relay via webhooks

- discord.py + fluxer.py bots run side-by-side in one asyncio process
- messages relay through per-channel incoming webhooks with the original
  author's name and avatar (suffixed '(Discord)' / '(Fluxer)')
- loop protection: bot-authored and webhook-authored messages are ignored
- attachments re-uploaded natively both directions (8 MB cap)
- emoji mirroring: on-demand upload into the receiving guild with LRU
  eviction of bridge-created emojis only; pre-existing emojis untouched;
  to-Discord direction opt-in (50-slot default guild cap)
This commit is contained in:
ph0sgene committed 2026-08-25 18:41:43 -07:00
1 parent 09ce07d403
commit f3154396fa
9 files changed
+1405 -2

No files matched your search

+32 -1
View File
@@ -1,3 +1,34 @@
# itako
discord.gg <---> fluxer.app channel bridge. unifies platforms, unifies friends.
discord.gg <---> fluxer.app channel bridge. unifies platforms, unifies friends.
One channel on each side; messages are relayed through webhooks so they show
the original author's name and avatar.
## Docs
- **[INSTALL.md](INSTALL.md)** — setup guide (bots, tokens, .env, running)
- **[TODO.md](TODO.md)** — roadmap: edit/delete sync, stickers, service mode, …
## Layout
- `itako/bridge.py` — runs both bots in one asyncio process:
- discord.py bot listens on Discord, relays to a **Fluxer** webhook
- fluxer.py `Bot` listens on Fluxer, relays to a **Discord** webhook
- Webhooks named `itako-bridge` (configurable) are created once per channel
and reused.
## Setup
1. `uv sync`
2. Copy `.env.example` to `.env` and fill in (see [INSTALL.md](INSTALL.md)):
- Discord: bot token + the channel ID to bridge (enable Message Content intent!)
- Fluxer: create a bot application at fluxer.app, grab its token, invite it
to your guild, put its token + the channel ID
3. `uv run python -m itako.bridge`
## Loop protection
- Messages authored by either bot account are ignored.
- Messages posted by either side's webhook (`message.webhook_id`) are ignored,
so relayed copies never bounce back.