Offener Algorithmus

So lost ScopliDrop Gewinner aus,
und warum du es nachprüfen kannst

Unser offengelegter Algorithmus sorgt für eine komplett faire Auslosung. Mehr Lose = bessere Chancen, aber jede teilnehmende Person hat eine echte Chance zu gewinnen. Keine Manipulation, keine Bevorzugung, keine Ausnahmen.

Unser Transparenz-Versprechen

Vertrauen entsteht durch Transparenz. Jeder Schritt unserer Auslosung ist offen einsehbar. Keine Blackbox, keine versteckten Algorithmen, keine geheimen Parameter. Was du siehst, ist genau das, was passiert.

Der Algorithmus hinter der Auslosung

Jeder Gewinner wird von diesem Code ausgelost, direkt aus unserer Codebasis. Kryptografisch sicherer Zufall, keine versteckten Funktionen, keine geheimen Parameter.

WinnerSelection.ts
1
2// src/lib/services/WinnerSelection.ts
3import { randomInt } from 'crypto';
4import { GiveawayEntry } from '@/components/dashboard/giveaways/types';
5
6/**
7 * Select winners using weighted random selection.
8 * @param entries All entries, each with a user_id and entries_count
9 * @param winnerCount Number of winners to draw
10 * @param hasFraudDetection Premium+ servers exclude fraud-flagged entries
11 * @param cooldownExcludedUserIds Users on winner cooldown (recent wins)
12 * @returns Array of selected winner user IDs
13 */
14export function selectWinners(
15 entries: GiveawayEntry[],
16 winnerCount: number,
17 hasFraudDetection: boolean = true,
18 cooldownExcludedUserIds: string[] = []
19): string[] {
20 if (!entries || entries.length === 0) {
21 return [];
22 }
23
24 // 1. Exclude fraud-flagged entries (premium+) and users on winner cooldown.
25 // Flags are set only by automated fraud detection; a server admin can never
26 // manually flag, unflag, or hand-pick who gets excluded from the draw.
27 // Free servers keep every entry; fraud flags are ignored.
28 const cooldownExcluded = new Set(cooldownExcludedUserIds);
29 const eligibleEntries = (hasFraudDetection
30 ? entries.filter(entry => entry.fraud_flag !== 'red')
31 : entries
32 ).filter(entry => !cooldownExcluded.has(entry.user_id));
33
34 if (eligibleEntries.length === 0) {
35 return [];
36 }
37
38 // 2. Build a weighted pool: one slot per entry earned.
39 // 5 entries = 5 slots = 5 chances to win.
40 const entryPool: string[] = [];
41 for (const entry of eligibleEntries) {
42 for (let i = 0; i < entry.entries_count; i++) {
43 entryPool.push(entry.user_id);
44 }
45 }
46
47 // 3. Draw winners with cryptographically secure randomness.
48 const winners: string[] = [];
49 const winnerSet = new Set<string>();
50
51 // A user can only win once, so never draw more winners than unique people.
52 const uniqueParticipants = new Set(eligibleEntries.map(entry => entry.user_id));
53 const availableWinnerCount = Math.min(winnerCount, uniqueParticipants.size);
54
55 if (availableWinnerCount === 0 || entryPool.length === 0) {
56 return [];
57 }
58
59 while (winners.length < availableWinnerCount && entryPool.length > 0) {
60 // crypto.randomInt is a CSPRNG: no seed, no bias, not manipulable.
61 const randomIndex = randomInt(entryPool.length);
62 const selectedUserId = entryPool[randomIndex];
63
64 // Only add first-time winners; duplicates are skipped.
65 if (!winnerSet.has(selectedUserId)) {
66 winners.push(selectedUserId);
67 winnerSet.add(selectedUserId);
68 }
69
70 // Remove the drawn slot via swap-and-pop (O(1)).
71 entryPool[randomIndex] = entryPool[entryPool.length - 1];
72 entryPool.pop();
73 }
74
75 return winners;
76}

Die wichtigsten Schritte

Klicke auf einen Schritt, um seine Umsetzung im Code zu sehen

Zeile 3

Sicherer Zufall

Gewinner werden mit crypto.randomInt von Node ausgelost, einem kryptografisch sicheren Generator. Es gibt keinen Seed, den man vorhersagen könnte, und nichts zu manipulieren, auch nicht für uns.

Zeile 30

Betrugs- und Cooldown-Filter

Vor der Auslosung werden auf Servern mit Betrugserkennung markierte Teilnahmen entfernt, und wer im Gewinner-Cooldown ist, bleibt außen vor. Free-Server behalten jede Teilnahme.

Zeile 43

Gewichteter Pool

Hier beginnt die Fairness. Jede Person kommt einmal pro verdientem Los in den Pool, 5 Lose heißen also 5 Chancen. Proportional, nie garantiert.

Zeile 61

Die Auslosung

Ein zufälliger Index im gewichteten Pool bestimmt jeden Gewinner. Mehr Lose heißen einfach mehr Plätze, und jeder Platz hat exakt dieselbe Chance.

Zeile 65

Kein doppelter Gewinn

Ein Gewinner-Set stellt sicher, dass niemand zweimal gewinnt, und wir losen nie mehr Gewinner aus, als es teilnahmeberechtigte Personen gibt.

So funktioniert die Fairness

Sieh genau, wie unser Algorithmus jeder teilnehmenden Person eine faire Chance gibt, mit besseren Chancen für die, die mehr machen.

1

Lose sammeln

Mitglieder erledigen Aufgaben und verdienen Lose für ihre Aktionen

2

Gewichteter Pool

Jedes Los kommt je nach erledigten Aufgaben in den Auslosungs-Pool

3

Zufällige Auswahl

Kryptografisch sicherer Zufall wählt aus dem gewichteten Pool

4

Kein doppelter Gewinn

Stellt sicher, dass jede Person pro Giveaway nur einmal gewinnen kann

5

Gewinner bestätigen

Die ausgelosten Gewinner werden geprüft und verkündet

Konkretes Beispiel

Alice erledigt 3 Aufgaben, Bob 1 Aufgabe, Charlie 5 Aufgaben. Der Pool enthält insgesamt 9 Lose, mit proportionalen Gewinnchancen.

Alice

3 Lose verdient

33% Chance

Bob

1 Los verdient

11% Chance

Charlie

5 Lose verdient

56% Chance

Der Pool (9 Lose insgesamt)

Jeder Punkt steht für ein Los. Der Gewinner wird zufällig aus allen Losen gezogen.

Schluss mit manipulierten Giveaways

Ein Discord-Giveaway-Bot, der genau zeigt, wie Gewinner ausgelost werden

Das Problem

Die meisten Discord-Giveaway-Bots sind Blackboxen. Selbst wenn der Bot seriös ist und wirklich zufällig auslost, kann deine Community das nicht nachprüfen. Sie sieht den Algorithmus nicht, kann den Ablauf nicht kontrollieren und nicht belegen, dass die Gewinner nicht von Hand ausgesucht wurden.

Ohne Transparenz wirkt jedes Giveaway verdächtig. Deine Mitglieder fragen sich irgendwann, ob es überhaupt fair zugeht. Das Vertrauen stirbt, das Engagement sinkt.

Wir hatten genug davon, Communitys an verlorenem Vertrauen sterben zu sehen

Die Lösung

Nie wieder Engagement verlieren, weil jemand „manipuliertes Giveaway“ ruft. Wenn Mitglieder an der Fairness zweifeln, schick ihnen einfach den Link zu dieser Seite.

ScopliDrop garantiert, dass Server-Inhaber Giveaways weder bearbeiten noch Gewinner auswählen können. Punkt.

Es gibt eine Funktion „Giveaway manuell beenden“, aber die startet nur unseren Auslosungs-Algorithmus, sonst nichts. Server-Admins KÖNNEN KEINE Gewinner auswählen, auf keinem Weg. Das ist unser Versprechen.

Fragen zur Fairness

So stellen wir sicher, dass jedes Giveaway transparent, sicher und für alle Teilnehmenden fair ist.

Mach mit bei der fairen Revolution

Bereit für wirklich faire
Giveaways, ab heute?

Tausende Discord-Communitys sind schon auf transparente, nachprüfbare Giveaways umgestiegen. Starte kostenlos und beweise Fairness vom ersten Tag an.