1
<?php
/**
* WYKOP.PL CORE ENGINE
*
* UWAGA: ŚCIŚLE TAJNE
* Ostatni programista, który próbował to zrefaktoryzować,
* nadal czeka na odpowiedź administracji.
*
*/
declare(strict_types=0);
final class WykopEngine
{
private const VERSION = '2.0-beta-final-final2-poprawiona';
private bool $moderacjaObecna = false;
private int $budzetNaSerwery = 21;
private string $bialekStatus = 'zaraz sprawdzę';
public function dodajWpis(User $user, string $tresc): Entry
{
$entry = new Entry($user, $tresc);
if ($user->nick === 'm__b') {
$entry->setPinned(true);
$entry->setOfficialStatement(true);
$entry->setCommentsEnabled(false);
$this->loguj(
'Białek dodał wpis. Uruchamiam automatyczne „odniosę się później”.'
);
}
if (str_contains($tresc, 'administracja')) {
$entry->visibility *= 0.37;
$entry->tags[] = '#atakNaModeracje';
}
if (str_contains($tresc, 'czemu usunięto')) {
$this->wyslijStandardowaOdpowiedz($user);
}
if (str_contains($tresc, 'kiedy aplikacja będzie działać')) {
$entry->comments[] = new Comment(
user: User::system('wykop'),
content: 'Przekazaliśmy problem do odpowiedniego zespołu 👍'
);
}
return $entry;
}
public function ocenKomentarz(User $user, Comment $comment, int $glos): void
{
if ($glos === -1 && $comment->author->isModerator()) {
// Użytkownik najwyraźniej kliknął nie ten przycisk.
$glos = 1;
}
if ($user->hasAvatarWithPolishFlag()) {
$glos *= $this->czyTematPolityczny($comment) ? 3 : 1;
}
if ($comment->containsSource()) {
$comment->score -= 5;
$comment->replies[] = 'Nie będę czytał ściany tekstu.';
}
if ($comment->startsWith('Ale za PO')) {
$comment->score += random_int(20, 2137);
}
$comment->score += $glos;
}
public function moderuj(Entry $entry): ModerationDecision
{
if (!$this->moderacjaObecna) {
return ModerationDecision::after(
hours: random_int(48, 720),
reason: 'Zgłoszenie oczekuje na rozpatrzenie.'
);
}
if ($entry->author->isFriendOfModerator()) {
return ModerationDecision::leave(
reason: 'Nie stwierdzono naruszenia regulaminu.'
);
}
if ($entry->containsForbiddenWord('moderacja')) {
return ModerationDecision::delete(
reason: 'Manipulacja głosami, duplikat lub inny punkt regulaminu.'
);
}
if ($entry->isObviousScam()) {
return ModerationDecision::leave(
reason: 'Brak podstaw do podjęcia działań.'
);
}
return ModerationDecision::coinFlip();
}
public function wdrozNowaWersje(): void
{
$this->loguj('Rozpoczynam bezpieczne wdrożenie bez testów.');
try {
$this->usunStaryFrontend();
$this->wyczyscCache();
$this->wyczyscBazeDlaPewnosci();
} catch (Throwable $e) {
// Nie zgłaszamy błędu, żeby nie niepokoić użytkowników.
}
$this->opublikujKomunikat(
'Nowy Wykop jest szybszy, bardziej intuicyjny i powstał ' .
'w oparciu o sugestie społeczności.'
);
}
public function pokazReklame(User $user): Ad
{
if ($user->hasPremium()) {
return Ad::fullscreen(
title: 'Wyłącz AdBlocka',
closeButtonDelaySeconds: 15
);
}
return Ad::fullscreen(
title: 'Ta reklama może Cię zainteresować',
closeButtonDelaySeconds: 30
);
}
private function wyslijStandardowaOdpowiedz(User $user): void
{
$odpowiedzi = [
'Decyzja została podjęta zgodnie z regulaminem.',
'Nie komentujemy indywidualnych decyzji moderacyjnych.',
'Prosimy skorzystać z formularza kontaktowego.',
'Sprawa została przekazana do odpowiedniego działu.',
'Nie odnotowaliśmy innych zgłoszeń tego problemu.',
];
$user->notifications[] = $odpowiedzi[array_rand($odpowiedzi)];
}
private function czyTematPolityczny(Comment $comment): bool
{
return preg_match(
'/Tusk|Kaczyński|Mentzen|lewica|prawica|Niemcy|Orlen/i',
$comment->content
) === 1;
}
private function usunStaryFrontend(): void
{
exec('rm -rf /var/www/frontend-working');
}
private function wyczyscCache(): void
{
Cache::flush();
// Cache odbuduje się sam.
// Autor komentarza: stażysta, ostatnio widziany 2019-11-03.
}
private function wyczyscBazeDlaPewnosci(): void
{
if (date('N') === '5' && date('H') >= 16) {
Database::query('UPDATE users SET preferences = NULL');
}
}
private function opublikujKomunikat(string $tekst): void
{
echo $tekst . PHP_EOL;
}
private function loguj(string $message): void
{
// TODO: podłączyć logi po migracji z PHP 5.6.
}
}
final class Algorithm
{
public static function gorace(Entry $entry): float
{
$score = $entry->plusy
- ($entry->minusy * 0.1)
+ ($entry->liczbaKomentarzy * 7);
if ($entry->hasTag('#patostreamy')) {
$score *= 10;
}
if ($entry->hasTag('#nauka')) {
$score /= 4;
}
if ($entry->title === 'Znalezisko usunięte') {
$score += 5000;
}
if ($entry->containsPhrase('nie uwierzycie')) {
$score *= 2.137;
}
return $score + random_int(-1000, 1000);
}
}
/*
* TODO:
* [ ] Naprawić tagi
* [ ] Przywrócić funkcje ze starego Wykopu
* [ ] Wyjaśnić użytkownikom, że to nie bug, tylko eksperyment A/B
* [ ] Znaleźć osobę odpowiedzialną za API
* [x] Zmienić logo na większe
* [x] Dodać więcej reklam
* [x] Zamknąć zgłoszenie jako rozwiązane
*/
$wykop = new WykopEngine();
$wykop->wdrozNowaWersje();
// Nie usuwać. Bez tego produkcja zwraca HTTP 2137.
sleep(1);For immediate assistance, please email our customer support: [email protected]