Update README.md
This commit is contained in:
148
README.md
148
README.md
@@ -1,2 +1,148 @@
|
||||
# furry_giffer_bot_mastodon
|
||||
Mastodon Furry GIF poster
|
||||
|
||||
**EN:** A Mastodon mention-bot that replies with animated media from **Furbooru** (Philomena API).
|
||||
It tries to upload a GIF first (with size fallbacks) and, if your Mastodon instance rejects GIFs (e.g. resolution limits), it automatically converts GIF → **MP4** and uploads that instead.
|
||||
For NSFW requests it posts with **CW + spoiler** and marks media as sensitive.
|
||||
Works on **Windows** and Linux.
|
||||
|
||||
**RU:** Бот для Mastodon, который отвечает на упоминания и прикрепляет анимированное медиа из **Furbooru** (Philomena API).
|
||||
Сначала пробует залить GIF (с фолбэком на меньшие версии), а если инстанс отклоняет GIF (например из-за лимитов на разрешение) — автоматически конвертирует GIF → **MP4** и заливает MP4.
|
||||
Для NSFW-запросов постит с **CW + спойлером** и отмечает медиа как sensitive.
|
||||
Работает на **Windows** и Linux.
|
||||
|
||||
---
|
||||
|
||||
## Features / Возможности
|
||||
|
||||
- Reply to mentions: `@giffer cute fluffy tail`
|
||||
- Multi-tag queries: spaces/commas, quotes, negative tags
|
||||
- `cute fluffy tail` → `cute, fluffy, tail`
|
||||
- `"rainbow dash" -gore`
|
||||
- `nsfw` keyword enables NSFW mode:
|
||||
- posts with `spoiler_text="NSFW"` and `sensitive=True`
|
||||
- uses NSFW filter_id if configured
|
||||
- Furbooru search for **animated GIF** via Philomena API
|
||||
- Real upload to Mastodon
|
||||
- Waits for media processing (prevents 422 “processing not finished”)
|
||||
- GIF upload fallbacks: full → large → medium → small → thumb
|
||||
- If GIF rejected by instance: **auto-convert to MP4**
|
||||
- Auto ALT text from Furbooru tags
|
||||
- Rate-limit protection:
|
||||
- per-user cooldown
|
||||
- global token bucket
|
||||
- Persistent state (prevents replying twice after restart):
|
||||
- saves last seen notification id + processed status ids
|
||||
- Logs to console + rotating file
|
||||
|
||||
---
|
||||
|
||||
## Requirements / Требования
|
||||
|
||||
- Python 3.10+ recommended
|
||||
- Mastodon access token with permission to read notifications & post statuses/media
|
||||
- Optional: `ffmpeg` (or `imageio-ffmpeg` for bundled ffmpeg)
|
||||
|
||||
---
|
||||
|
||||
## Install / Установка
|
||||
|
||||
### Windows (PowerShell or CMD)
|
||||
```bat
|
||||
py -m pip install --upgrade pip
|
||||
py -m pip install Mastodon.py requests imageio-ffmpeg
|
||||
````
|
||||
|
||||
### Linux/macOS
|
||||
|
||||
```bash
|
||||
python3 -m pip install --upgrade pip
|
||||
python3 -m pip install Mastodon.py requests imageio-ffmpeg
|
||||
```
|
||||
|
||||
> If you already have system `ffmpeg`, you can skip `imageio-ffmpeg`, but it’s recommended for Windows.
|
||||
|
||||
---
|
||||
|
||||
## Configuration / Настройка
|
||||
|
||||
Create `config.env` next to the script:
|
||||
|
||||
```env
|
||||
MASTODON_BASE_URL=https://bronyfurry.com
|
||||
MASTODON_ACCESS_TOKEN=YOUR_TOKEN_HERE
|
||||
|
||||
FURBOORU_BASE_URL=https://furbooru.org
|
||||
# FURBOORU_API_KEY=OPTIONAL
|
||||
# SAFE_FILTER_ID=OPTIONAL
|
||||
# NSFW_FILTER_ID=OPTIONAL
|
||||
|
||||
# Optional runtime tuning:
|
||||
CHECK_INTERVAL=30
|
||||
USER_COOLDOWN_SEC=20
|
||||
GLOBAL_RATE_PER_SEC=1.0
|
||||
GLOBAL_BURST=3
|
||||
|
||||
LOG_LEVEL=INFO
|
||||
LOG_FILE=giffer.log
|
||||
|
||||
STATE_FILE=giffer_state.json
|
||||
PROCESSED_CACHE_MAX=800
|
||||
|
||||
# Network tuning (Windows-safe defaults):
|
||||
CONNECT_TIMEOUT=5
|
||||
READ_TIMEOUT=20
|
||||
DOWNLOAD_TIMEOUT=40
|
||||
SOCKET_DEFAULT_TIMEOUT=25
|
||||
MASTO_CALL_TIMEOUT=25
|
||||
MEDIA_PROCESS_MAX_WAIT=60
|
||||
|
||||
# NSFW posts visibility:
|
||||
NSFW_VISIBILITY=public
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Run / Запуск
|
||||
|
||||
```bash
|
||||
python giffer_bot.py
|
||||
```
|
||||
|
||||
The bot will continuously poll mentions and respond.
|
||||
|
||||
---
|
||||
|
||||
## Usage / Использование
|
||||
|
||||
Mention the bot with tags:
|
||||
|
||||
* `@giffer cute`
|
||||
* `@giffer cute fluffy tail`
|
||||
* `@giffer "rainbow dash" -gore`
|
||||
* `@giffer nsfw latex`
|
||||
|
||||
NSFW mode is triggered if the word `nsfw` is present anywhere in the mention content.
|
||||
|
||||
The reply will include an **original source link** (Furbooru page).
|
||||
|
||||
---
|
||||
|
||||
## Files / Файлы
|
||||
|
||||
* `giffer_bot.py` — bot source code
|
||||
* `config.env` — configuration (not committed)
|
||||
* `giffer.log` — log file (rotating)
|
||||
* `giffer_state.json` — saved state to avoid double replies
|
||||
|
||||
---
|
||||
|
||||
## Notes / Примечания
|
||||
|
||||
* If the bot starts replying to old mentions again, make sure `STATE_FILE` is not deleted.
|
||||
* Some Mastodon instances reject large GIFs. This is expected; the bot will try smaller representations and then MP4 fallback.
|
||||
|
||||
---
|
||||
|
||||
## License / Лицензия
|
||||
|
||||
MIT License
|
||||
|
||||
Reference in New Issue
Block a user