Bot na Telegram i Discord
Uruchom własnego, prywatnego bota, który tworzy obrazy i wideo, animuje zdjęcia i rozmawia z postaciami, które zdefiniujesz, płatnego z salda SpicyAPI, z limitami wydatków sprawdzanymi przed każdą opłatą.
Bot SpicyAPI to mały program, który uruchamiasz sam. Łączy się z Telegramem (a jeśli chcesz, także z Discordem) i pozwala osobom, którym na to pozwolisz, generować obrazy, tworzyć wideo, zamieniać obrazy w wideo i rozmawiać z postaciami, które zdefiniujesz. Wszystko jest opłacane z twojego własnego salda SpicyAPI, a każde żądanie jest wyceniane, zanim cokolwiek zostanie pobrane.
Bot jest bezpłatny i ma otwarty kod (MIT): github.com/spicyapi-ai/spicyapi-bot. Domyślnie jest prywatny: dopóki nie dopuścisz innych osób lub grup, możesz z niego korzystać tylko ty.
W skrócie
- W konsoli utwórz klucz API wyłącznie dla bota i nadaj mu dzienny limit wydatków.
- W Telegramie napisz do @BotFather, wyślij
/newboti skopiuj token. - Sklonuj repozytorium, skopiuj
.env.exampledo.env, uzupełnijSPICY_API_KEY,TELEGRAM_BOT_TOKENiOWNER_ID, a potem uruchomdocker compose up -d --build. - Otwórz swojego bota w Telegramie, wyślij
/start, zaakceptuj zasady i wypróbuj/pic a cozy cabin in the snow.
Co robi bot
- Obrazy:
/pic a lighthouse at dusk - Wideo:
/vid waves rolling onto a beach at sunset - Animate: dotknij Animate pod dowolnym obrazem stworzonym przez bota albo odpowiedz na niego poleceniem
/animate <jak ma się poruszać>. - Czat z postacią: pisz na czacie prywatnym albo użyj
/talk. Odpowiedzi spływają strumieniem do jednej wiadomości. - Ochrona wydatków: każde żądanie jest najpierw wyceniane (wyceny są bezpłatne), drogie wymagają dotknięcia Confirm, a dzienne limity na osobę i na cały bot są egzekwowane.
- Domyślnie prywatny: nikt inny nie może go używać, dopóki go nie dopuścisz.
Katalog SpicyAPI zawiera modele bez cenzury, które nie dodają własnego filtra treści, a bot działa z dowolnym wybranym modelem. Prawo i polityka treści SpicyAPI nadal obowiązują wszystko, co generujesz. Zobacz Treści i odpowiedzialność za korzystanie.
Polecenia
| Polecenie | Co robi |
|---|---|
/pic <prompt> | Generuje obraz |
/vid <prompt> | Generuje wideo z tekstu |
/animate <motion> | Odpowiedz na obraz, aby zamienić go w wideo. Obrazy stworzone przez bota działają zawsze; twoje własne zdjęcia tylko wtedy, gdy operator ustawił ALLOW_PHOTO_UPLOADS=true |
| Przycisk Animate | Pod każdym wygenerowanym obrazem: animuje go, używając jego promptu |
/talk <message> | Rozmowa z bieżącą postacią (na czacie prywatnym możesz po prostu pisać) |
/persona | Wybór postaci |
/newchat | Zapomina rozmowę i zaczyna od nowa |
/models | Wybór modeli obrazu, wideo, animacji i czatu |
/spend | Ile wydano dzisiaj; właściciel widzi też wydatki całego bota i saldo konta |
/report <text> | Wysyła zgłoszenie do operatora |
/help | Podsumowanie tego wszystkiego |
Nazwy celowo nie brzmią /image, /video ani /chat, których używają inne popularne boty, dzięki czemu ten bot może dzielić grupę z nimi. W grupie na Telegramie odpowiedz na jedną z wiadomości czatu bota, aby dalej rozmawiać z postacią.
Zanim zaczniesz
- Komputer lub serwer, który stale działa, z zainstalowanym Dockerem. (Albo konto Railway, patrz niżej.)
- Konto SpicyAPI z saldem. Zobacz Przygotuj konto i Rozliczenia.
- Konto na Telegramie, aby utworzyć bota przez BotFather.
Wdrożenie przez Docker Compose
Utwórz klucz dla bota
W konsoli utwórz nowy klucz API wyłącznie dla tego bota. Nadaj temu kluczowi dzienny limit wydatków i, jeśli chcesz, listę dozwolonych modeli.
Bot ma też własne limity, ale limit klucza egzekwuje samo SpicyAPI, więc obowiązuje nawet wtedy, gdy bot jest źle skonfigurowany albo jego dane zginą. Nowe klucze nie mają limitu, dopóki go nie ustawisz. Zobacz Uwierzytelnianie.
Utwórz bota na Telegramie
Otwórz @BotFather, wyślij /newbot, wybierz nazwę i nazwę użytkownika, a potem skopiuj token, który dostaniesz. Wygląda jak 123456789:AA....
Skonfiguruj
git clone https://github.com/spicyapi-ai/spicyapi-bot.git
cd spicyapi-bot
cp .env.example .envOtwórz .env i uzupełnij trzy wymagane linie:
SPICY_API_KEY=sk-spicy-...
TELEGRAM_BOT_TOKEN=123456789:AA...
OWNER_ID=your-telegram-user-idKażda pozostała linia ma bezpieczną wartość domyślną. .env.example wyjaśnia każde ustawienie.
Sprawdź swój identyfikator użytkownika na Telegramie (jeśli go nie znasz)
Na razie wpisz OWNER_ID=0 i dokończ następny krok. Potem wyślij botowi dowolną wiadomość, a odpowie twoim identyfikatorem. Wpisz ten numer w OWNER_ID i zrestartuj:
docker compose up -dUruchom
docker compose up -d --build
docker compose logs -fGdy bot jest gotowy, w logu pojawia się Telegram bot @yourbot is running.
Wypróbuj
Otwórz swojego bota na Telegramie, wyślij /start, jednorazowo zaakceptuj zasady i wyślij /pic a cozy cabin in the snow. Domyślny model obrazu kosztuje około $0.01 za obraz.
Aby później zaktualizować bota, uruchom git pull && docker compose up -d --build.
Wdrożenie na Railway
Railway może uruchomić bota bez własnego serwera. Nie ma szablonu na jedno kliknięcie: wdrażasz z własnej kopii repozytorium.
Zrób fork repozytorium
Zrób fork github.com/spicyapi-ai/spicyapi-bot na swoje konto GitHub.
Utwórz projekt
W Railway wybierz New Project > Deploy from GitHub repo i wskaż swój fork. Railway znajdzie Dockerfile i go zbuduje.
Dodaj zmienne
Otwórz kartę Variables usługi i dodaj SPICY_API_KEY, TELEGRAM_BOT_TOKEN i OWNER_ID, a także każde inne ustawienie z .env.example.
Podłącz wolumen
Kliknij usługę prawym przyciskiem myszy, wybierz Attach volume i użyj ścieżki montowania /data. Bez wolumenu każde ponowne wdrożenie zapomina dzisiejsze wydatki i ustawienia wszystkich osób.
Wdróż
Wdróż i sprawdź w logach, czy jest Telegram bot @yourbot is running.
Zostaw usługę na jednej replice: dwie kopie odpytujące ten sam token Telegrama walczą o aktualizacje. Bot nie potrzebuje publicznej domeny ani otwartego portu.
Dodaj Discorda (opcjonalnie)
Utwórz aplikację
W Discord Developer Portal utwórz aplikację, otwórz Bot, zresetuj i skopiuj token, a opcję Public Bot wyłącz, abyś tylko ty mógł dodawać bota do serwerów. Uprzywilejowane intents nie są potrzebne.
Zaproś go na swój serwer
W OAuth2 > URL Generator zaznacz zakresy bot i applications.commands oraz uprawnienia Send Messages, Attach Files, Embed Links i Read Message History. Otwórz wygenerowany link i dodaj bota do serwera.
Skonfiguruj
W .env ustaw:
DISCORD_TOKENna token bota.DISCORD_GUILD_IDna identyfikator twojego serwera, jeśli chcesz, aby polecenia pojawiły się od razu, a nie po krótkim globalnym wdrożeniu.OWNER_IDtak, aby zawierał twój identyfikator użytkownika Discorda, na przykładOWNER_ID=tg:123,dc:456. Prefiksytg:idc:przypisują identyfikator do jednej platformy.ALLOWED_CHAT_IDSna identyfikator kanału lub serwera, na którym bot ma odpowiadać.
Aby znaleźć identyfikatory, włącz tryb dewelopera (User Settings > Advanced), a potem kliknij prawym przyciskiem użytkownika, kanał lub serwer i wybierz Copy ID. Zrestartuj bota.
Oznacz kanał jako z ograniczeniem wiekowym
Obrazy i wideo działają tylko na kanałach z ograniczeniem wiekowym: Edit Channel > Overview > Age-Restricted Channel. Polecenia /pic i /vid są zarejestrowane jako objęte ograniczeniem wiekowym, więc Discord pokazuje je tylko tam.
Czat (/talk albo wzmianka o bocie) działa na każdym dozwolonym kanale, chyba że ustawisz DISCORD_CHAT_REQUIRES_NSFW=true, co ogranicza czat także do kanałów z ograniczeniem wiekowym.
Discord nie dopuszcza aplikacji z poleceniami objętymi ograniczeniem wiekowym w swoim App Directory, więc zostaw bota prywatnego. .env.example zawiera też DISCORD_MEDIA_IN_DMS, domyślnie false: obrazy i wideo działają wtedy tylko na kanałach serwera z ograniczeniem wiekowym, a nie w wiadomościach prywatnych.
Kto może z niego korzystać
| Ustawienie | Domyślnie | Efekt |
|---|---|---|
OWNER_ID | wymagane | Ty. Zawsze dopuszczony, nie obowiązuje go dzienny limit na osobę i tylko ty widzisz saldo konta. Kilka identyfikatorów oddziel przecinkami. |
ALLOWED_USER_IDS | puste | Inne osoby dopuszczone na czatach prywatnych. Puste oznacza, że tylko ty. |
ALLOWED_CHAT_IDS | puste | Grupy (Telegram) albo kanały i serwery (Discord), w których bot odpowiada. Puste oznacza, że w żadnych grupach. |
REQUIRE_CONSENT | true | Każdy raz potwierdza, że ma ukończone 18 lat i będzie przestrzegać zasad dotyczących treści. |
Obcy, którzy znajdą bota, dowiadują się, że jest prywatny, i dostają swój identyfikator użytkownika, który mogą ci przesłać. Grupy są ignorowane, dopóki nie znajdą się w ALLOWED_CHAT_IDS; gdy grupa jest na liście, z bota może korzystać każdy jej członek, w granicach dziennych limitów. Identyfikatory grup na Telegramie są ujemne, na przykład -1001234567890.
Nie ustawiaj ALLOWED_USER_IDS=*
ALLOWED_USER_IDS=* czyni bota publicznym i pozwala każdemu, kto go znajdzie, wydawać twoje saldo. Użyj tego tylko wtedy, gdy naprawdę tego chcesz.
To ty prowadzisz tego bota i odpowiadasz za to, komu pozwalasz z niego korzystać. Obowiązuje regulamin SpicyAPI, w tym regiony, w których SpicyAPI nie świadczy usług.
Jak działają wydatki
- Najpierw cena. Każdy obraz lub wideo jest wyceniany przez SpicyAPI, zanim cokolwiek się wydarzy. Wyceny są bezpłatne.
- Twardy pułap. Jeśli żądanie mogłoby kosztować więcej niż
MAX_COST_PER_REQUEST_USD(domyślnie $1), jest odrzucane. Nic nie jest pobierane. - Potwierdzenie. Jeśli mogłoby kosztować więcej niż
CONFIRM_ABOVE_USD(domyślnie $0.10), bot pokazuje cenę z przyciskami Confirm i Cancel. Potwierdzić może tylko osoba, która o to poprosiła. - Dzienne limity. Każda osoba może wydać
USER_DAILY_BUDGET_USD(domyślnie $1) na dobę UTC, a cały botDAILY_BUDGET_USD(domyślnie $5). Generowania, które jeszcze trwają, liczą się jako wydane do zakończenia, więc kilka żądań naraz nie przemknie obok limitu. Właścicieli obowiązuje tylko limit całego bota. - Brak podwójnych opłat. Każde żądanie niesie klucz idempotentności wyprowadzony z wiadomości czatu albo dotknięcia przycisku, więc zduplikowana aktualizacja Telegrama albo podwójne dotknięcie zwraca zadanie, które już istnieje.
- Wyniki. Postęp jest pokazywany przez edytowanie jednej wiadomości co kilka sekund. Wynik pokazuje faktyczną opłatę i identyfikator zadania, który znajdziesz w sekcji Logs w konsoli.
Przyjętego generowania nie można anulować. Udane uruchomienia są płatne, a zwykłe niepowodzenia zwalniają rezerwację. Niektóre odmowy treści są płatne wyłącznie wtedy, gdy strona modelu mówi o tym wprost. Zobacz Rozliczenia.
Użyj klucza z limitem
Bot prowadzi własny rejestr w DATA_DIR/state.json. Jeśli ten plik zginie, bot zapomina, ile wydano dzisiaj. Limit na kluczu API w konsoli to limit, którego nie da się stracić, bo egzekwuje go SpicyAPI. Utwórz osobny klucz dla bota, ustaw dzienny limit wydatków i opcjonalnie dopuść tylko modele, które chcesz. Gdy limit zostanie osiągnięty, bot informuje, że klucz osiągnął limit wydatków.
Inne przydatne ustawienia:
| Ustawienie | Domyślnie | Co robi |
|---|---|---|
MAX_CONCURRENT_TASKS_PER_USER | 2 | Ile obrazów i wideo jedna osoba może mieć uruchomionych jednocześnie |
VIDEO_SECONDS / VIDEO_RESOLUTION | 5 / 480p | Długość i rozmiar wideo, dopasowane do tego, na co pozwala każdy model. Krótsze i mniejsze jest tańsze |
ALLOWED_MODELS | puste | Ogranicza menu /models. Dokładne identyfikatory albo prefiksy kończące się na *, na przykład alibaba/* |
Modele i ceny
Każda osoba może zmienić swoje modele poleceniem /models. Operator ustawia wartości domyślne:
| Zmienna | Domyślnie | Koszt w chwili pisania |
|---|---|---|
DEFAULT_IMAGE_MODEL | Z-Image Turbo, tekst na obraz | Około $0.01 za obraz |
DEFAULT_VIDEO_MODEL | MiniMax H3, tekst na wideo | Około $0.037 za sekundę w 768p |
DEFAULT_ANIMATE_MODEL | MiniMax H3, obraz na wideo | Około $0.037 za sekundę w 768p |
DEFAULT_CHAT_MODEL | DeepSeek V4.1 Flash | Dowolny model czatu z katalogu |
Dokładne identyfikatory modeli są w .env.example; aby zmienić model, skopiuj inny identyfikator z aktualnego katalogu (GET /api/v1/models; w przykładzie postaci poniżej MODEL_ID_FROM_CATALOG oznacza miejsce, w które taki identyfikator trafia). Ceny pochodzą z publicznego katalogu i mogą się zmieniać; bot zawsze pokazuje aktualną wycenę. Modele przeglądasz na spicyapi.ai/models albo w Katalogu modeli i schematach. Do roleplay ranking roleplay pomaga wybrać model czatu.
Postacie
Postacie znajdują się w pliku JSON (CHARACTERS_FILE, domyślnie characters/default.json, który zawiera dwie przykładowe postacie):
{
"characters": [
{
"id": "mira",
"name": "Mira",
"system": "You are Mira, ... Never speak or act for {{user}}.",
"greeting": "Welcome aboard, {{user}}!",
"model": "MODEL_ID_FROM_CATALOG"
}
]
}systemto instrukcje postaci.greeting(opcjonalne) to jej pierwsza kwestia.model(opcjonalne) przypina model czatu do tej postaci.{{char}}i{{user}}są zastępowane imieniem postaci i imieniem osoby.- Wpisami mogą być też JSON-y Character Card V2, czyli format eksportowany przez większość serwisów z postaciami i przez SillyTavern. Używane są opis, osobowość, scenariusz, przykładowy dialog i pierwsza wiadomość.
W Dockerze zamontuj własny plik i wskaż go w ustawieniu. W docker-compose.yml:
volumes:
- ./my-characters.json:/app/characters/custom.json:roA w .env:
CHARACTERS_FILE=characters/custom.jsonBot pamięta HISTORY_TURNS wymian na rozmowę (domyślnie 20) i ogranicza odpowiedzi do CHAT_MAX_TOKENS tokenów (domyślnie 2048). Modele z rozumowaniem wliczają swoje myślenie do tego limitu, więc bardzo mała wartość może nie zostawić miejsca na odpowiedź. Więcej o pisaniu postaci znajdziesz w Chat recipes.
Wysyłanie zdjęć jest domyślnie wyłączone
Domyślnie można animować tylko obrazy wygenerowane przez bota. Zamienianie zdjęć prawdziwych osób w wideo to główny sposób, w jaki nadużywa się takich botów, a osoba na zdjęciu nie zgodziła się pojawić w twoim wideo.
Jeśli ustawisz ALLOW_PHOTO_UPLOADS=true, każdy, komu pozwolisz, może animować zdjęcie, które wyśle. Włączaj to tylko dla osób, którym ufasz, i tylko dla zdjęć dorosłych, którzy się na to zgodzili. Gdy opcja jest włączona, przesłane obrazy są pobierane przez bota i przechowywane w SpicyAPI. Linki do plików Telegrama nigdy nie są przekazywane dalej, ponieważ zawierają token twojego bota.
Prywatność: co jest przechowywane i gdzie
| Co | Gdzie | Jak długo |
|---|---|---|
| Dzienne sumy wydatków, wybór modelu i postaci każdej osoby, kto zaakceptował zasady | state.json w DATA_DIR (wolumen w Dockerze) | Dopóki go nie usuniesz |
| Historia czatu | Tylko pamięć | Zapominana po restarcie, po dobie bezczynności albo przez /newchat |
| Logi bota | Twój komputer | Tylko identyfikatory zadań i kwoty, nigdy prompty ani media |
| Prompty i wyniki | SpicyAPI | Okres przechowywania twojego konta; zobacz Przechowywanie i usuwanie danych |
Ustaw RETENTION_SECONDS, aby poprosić SpicyAPI o usunięcie wyników i promptów wcześniej niż wynosi domyślny okres twojego konta.
W grupach wyniki są ukryte za spoilerem (SPOILER_MEDIA, domyślnie groups; inne wartości to always i never). /report przekazuje wiadomość właścicielowi. Treści naruszające zasady SpicyAPI można też zgłaszać na spicyapi.ai/abuse.
Rozwiązywanie problemów
| Komunikat lub objaw | Co zrobić |
|---|---|
„out of balance” (40201) | Doładuj saldo SpicyAPI. |
„reached the spend cap” (40202) | Osiągnięto limit klucza w konsoli. Zwiększ go albo poczekaj. |
„not allowed to use that model” (40301) | Dopuść model na kluczu w konsoli albo wybierz inny przez /models. |
„has not verified its email” (40310) | Otwórz link weryfikacyjny od SpicyAPI. |
| „The model declined this request” | Model odrzucił prompt. Dostosuj żądanie albo wybierz inny model. Sprawdź zasady naliczania opłat za odmowy na stronie modelu. |
Conflict: terminated by other getUpdates request | Dwie kopie bota używają tego samego tokenu. Zatrzymaj jedną. |
| Brak poleceń Discorda | /pic i /vid pojawiają się tylko na kanałach z ograniczeniem wiekowym. Polecenia globalne mogą potrzebować chwili, by się pojawić; ustaw DISCORD_GUILD_ID, aby rejestracja była natychmiastowa. |
| Błędy sieci za proxy | fetch w Node ignoruje HTTPS_PROXY, chyba że bot startuje z NODE_USE_ENV_PROXY=1. |
| Bot odpowiada liczbą, gdy do niego piszesz | To twój identyfikator użytkownika. Wpisz go w OWNER_ID i zrestartuj. |
Kody błędów wyjaśnia strona Błędy.
Aplikacje do roleplay
Połącz modele tekstowe SpicyAPI z RisuAI, Agnai, Chub, KoboldAI Lite i Janitor AI. Dokładne pola w każdej aplikacji, modele odpowiednie do roleplay, obsługa modeli z rozumowaniem i limity wydatków.
n8n
Używaj modeli obrazu, wideo, dźwięku i czatu SpicyAPI w przepływach n8n. Zainstaluj węzeł społeczności, zaimportuj szablony HTTP Request albo skieruj poświadczenie OpenAI w n8n na SpicyAPI dla węzłów AI Agent.

