Telegram- und Discord-Bot
Betreiben Sie Ihren eigenen privaten Bot, der Bilder und Videos erzeugt, Bilder animiert und mit selbst definierten Figuren chattet. Bezahlt aus Ihrem SpicyAPI-Guthaben, Ausgabenlimits werden vor jeder Abbuchung geprüft.
Der SpicyAPI-Bot ist ein kleines Programm, das Sie selbst betreiben. Er verbindet sich mit Telegram (und auf Wunsch mit Discord) und lässt die Personen, die Sie zulassen, Bilder erzeugen, Videos erstellen, Bilder in Videos verwandeln und mit Figuren chatten, die Sie definieren. Alles wird aus Ihrem eigenen SpicyAPI-Guthaben bezahlt, und jede Anfrage wird bepreist, bevor etwas abgebucht wird.
Der Bot ist kostenlos und quelloffen (MIT) unter github.com/spicyapi-ai/spicyapi-bot. Er ist standardmäßig privat: Nur Sie können ihn nutzen, bis Sie weitere Personen oder Gruppen zulassen.
Die Kurzfassung
- Erstellen Sie in der Konsole einen API-Schlüssel nur für den Bot und geben Sie ihm ein Tageslimit.
- Schreiben Sie in Telegram an @BotFather, senden Sie
/newbotund kopieren Sie das Token. - Klonen Sie das Repository, kopieren Sie
.env.examplenach.env, tragen SieSPICY_API_KEY,TELEGRAM_BOT_TOKENundOWNER_IDein und führen Siedocker compose up -d --buildaus. - Öffnen Sie Ihren Bot in Telegram, senden Sie
/start, akzeptieren Sie die Regeln und probieren Sie/pic a cozy cabin in the snow.
Was der Bot kann
- Bilder:
/pic a lighthouse at dusk - Videos:
/vid waves rolling onto a beach at sunset - Animate: Tippen Sie unter einem beliebigen vom Bot erzeugten Bild auf Animate oder antworten Sie darauf mit
/animate <wie es sich bewegen soll>. - Figuren-Chat: Schreiben Sie in einem privaten Chat einfach los oder nutzen Sie
/talk. Die Antworten werden in eine einzige Nachricht gestreamt. - Ausgabenschutz: Jede Anfrage wird zuerst bepreist (Angebote sind kostenlos), teure brauchen einen Tipp auf Confirm, und Tageslimits pro Person und für den ganzen Bot werden durchgesetzt.
- Standardmäßig privat: Niemand sonst kann ihn nutzen, bis Sie ihn freigeben.
Der Katalog von SpicyAPI enthält unzensierte Modelle, die keinen eigenen Inhaltsfilter hinzufügen, und der Bot funktioniert mit jedem Modell, das Sie wählen. Das Gesetz und die Inhaltsrichtlinie von SpicyAPI gelten weiterhin für alles, was Sie erzeugen. Siehe Richtlinie.
Befehle
| Befehl | Was er tut |
|---|---|
/pic <prompt> | Ein Bild erzeugen |
/vid <prompt> | Ein Video aus Text erzeugen |
/animate <motion> | Auf ein Bild antworten, um es in ein Video zu verwandeln. Vom Bot erzeugte Bilder funktionieren immer; Ihre eigenen Fotos nur, wenn der Betreiber ALLOW_PHOTO_UPLOADS=true gesetzt hat |
| Button Animate | Unter jedem erzeugten Bild: animiert es und verwendet dessen Prompt erneut |
/talk <message> | Mit der aktuellen Figur sprechen (in einem privaten Chat können Sie einfach schreiben) |
/persona | Eine Figur wählen |
/newchat | Die Unterhaltung vergessen und neu beginnen |
/models | Ihre Modelle für Bild, Video, Animate und Chat wählen |
/spend | Was Sie heute ausgegeben haben; der Besitzer sieht zusätzlich den ganzen Bot und das Kontoguthaben |
/report <text> | Eine Meldung an den Betreiber senden |
/help | Zusammenfassung von alldem |
Die Namen lauten bewusst nicht /image, /video oder /chat, wie sie andere beliebte Bots verwenden, damit dieser Bot sich eine Gruppe mit ihnen teilen kann. Antworten Sie in einer Telegram-Gruppe auf eine Chat-Nachricht des Bots, um weiter mit der Figur zu sprechen.
Bevor Sie anfangen
- Einen Computer oder Server, der durchgehend läuft, mit installiertem Docker. (Oder ein Railway-Konto, siehe unten.)
- Ein SpicyAPI-Konto mit Guthaben. Siehe Konto einrichten und Abrechnung.
- Ein Telegram-Konto, um den Bot mit BotFather zu erstellen.
Mit Docker Compose bereitstellen
Einen Schlüssel für den Bot erstellen
Erstellen Sie in der Konsole einen neuen API-Schlüssel nur für diesen Bot. Geben Sie dem Schlüssel ein Tageslimit und, wenn Sie möchten, eine Liste erlaubter Modelle.
Der Bot hat auch eigene Limits, aber das Limit des Schlüssels setzt SpicyAPI selbst durch, es gilt also auch dann noch, wenn der Bot falsch konfiguriert ist oder seine Daten verloren gehen. Neue Schlüssel haben kein Limit, solange Sie keines setzen. Siehe Authentifizierung.
Den Telegram-Bot erstellen
Öffnen Sie @BotFather, senden Sie /newbot, wählen Sie einen Namen und einen Benutzernamen und kopieren Sie das Token, das Sie erhalten. Es sieht aus wie 123456789:AA....
Konfigurieren
git clone https://github.com/spicyapi-ai/spicyapi-bot.git
cd spicyapi-bot
cp .env.example .envÖffnen Sie .env und füllen Sie die drei erforderlichen Zeilen aus:
SPICY_API_KEY=sk-spicy-...
TELEGRAM_BOT_TOKEN=123456789:AA...
OWNER_ID=your-telegram-user-idAlle anderen Zeilen haben einen sicheren Standardwert. .env.example erklärt jede Einstellung.
Ihre Telegram-Benutzer-ID herausfinden (falls Sie sie nicht kennen)
Setzen Sie vorerst OWNER_ID=0 und schließen Sie den nächsten Schritt ab. Senden Sie dann Ihrem Bot eine beliebige Nachricht, und er antwortet mit Ihrer ID. Tragen Sie diese Zahl in OWNER_ID ein und starten Sie neu:
docker compose up -dStarten
docker compose up -d --build
docker compose logs -fIm Log erscheint Telegram bot @yourbot is running, sobald der Bot bereit ist.
Ausprobieren
Öffnen Sie Ihren Bot in Telegram, senden Sie /start, akzeptieren Sie einmalig die Regeln und senden Sie /pic a cozy cabin in the snow. Das Standard-Bildmodell kostet etwa $0.01 pro Bild.
Zum späteren Aktualisieren führen Sie git pull && docker compose up -d --build aus.
Auf Railway bereitstellen
Railway kann den Bot ohne eigenen Server betreiben. Es gibt keine Ein-Klick-Vorlage: Sie stellen aus Ihrer eigenen Kopie des Repositorys bereit.
Das Repository forken
Forken Sie github.com/spicyapi-ai/spicyapi-bot in Ihr GitHub-Konto.
Das Projekt erstellen
Wählen Sie in Railway New Project > Deploy from GitHub repo und dann Ihren Fork. Railway findet das Dockerfile und baut es.
Die Variablen hinzufügen
Öffnen Sie den Tab Variables des Dienstes und fügen Sie SPICY_API_KEY, TELEGRAM_BOT_TOKEN und OWNER_ID hinzu, dazu alle weiteren Einstellungen aus .env.example.
Ein Volume anhängen
Klicken Sie mit der rechten Maustaste auf den Dienst, wählen Sie Attach volume und verwenden Sie den Mount-Pfad /data. Ohne Volume vergisst jedes erneute Deployment die heutigen Ausgaben und die Einstellungen aller Personen.
Bereitstellen
Stellen Sie bereit und prüfen Sie in den Logs auf Telegram bot @yourbot is running.
Lassen Sie den Dienst bei einem Replikat: Zwei Kopien, die dasselbe Telegram-Token abfragen, kämpfen um die Updates. Der Bot braucht keine öffentliche Domain und keinen offenen Port.
Discord hinzufügen (optional)
Die Anwendung erstellen
Erstellen Sie im Discord Developer Portal eine Anwendung, öffnen Sie Bot, setzen Sie das Token zurück und kopieren Sie es, und schalten Sie Public Bot aus, damit nur Sie den Bot zu Servern hinzufügen können. Privilegierte Intents sind nicht nötig.
Ihn zu Ihrem Server einladen
Aktivieren Sie unter OAuth2 > URL Generator die Scopes bot und applications.commands sowie die Berechtigungen Send Messages, Attach Files, Embed Links und Read Message History. Öffnen Sie den erzeugten Link und fügen Sie den Bot Ihrem Server hinzu.
Konfigurieren
Setzen Sie in .env:
DISCORD_TOKENauf das Bot-Token.DISCORD_GUILD_IDauf Ihre Server-ID, wenn die Befehle sofort erscheinen sollen statt nach einer kurzen globalen Ausrollphase.OWNER_IDso, dass es Ihre Discord-Benutzer-ID enthält, zum BeispielOWNER_ID=tg:123,dc:456. Die Präfixetg:unddc:binden eine ID an eine einzelne Plattform.ALLOWED_CHAT_IDSauf die Kanal- oder Server-ID, in der der Bot antworten soll.
Um IDs zu finden, aktivieren Sie den Developer Mode (User Settings > Advanced), klicken dann mit der rechten Maustaste auf einen Benutzer, Kanal oder Server und wählen Copy ID. Starten Sie den Bot neu.
Den Kanal als altersbeschränkt markieren
Bilder und Videos funktionieren nur in altersbeschränkten Kanälen: Edit Channel > Overview > Age-Restricted Channel. Die Befehle /pic und /vid sind als altersbeschränkt registriert, daher zeigt Discord sie nur dort an.
Der Chat (/talk oder eine Erwähnung des Bots) funktioniert in jedem zugelassenen Kanal, außer Sie setzen DISCORD_CHAT_REQUIRES_NSFW=true, wodurch der Chat ebenfalls auf altersbeschränkte Kanäle begrenzt wird.
Discord erlaubt keine Apps mit altersbeschränkten Befehlen im App Directory, halten Sie den Bot daher privat. .env.example enthält außerdem DISCORD_MEDIA_IN_DMS, standardmäßig false: Bilder und Videos funktionieren dann nur in altersbeschränkten Serverkanälen, nicht in Direktnachrichten.
Wer ihn nutzen kann
| Einstellung | Standard | Wirkung |
|---|---|---|
OWNER_ID | erforderlich | Sie. Immer zugelassen, nicht an das Tageslimit pro Person gebunden, und die einzige Person, die das Kontoguthaben sieht. Mehrere IDs trennen Sie mit Kommas. |
ALLOWED_USER_IDS | leer | Weitere Personen, die in privaten Chats zugelassen sind. Leer bedeutet: nur Sie. |
ALLOWED_CHAT_IDS | leer | Gruppen (Telegram) oder Kanäle und Server (Discord), in denen der Bot antwortet. Leer bedeutet: überhaupt keine Gruppen. |
REQUIRE_CONSENT | true | Alle bestätigen einmalig, dass sie mindestens 18 sind und die Inhaltsregeln befolgen. |
Fremden, die den Bot finden, wird gesagt, dass er privat ist, und sie erhalten ihre Benutzer-ID, die sie Ihnen schicken können. Gruppen werden ignoriert, bis sie in ALLOWED_CHAT_IDS stehen; sobald eine Gruppe eingetragen ist, kann jedes Mitglied den Bot im Rahmen der Tageslimits nutzen. Telegram-Gruppen-IDs sind negativ, zum Beispiel -1001234567890.
Setzen Sie nicht ALLOWED_USER_IDS=*
ALLOWED_USER_IDS=* macht den Bot öffentlich und lässt jeden, der ihn findet, Ihr Guthaben ausgeben. Verwenden Sie es nur, wenn Sie das wirklich wollen.
Sie betreiben diesen Bot und sind dafür verantwortlich, wen Sie ihn nutzen lassen. Es gelten die Nutzungsbedingungen von SpicyAPI, einschließlich der Regionen, die SpicyAPI nicht bedient.
Wie die Ausgaben funktionieren
- Erst der Preis. Jedes Bild und jedes Video wird von SpicyAPI bepreist, bevor etwas passiert. Angebote sind kostenlos.
- Harte Obergrenze. Könnte eine Anfrage mehr als
MAX_COST_PER_REQUEST_USD(Standard $1) kosten, wird sie abgelehnt. Es wird nichts abgebucht. - Bestätigung. Könnte sie mehr als
CONFIRM_ABOVE_USD(Standard $0.10) kosten, zeigt der Bot den Preis mit den Buttons Confirm und Cancel. Nur die Person, die gefragt hat, kann bestätigen. - Tageslimits. Jede Person darf pro UTC-Tag
USER_DAILY_BUDGET_USD(Standard $1) ausgeben und der ganze BotDAILY_BUDGET_USD(Standard $5). Noch laufende Generierungen zählen bis zu ihrem Ende als ausgegeben, sodass mehrere gleichzeitige Anfragen kein Limit umgehen können. Besitzer sind nur an das Limit für den ganzen Bot gebunden. - Keine doppelten Abbuchungen. Jede Anfrage trägt einen Idempotency-Key, der aus der Chat-Nachricht oder dem Button-Tipp abgeleitet wird, sodass ein doppeltes Telegram-Update oder ein doppeltes Tippen die bereits bestehende Aufgabe zurückgibt.
- Ergebnisse. Der Fortschritt wird durch das Bearbeiten einer Nachricht alle paar Sekunden angezeigt. Das Ergebnis zeigt die tatsächliche Abbuchung und die Task-ID, die Sie unter Logs in der Konsole nachschlagen können.
Eine angenommene Generierung kann nicht abgebrochen werden. Erfolgreiche Läufe werden berechnet; gewöhnliche Fehlschläge geben die Reservierung frei. Bestimmte Inhaltsablehnungen werden nur berechnet, wenn die Modellseite dies ausdrücklich angibt. Siehe Abrechnung.
Einen Schlüssel mit Limit verwenden
Der Bot führt sein eigenes Hauptbuch in DATA_DIR/state.json. Geht diese Datei verloren, vergisst der Bot, was heute ausgegeben wurde. Das Limit auf dem API-Schlüssel in der Konsole ist das Limit, das nie verloren gehen kann, weil SpicyAPI es durchsetzt. Erstellen Sie einen eigenen Schlüssel für den Bot, setzen Sie ein Tageslimit und erlauben Sie optional nur die gewünschten Modelle. Ist das Limit erreicht, teilt der Bot mit, dass der Schlüssel sein Ausgabenlimit erreicht hat.
Weitere nützliche Einstellungen:
| Einstellung | Standard | Was sie bewirkt |
|---|---|---|
MAX_CONCURRENT_TASKS_PER_USER | 2 | Bilder und Videos, die eine Person gleichzeitig laufen haben darf |
VIDEO_SECONDS / VIDEO_RESOLUTION | 5 / 480p | Videolänge und -größe, angepasst an das, was das jeweilige Modell erlaubt. Kürzer und niedriger ist günstiger |
ALLOWED_MODELS | leer | Begrenzt die /models-Menüs. Exakte IDs oder Präfixe, die auf * enden, zum Beispiel alibaba/* |
Modelle und Preise
Jede Person kann ihre Modelle mit /models ändern. Die Standardwerte legt der Betreiber fest:
| Variable | Standard | Kosten zum Zeitpunkt der Erstellung |
|---|---|---|
DEFAULT_IMAGE_MODEL | Z-Image Turbo, Text zu Bild | Etwa $0.01 pro Bild |
DEFAULT_VIDEO_MODEL | MiniMax H3, Text zu Video | Etwa $0.037 pro Sekunde bei 768p |
DEFAULT_ANIMATE_MODEL | MiniMax H3, Bild zu Video | Etwa $0.037 pro Sekunde bei 768p |
DEFAULT_CHAT_MODEL | DeepSeek V4.1 Flash | Jedes Chatmodell im Katalog |
Die genauen Modell-IDs stehen in .env.example; zum Wechseln kopieren Sie eine andere ID aus dem Live-Katalog (GET /api/v1/models; im Figurenbeispiel unten markiert MODEL_ID_FROM_CATALOG die Stelle, an die eine solche ID gehört). Die Preise stammen aus dem öffentlichen Katalog und können sich ändern; der Bot zeigt immer das aktuelle Angebot. Modelle durchsuchen Sie unter spicyapi.ai/models, oder siehe Modelle. Für Rollenspiele hilft das Roleplay-Leaderboard bei der Wahl eines Chatmodells.
Figuren
Figuren liegen in einer JSON-Datei (CHARACTERS_FILE, Standard characters/default.json, die zwei Beispielfiguren enthält):
{
"characters": [
{
"id": "mira",
"name": "Mira",
"system": "You are Mira, ... Never speak or act for {{user}}.",
"greeting": "Welcome aboard, {{user}}!",
"model": "MODEL_ID_FROM_CATALOG"
}
]
}systemsind die Anweisungen der Figur.greeting(optional) ist ihre erste Zeile.model(optional) legt für diese Figur ein Chatmodell fest.{{char}}und{{user}}werden durch den Namen der Figur und den Vornamen der Person ersetzt.- Einträge können auch Character-Card-V2-JSON sein, das Format, das die meisten Figuren-Seiten und SillyTavern exportieren. Beschreibung, Persönlichkeit, Szenario, Beispieldialog und erste Nachricht werden verwendet.
Mit Docker binden Sie Ihre eigene Datei ein und richten die Einstellung darauf. In docker-compose.yml:
volumes:
- ./my-characters.json:/app/characters/custom.json:roUnd in .env:
CHARACTERS_FILE=characters/custom.jsonDer Bot merkt sich HISTORY_TURNS Wortwechsel pro Unterhaltung (Standard 20) und begrenzt Antworten auf CHAT_MAX_TOKENS Tokens (Standard 2048). Reasoning-Modelle rechnen ihr Nachdenken auf dieses Limit an, ein sehr kleiner Wert kann also keinen Platz für die Antwort lassen. Mehr zum Schreiben von Figuren finden Sie unter Chat-Rezepte.
Foto-Uploads sind standardmäßig aus
Standardmäßig lassen sich nur vom Bot erzeugte Bilder animieren. Fotos echter Personen in Videos zu verwandeln, ist der häufigste Weg, wie Bots dieser Art missbraucht werden, und eine Person auf einem Foto hat nicht zugestimmt, in Ihrem Video aufzutauchen.
Wenn Sie ALLOW_PHOTO_UPLOADS=true setzen, kann jede von Ihnen zugelassene Person ein gesendetes Foto animieren. Schalten Sie das nur für Personen ein, denen Sie vertrauen, und nur für Fotos von Erwachsenen, die zugestimmt haben. Ist es eingeschaltet, werden hochgeladene Bilder vom Bot heruntergeladen und bei SpicyAPI gespeichert. Telegram-Dateilinks werden nie weitergegeben, weil sie Ihr Bot-Token enthalten.
Datenschutz: was wo gespeichert wird
| Was | Wo | Wie lange |
|---|---|---|
| Tagesausgaben, Modell- und Figurenwahl jeder Person, wer die Regeln akzeptiert hat | state.json in DATA_DIR (ein Volume in Docker) | Bis Sie sie löschen |
| Chat-Verlauf | Nur im Arbeitsspeicher | Wird beim Neustart, nach einem Tag Inaktivität oder mit /newchat vergessen |
| Bot-Logs | Ihr Rechner | Nur Task-IDs und Beträge, nie Prompts oder Medien |
| Prompts und Ergebnisse | SpicyAPI | Die Aufbewahrungsdauer Ihres Kontos; siehe Aufbewahrung |
Setzen Sie RETENTION_SECONDS, um SpicyAPI zu bitten, Ergebnisse und Prompts früher zu löschen als die Standarddauer Ihres Kontos.
In Gruppen werden Ergebnisse hinter einem Spoiler versteckt (SPOILER_MEDIA, Standard groups; weitere Werte sind always und never). /report leitet eine Nachricht an den Besitzer weiter. Inhalte, die gegen die Regeln von SpicyAPI verstoßen, können Sie außerdem unter spicyapi.ai/abuse melden.
Fehlerbehebung
| Meldung oder Symptom | Was zu tun ist |
|---|---|
„out of balance“ (40201) | Laden Sie Ihr SpicyAPI-Guthaben auf. |
„reached the spend cap“ (40202) | Das Limit des Schlüssels in der Konsole ist erreicht. Erhöhen Sie es oder warten Sie. |
„not allowed to use that model“ (40301) | Erlauben Sie das Modell für den Schlüssel in der Konsole oder wählen Sie mit /models ein anderes. |
„has not verified its email“ (40310) | Öffnen Sie den Bestätigungslink von SpicyAPI. |
| „The model declined this request“ | Das Modell hat den Prompt abgelehnt. Passen Sie die Anfrage an oder wählen Sie ein anderes Modell. Prüfen Sie die Abrechnungsbedingungen für Ablehnungen auf der Modellseite. |
Conflict: terminated by other getUpdates request | Zwei Kopien des Bots verwenden dasselbe Token. Beenden Sie eine davon. |
| Discord-Befehle fehlen | /pic und /vid erscheinen nur in altersbeschränkten Kanälen. Globale Befehle brauchen manchmal einen Moment; setzen Sie DISCORD_GUILD_ID für sofortige Registrierung. |
| Netzwerkfehler hinter einem Proxy | Das fetch von Node ignoriert HTTPS_PROXY, außer der Bot startet mit NODE_USE_ENV_PROXY=1. |
| Der Bot antwortet auf Ihre Nachricht mit einer Zahl | Das ist Ihre Benutzer-ID. Tragen Sie sie in OWNER_ID ein und starten Sie neu. |
Die Fehlercodes sind unter Fehler erklärt.
Rollenspiel-Apps
Verbinden Sie die Textmodelle von SpicyAPI mit RisuAI, Agnai, Chub, KoboldAI Lite und Janitor AI. Die genauen Felder je App, welche Modelle sich für Rollenspiele eignen, der Umgang mit Reasoning-Modellen und wie Sie die Ausgaben begrenzen.
n8n
Nutzen Sie die Bild-, Video-, Audio- und Chatmodelle von SpicyAPI in n8n-Workflows. Installieren Sie die Community-Node, importieren Sie die HTTP-Request-Vorlagen oder richten Sie die OpenAI-Credential von n8n für AI-Agent-Nodes auf SpicyAPI.

