Skip to content

89891383/OpenDonate

Repository files navigation

💸 OpenDonate

Open-source'owy system donatów dla streamerów — Stripe + PayPal, alerty na overlay, TTS, wiadomości głosowe, cele, top donejtów. Postaw to u siebie, dostosuj pod swoją markę.

PHP MySQL License Made for streamers


🇵🇱 Po polsku

✨ Co to jest?

OpenDonate to gotowy do postawienia system donejtów dla streamerów, podobny w działaniu do TipeeeStream czy StreamElements, ale w 100% u Ciebie na serwerze i pod Twoją kontrolą. Widz wpłaca donate, na ekranie streamera pojawia się animowany alert z nickiem, kwotą, wiadomością i (opcjonalnie) głosówką TTS lub nagraną wiadomością głosową.

🎯 Główne funkcje

  • 💳 Płatności Stripe — karty, BLIK, Revolut Pay, Klarna
  • 💵 Płatności PayPal — bez konta biznesowego, z kartami
  • 🎤 Alerty na stream — animowane, w pełni konfigurowalne
  • 🗣️ TTS (Text-to-Speech) — czytanie wiadomości na żywo
  • 🎙️ Wiadomości głosowe — widz może nagrać krótki audiowiadomość
  • 🎯 Wiele celów donacji jednocześnie — widz wybiera na stronie wpłat, w overlay rotują
  • 🏆 Top donejtów — overlay z rankingiem + opcjonalny auto-scroll pionowy
  • 🕘 Last Donate — overlay ostatnich donatów + opcjonalny auto-scroll pionowy
  • ⏱️ Odlicznik do końca transmisji — stream „przedłużany", np. 1 PLN = 60s; minimum, ręczne dodawanie czasu/kwoty, real-time
  • 💎 Szablony kwotowe — różne animacje/dźwięki w zależności od kwoty
  • 🛡️ Filtrowanie wiadomości — anty-spam, anty-link, anty-emoji
  • 📊 Panel administracyjny — wszystko w jednym miejscu
  • 🎨 Pełen branding — logo, nazwa, kolory, czcionki — wszystko z panelu
  • 🔄 Real-time kontrola — pauzowanie, wyciszenie, pomijanie alertów na żywo
  • 📍 Filtry rankingów — dzisiaj / tydzień / miesiąc / rok (auto) / od daty / wszystkie
  • 🔁 Wyrównanie list — lewo / środek / prawo dla Top i Last Donate

📋 Wymagania

  • PHP 7.4+ (zalecane 8.x) — z rozszerzeniami: pdo_mysql, curl, mbstring, json
  • MySQL 5.7+ lub MariaDB 10.3+
  • Serwer www z obsługą PHP (Apache/Nginx)
  • Konto Stripe (opcjonalnie) — stripe.com
  • Konto PayPal (opcjonalnie) — paypal.com
  • HTTPS na produkcji (wymagane przez Stripe i mikrofon do voice messages)

🚀 Szybka instalacja

1. Pobierz projekt

git clone https://github.com/TWOJ_USER/opendonate.git
cd opendonate

Albo pobierz ZIP z GitHuba i wgraj na serwer (np. przez FTP do /public_html/donate/).

2. Skonfiguruj bazę danych

W phpMyAdmin (lub przez CLI) utwórz bazę:

CREATE DATABASE opendonate CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Wybierz bazę i zaimportuj plik db_init.sql.

3. Skonfiguruj plik config.php

Skopiuj szablon i uzupełnij dane:

cp config.example.php config.php

Edytuj config.php i ustaw:

define('DB_HOST', 'localhost');
define('DB_NAME', 'opendonate');         // nazwa Twojej bazy
define('DB_USER', 'opendonate_user');    // user MySQL
define('DB_PASS', 'TWOJE_HASLO');        // hasło MySQL
define('BASE_URL', 'https://twoja-domena.pl/donate'); // bez slasha na końcu!

4. Uprawnienia do katalogów

Upewnij się, że PHP może pisać do:

chmod 775 logs uploads uploads/voice_messages sounds

5. Zaloguj się do panelu

Otwórz https://twoja-domena.pl/donate/admin.php i zaloguj się:

  • Login: admin
  • Hasło: password

⚠️ NATYCHMIAST ZMIEŃ HASŁO w zakładce „Konto"!

6. Skonfiguruj branding

W panelu wejdź w Ustawienia ogólne → Branding i ustaw:

  • Nazwa marki (Twój nick/kanał)
  • URL logo (link do obrazka)
  • URL favicon
  • URL powrotu (np. link do Twojego Twitcha)
  • Email kontaktowy (do regulaminu RODO)
  • Nazwa operatora (Twoje imię/firma do regulaminu)

7. Skonfiguruj płatności

Stripe: Panel admin → Konfiguracja Stripe → wklej secret_key, publishable_key i webhook_secret. Webhook URL: https://twoja-domena.pl/donate/api/notification_handler.php

PayPal: Panel admin → wpisz swój email PayPal. Na PayPal.com włącz IPN:

  • Settings → Notifications → IPN
  • URL: https://twoja-domena.pl/donate/api/notification_handler.php

8. Dodaj overlaye do OBS

W OBS dodaj Browser Source z URL-ami:

  • Alerty: https://twoja-domena.pl/donate/alert_box.php — szerokość 800, wysokość 200
  • Cel: https://twoja-domena.pl/donate/goal_overlay.php — szerokość 400, wysokość 100
  • Top: https://twoja-domena.pl/donate/top_donate.php — szerokość 400, wysokość 600
  • Last: https://twoja-domena.pl/donate/last_donate.php — szerokość 400, wysokość 200
  • Odlicznik: https://twoja-domena.pl/donate/countdown_overlay.php — szerokość 600, wysokość 200

Gotowe! Daj widzom link do https://twoja-domena.pl/donate/ i streamuj!

🛠️ Konfiguracja Stripe (krok po kroku)

  1. Załóż konto na stripe.com
  2. Przejdź do Developers → API keys → skopiuj Publishable key i Secret key
  3. Przejdź do Developers → Webhooks → Add endpoint
  4. Endpoint URL: https://twoja-domena.pl/donate/api/notification_handler.php
  5. Eventy: checkout.session.completed
  6. Skopiuj Signing secret (whsec_...)
  7. Wklej wszystkie 3 klucze do panelu admina

🛠️ Konfiguracja PayPal (krok po kroku)

  1. Wejdź na paypal.com → Settings (koło zębate)
  2. Account Settings → Notifications → Instant Payment Notifications
  3. Włącz IPN i wpisz URL: https://twoja-domena.pl/donate/api/notification_handler.php
  4. Skopiuj swój email PayPal
  5. Wklej email do panelu admina

📁 Struktura projektu

opendonate/
├── admin.php              # Panel administracyjny
├── alert_box.php          # Overlay alertów (OBS)
├── api/                   # Endpointy API
│   ├── process_donation.php       # Tworzenie donatu
│   ├── notification_handler.php   # Webhook Stripe / IPN PayPal + auto-doliczanie czasu/celu
│   ├── get_alert.php              # Pobieranie alertu dla overlay
│   ├── get_top_donations.php      # Top Donate (filtry, alignment, autoscroll)
│   ├── get_last_donations.php     # Last Donate (filtry, alignment, autoscroll)
│   ├── get_goal_progress.php      # Lista celów + rotacja overlay
│   ├── get_countdown.php          # Stan odlicznika
│   ├── set_countdown.php          # Start/pause/reset/add (tylko admin)
│   └── ...
├── countdown_overlay.php  # Widget odlicznika (OBS)
├── config.example.php     # Szablon konfiguracji
├── config.php             # Twoja konfiguracja (gitignore!)
├── db_init.sql            # Inicjalizacja bazy (kompletny schemat)
├── goal_overlay.php       # Overlay celu/celów donacji (rotacja gdy wiele)
├── index.php              # Strona główna — formularz + wybór celu
├── last_donate.php        # Overlay ostatnich donatów
├── logs/                  # Logi (gitignore)
├── sounds/                # Dźwięki intro (uploadowane)
├── thank_you.php          # Strona po wpłacie
├── top_donate.php         # Overlay top donejtów
└── uploads/voice_messages/ # Wiadomości głosowe (gitignore)

🔐 Bezpieczeństwo

  • ✅ Hasła hashowane przez password_hash() (bcrypt)
  • ✅ Wszystkie zapytania przez PDO prepared statements
  • ✅ Weryfikacja webhooków Stripe (HMAC SHA-256)
  • ✅ Weryfikacja IPN PayPal
  • ✅ Sesje z httponly i secure cookies
  • ✅ Plik config.php w .gitignore
  • ⚠️ Pamiętaj o HTTPS na produkcji!

❓ FAQ

Nie działa overlay, pokazuje 404. Sprawdź czy BASE_URL w config.php ma prawidłowy adres i nie ma slasha na końcu.

Webhook Stripe nie działa. Webhook musi być na HTTPS i URL musi być dokładnie taki sam jak w panelu Stripe (zwracaj uwagę na końcowy slash).

Nie odtwarza TTS. TTS używa Web Speech API przeglądarki. Sprawdź czy w OBS Browser Source masz włączoną opcję „Control audio via OBS".

Jak zmienić hasło admina? Panel admina → Konto → zmień hasło. Można też ręcznie w bazie: hash bcrypt z php -r "echo password_hash('TWOJE_HASLO', PASSWORD_BCRYPT);"

Jak działa odlicznik? Wejdź w panel → Odlicznik → ustaw np. „1 PLN = 60s" i włącz. Każdy donate ≥ minimalnej kwoty automatycznie doliczy czas. Możesz też ręcznie dodać minuty lub kwotę z panelu (przyciski Start/Pause/Reset + pola dodawania). Licznik tyka real-time co sekundę, synchronizuje się z serwerem co 3s.

Jak długie nicki w Top/Last Donate? Długie nicki łamią się automatycznie w nowe linie zamiast być ucinane. Jeśli widget OBS jest węższy niż nick + kwota, układ adaptuje się.

Lista Top Donate jest za długa dla widgetu OBS. W panelu Top Donate włącz opcję Auto-scroll pionowy — gdy lista nie mieści się w widgecie, animuje powolny scroll w pionie. Możesz ustawić od 1 do 100 donatów i dowolną prędkość scrolla.

Jak skonfigurować wiele celów donacji? Panel → Cele donacji → dodaj dowolną ilość celów przez formularz „Dodaj nowy cel". Dla każdego ustawisz:

  • Domyślny — który cel jest zaznaczony domyślnie na stronie wpłat (tylko 1 może być domyślny)
  • Pokazuj na stronie wpłat — widz może wybrać ten cel kliknięciem na karcie
  • Pokazuj w overlay — cel pojawi się w widgecie OBS (jeśli aktywnych jest kilka, będą rotować)

Po wybraniu celu przez widza, donate doliczy się tylko do tego celu, nie do innych.

🤝 Wkład w projekt

Pull requesty mile widziane! Zgłaszaj bugi i pomysły w Issues.

📄 Licencja

MIT — używaj komercyjnie, modyfikuj, forkuj. Tylko zachowaj informację o oryginalnej licencji.


🇬🇧 English

What is this?

OpenDonate is a self-hosted, open-source donation system for streamers — similar to TipeeeStream or StreamElements, but fully under your control. Viewers send donations, animated alerts appear on the streamer's overlay with nickname, amount, message, and optionally TTS/voice messages.

Main features

  • 💳 Stripe payments — cards, BLIK, Revolut Pay, Klarna
  • 💵 PayPal payments — no business account required
  • 🎤 Stream alerts — animated, fully configurable
  • 🗣️ TTS (Text-to-Speech)
  • 🎙️ Voice messages from donors
  • 🎯 Donation goals with progress bar overlay
  • 🏆 Top donators overlay
  • 💎 Amount-based templates — different sounds/styles per donation amount
  • 🛡️ Message filtering (anti-spam, anti-link, anti-emoji)
  • 📊 Admin panel — everything in one place
  • 🎨 Full branding — logo, name, colors, fonts via admin panel
  • 🔄 Real-time controls — pause, mute, skip alerts live

Requirements

  • PHP 7.4+ (8.x recommended) with pdo_mysql, curl, mbstring, json
  • MySQL 5.7+ or MariaDB 10.3+
  • Web server with PHP support (Apache/Nginx)
  • Stripe account (optional)
  • PayPal account (optional)
  • HTTPS in production

Quick install

git clone https://github.com/YOUR_USER/opendonate.git
cd opendonate
cp config.example.php config.php
# Edit config.php with your DB credentials and BASE_URL
# Import db_init.sql into your MySQL database
chmod 775 logs uploads uploads/voice_messages sounds

Then open /admin.php and log in with admin / password (change it immediately!).

Configure branding, Stripe/PayPal keys in the admin panel, and add OBS Browser Sources for the overlays.

License

MIT — see LICENSE.


🙏 Credits

Originally built as a private streaming donation system, now released as open-source for the streaming community. Pull requests and contributions welcome!

Made with ❤️ for streamers.

About

💸 Open-source system donejtów dla streamerów — Stripe, PayPal, BLIK, alerty OBS, TTS, wiadomości głosowe, cele i top donejtów. Self-hosted alternatywa dla Tipply, Streamlabs, StreamElements i TipeeeStream. Postaw u siebie, dostosuj pod swoją markę.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors