EggsML icon indicating copy to clipboard operation
EggsML copied to clipboard

Hold løbende styr på hvem der er online på IRC

Open nqpz opened this issue 9 years ago • 14 comments

concieggs bruger lige nu eggspi-kommandoen recentlyActive til at få en liste af nyligt aktive brugere baseret på hvem der har skrevet noget i de sidste N linjer. Det bruges til bl.a. flaske- og fluen-kommandoen.

Det virker fint, bortset fra at nogle af de aktive brugere kan være logget af siden de har skrevet deres besked, hvilket kan være suboptimalt. Det er fx noget rod at krone en som slet ikke er online!

Problemet er at det tager lang tid at tjekke om nogen er online: concieggs skal sende en WHOIS til freenode for hver bruger, så det kan godt blive 5-10 whoises, og det er langsomt.

Det kan løses ved at det registreres når brugere logger på og af, så det gemmes i concieggs' database hvem der er online. Så er det trivielt at tjekke om nogen er på IRC eller ej. Der skal ikke gemmes hvornår folk er logget på og af, kun hvorvidt de er online eller offline.

nqpz avatar Dec 29 '15 21:12 nqpz

"Niels G. W. Serup" [email protected] writes:

Det kan løses ved at det registreres når brugere logger på og af, så det gemmes i concieggs' database hvem der er online. Så er det trivielt at tjekke om nogen er på IRC eller ej.

Ligesom en voksion-IRC-klient!

\ Troels /\ Henriksen

athas avatar Dec 29 '15 22:12 athas

Det ville også være fedt hvis den trackede det pr. kanal!

Fx. ifm. at få s/foo/bar/ til at ændre sidste besked på nuværende kanal, og ikke sidste besked anywhere.

Eckankar avatar Jun 23 '16 11:06 Eckankar

Ja, eller at flaske var specifik for de senest aktive brugere på en given kanal.

sshine avatar Nov 17 '16 12:11 sshine

Hvorfor er det så svært at implementere? Er vi bare dovne?

svip avatar Feb 13 '17 15:02 svip

Come on, Danmark.

Vi kan altså godt implementere det her!

(Men jeg har ikke lige tid.)

nqpz avatar Apr 18 '18 09:04 nqpz

Jeg har forsøgt at markere problemet som vigtigt.

Særligt har jeg maskeret det som et krav til opfyldelse af GDPR, fordi det er den nærmeste deadline vi har.

Vi kan jo ikke beskytte folks informationer om hvorvidt de er online, hvis vi ikke indsamler dem.

sshine avatar Apr 18 '18 09:04 sshine

Der er nu hooks/channel_join/05register_join og hooks/channel_part/05register_part.

  • [x] Registrér når det er concieggs der joiner, så den kan sende /names i stedet.

  • [x] Håndtér 353/366, så concieggs kan genopfriske listerne uden at alle forlader og kommer igen:

      353     RPL_NAMREPLY
                      "<channel> :[[@|+]<nick> [[@|+]<nick> [...]]]"
      366     RPL_ENDOFNAMES
                      "<channel> :End of /NAMES list"
    
              - To reply to a NAMES message, a reply pair consisting
                of RPL_NAMREPLY and RPL_ENDOFNAMES is sent by the
                server back to the client.  If there is no channel
                found as in the query, then only RPL_ENDOFNAMES is
                returned.  The exception to this is when a NAMES
                message is sent with no parameters and all visible
                channels and contents are sent back in a series of
                RPL_NAMEREPLY messages with a RPL_ENDOFNAMES to mark
                the end.
    

sshine avatar May 02 '18 07:05 sshine

Hvordan kan vi afgøre, om en given bruger ikke siger så meget men bare læser med på kanalen, eller reelt set ikke bruger kanalen, og bare er der?

MikkelStorgaard avatar May 02 '18 09:05 MikkelStorgaard

@MikkelStorgaard: For at citere den oprindelige problembeskrivelse:

Der skal [...] kun [gemmes] hvorvidt [folk] er online eller offline.

Men du kan afgøre om nogen for nyligt har sagt noget vha. recentlyActive og om de er online ved at læse db/store/on_channel/#diku. (Der er endnu ikke nogen eggspi-kommandoer.)

sshine avatar May 02 '18 10:05 sshine

On Wed, 02 May 2018 10:11:04 +0000, Simon Shine wrote:

@MikkelStorgaard: For at citere den oprindelige problembeskrivelse:

Der skal [...] kun [gemmes] hvorvidt [folk] er online eller offline.

Men du kan afgøre om nogen for nyligt har sagt noget vha. recentlyActive og om de er online ved at læse db/store/on_channel/#diku. (Der er endnu ikke nogen eggspi-kommandoer.)

Og det vil helt klart give mening at lave en samlet eggspi-kommando isActive der laver nogle gode antagelser og bruger data fra begge kilder.

nqpz avatar May 02 '18 10:05 nqpz

Eller gemmer hvornår man sidst har været aktiv i db/store/users/<bruger>/lastactive ved siden af filen lastmsg. Man kan egentlig bruge tidsstemplet på lastmsg, da filen ikke ændres af s//-krogen med mindre det er personen selv der aktiverer den, men det er måske ikke en garanti vi ønsker at fastkode.

sshine avatar May 02 '18 12:05 sshine

Problemet er mestendels løst vha.

  1. Krogene hooks/channel_join/05register_join og hooks/channel_part/05register_part.

  2. Den er nu gjort bevidst om når den selv joiner/parter. Når den gør det, kalder den eggspi/getNamesOnChannel [#kanal], som scanner $CONCIEGGS_IRC_DIR/out baglæns efter sidste gang der er kaldt /NAMES#kanal og printer navnene. Det er fordi /NAMES bliver kørt automatisk når man joiner.

  • [ ] Den registrerer stadig ikke når folk quitter.
  • [ ] Den registrerer stadig ikke når folk skifter navn.
  • [ ] Den fjerner ikke al viden om hvem som er på kanalen, når den selv forlader en kanal.

sshine avatar May 15 '18 08:05 sshine

Så skal det være muligt at spørge concieggs:

concieggs: er der nogle frække fyre på linjen?

svip avatar May 15 '18 09:05 svip

Og

<preben> concieggs: giv mig en ven
<concieggs> preben: sigurd er din nye ven!

nqpz avatar May 15 '18 09:05 nqpz