athas / EggsML

A fully fledged and highly scalable lunch management system for the modern enterprise
http://eggsml.dk
GNU Affero General Public License v3.0
30 stars 10 forks source link

Lad være med at sige velkommen til brugere der kun har været offline i et par minutter #150

Closed nqpz closed 5 years ago

nqpz commented 5 years ago

Det er hyggeligt at concieggs siger velkommen til folk, men jeg synes at det lidt bryder illusionen at sige velkommen til nogen der kun har været væk i et par minutter, især fordi det sker rimelig ofte (nogle IRC-klienter er af tvivlsom kvalitet).

Jeg tror ikke det er så svært at holde styr på hvem der er on- og offline. Faktisk tror jeg allerede at @sshine lavede noget af det arbejde i #39 -- se fx scriptet hooks/channel_part/05register_part der bliver kørt hver gang nogen logger af. Jeg er ikke klar over om der lige nu bliver gemt hvornår folk logger af, men det ville så være nødvendigt at (midlertidigt) gemme for at kunne tjekke om de skal have en velkomstbesked når de logger på igen.

Det er i hvert fald min holdning!

Sword-Smith commented 5 years ago

Jeg synes, det er en god idé.

sshine commented 5 years ago

Lige nu gemmes der kun en liste af navne i filen on_channel/#diku.

Jeg ved ikke hvor det bedste sted at lægge det er, men evt. en off_channel/#diku?

Så kunne man i begge tilfælde gemme et timestamp for hvornår personen sidst joinede eller partede:

simon 1552906642
secret_hitler 1552906641
svip commented 5 years ago

Jeg synes det er sødt at I er ved at genopfinde hjulet, men vi har altså checkCooldown. Den kan jo bare kaldes således:

if checkCooldown "velkomst_$EGGS_USER" $((60 * 60 * 24)); then
  echo "OHØJ"
fi
svip commented 5 years ago

Jeg ved godt den ikke opfylder @nqpz' krav, men er det så vigtigt? Dem der hele tiden logger af på får jo så bare ikke velkomst de efterfølgende gange, med mindre der er gået X antal sekunder.

sshine commented 5 years ago

@svip: Smart med checkCooldown! Den skal gerne huske joins og parts separat og gøre det for hver kanal, hvis man går ud af én kanal men ikke er gået ud af en anden. Ellers kommer der nogle spøjse hjørnetilfælde.

Evt. checkCooldown "joined/$EGGS_WHERE/$EGGS_USER" $((60 * 60 * 24))? Det kan vi evt. refaktorisere hooks/channel_part/05register_part til også at bruge. Hvis vi gør det, er der nogle steder (grep -r on_channel) som med fordel kan laves om til en eggspi-kommando der udtrækker listen fra joined/*/#channel i stedet.

Og evt. sikre at checkCooldown kan tage mappenavne som argument og mkdir -p'e dem om nødvendigt. (Jeg ved forresten ikke om kommandoen escaper for at undgå fx backslashes i navne og kanalnavne.)

svip commented 5 years ago

Alle tegn pånær / er tilladt i et filnavn. Så bare brug end understreg, med mindre du rigtig gerne vil have den mappestruktur? Såsom joined_${EGGS_WHERE}_${EGGS_USER}, det er jo til at forstå. Man kan bare lige kalde checkCooldown når folk logger ud også, bare uden at bruge værdien til noget. Eller lave et eggspi-kald som bare er til formålet at oprette for checkCooldown (som også overskriver, fordi det gør checkCooldown ikke).

athas commented 5 years ago

Tag en hash a brugernavnet. Alle gode systemer hasher alting! Jeg er ved at lære at bruge Nix, og der bliver stierne sådan nogle lækre lange hashes.

sshine commented 5 years ago

Nogle af kaldene til on_channel/... bruges til at hive et tilfældigt navn ud på nogen. Så hvis man hasher eller forsimpler et navn, kan det ikke blive brugt direkte i de kald. Så med mindre der er et formål med at hashe eller forsimple navnene, ville det betyde at de funktioner ikke kunne omskrives til at bruge de her filer.

Og hvis filen hedder joined_${EGGS_WHERE}_${EGGS_USER} frem for fx joined/${EGGS_WHERE}/${EGGS_USER}, skal informationen post-processeres i højere grad.

Jeg vil blande mig uden om og lade den der ønsker at implementere det komme med et forslag og dem der gerne vil snakke om muligheder uden at ændre på noget gøre det.

nqpz commented 5 years ago

Jeg synes godt om en checkCooldown-løsning.

Sword-Smith commented 5 years ago

Nu var concieggs lige på den forkerte side af et netsplit og spyttede 55 velkomstbeskeder ud på få minutter. Det og ovenstående problem kan vel løses ved at have en global cooldown på måske 1 minut og så en brugerspecifik cooldown på 2 timer?

Sword-Smith commented 5 years ago

Vistnok løst i ce0334a8ceb52b8bc77922958e71e6247702fe75. Lad os se, om det virker i prod.

Sword-Smith commented 5 years ago

Jeg tror, det virker, som det skal. Tak til @svip for at foreslå en god løsning!