Przejdź do treściARIKU://CV (PDF)

← Wszystkie projekty

cat ~/projects/radar/README

Radar

Automatyzacja z n8n2026działa produkcyjnie

Automatyczny przegląd darmowych gier, promocji, wydarzeń w grach i konwentów: n8n zbiera i punktuje, aplikacja filtruje, publikuje na Discordzie z limitami i wystawia kalendarz .ics.

Cel

Nie przeglądać ręcznie serwisów z promocjami i wydarzeniami, a jednocześnie nie zaśmiecać kanałów Discorda powtórkami i słabymi okazjami.

Rozwiązanie

n8n pobiera dane ze źródeł i wstępnie je punktuje, a potem wysyła paczki do aplikacji. Cała logika progów, deduplikacji, limitów i wyboru kanału jest w TypeScript. Wynik trafia na kanały Discorda, do skrzynki zadań w Vikunji, na publiczną stronę /radar i do kalendarza .ics.

Architektura

  1. n8n: pobieranie i wstępny scoring, wysyłka paczek (do 50 pozycji) na wewnętrzny endpoint z walidacją struktury.
  2. Reguły progów: darmowe gry zawsze, promocje od temperatury 1000 w dozwolonych kategoriach, newsy i wydarzenia od wyniku 70.
  3. Dyspozytor publikacji wybiera kanał według rodzaju wpisu i gry, pilnuje dziennego limitu na kanał i nie publikuje drugi raz.
  4. Darmowe gry i konwenty trafiają też jako zadania do Vikunji.
  5. Widok /radar łączy wpisy z bazy, wydarzenia z Lunety i zadania z Vikunji w koszyki „teraz”, „ten tydzień” i „później”; ten sam zbiór eksportuje się do RFC 5545.

Decyzje techniczne

n8n zbiera, kod decyduje
Workflow w n8n jest prosty do zmiany, ale trudny do testowania. Dlatego n8n tylko pobiera i punktuje, a progi, limity i routing są w TypeScript z testami jednostkowymi.
Bez dublowania z Lunetą
Wydarzenia Blue Archive i NTE ogłaszają źródła Lunety. Radar pokazuje je na stronie, ale nie wysyła ich drugi raz na Discorda.
Awaria jednego źródła nie kładzie strony
Jeśli baza Lunety albo Vikunja nie odpowiada, /radar pokazuje resztę danych, a brakującą sekcję zapisuje w logach jako ostrzeżenie.

Problemy i rozwiązania

Spam przy ponownym przetwarzaniu paczek
Dzienny limit postów na kanał (3 albo 5) i maksymalny wiek wpisu 24 godziny. Nadmiar zostaje na stronie /radar, bez wysyłki na Discorda.
Darmowe gry ogłaszane przed startem promocji
Wpis z datą rozpoczęcia w przyszłości czeka i trafia na Discorda dopiero po starcie oferty.