]> git.sesse.net Git - skvidarsync/commitdiff
Tell users what group they are part of when they sign up.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Fri, 10 Nov 2023 16:12:51 +0000 (17:12 +0100)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Fri, 10 Nov 2023 16:12:51 +0000 (17:12 +0100)
bin/sync.pl
skvidarlang.sql

index 43518177ecb5a2fa31a2b42fd9f8dfa15082b110..fbbe7d21eb405b960d3992c0c8afa3a29893499e 100644 (file)
@@ -422,18 +422,27 @@ sub find_diff {
 }
 
 sub possibly_nag_user {
-       my ($dbh, $ua, $userid) = @_;
+       my ($dbh, $ua, $userid, $invitation_ts, $group) = @_;
 
        # See if we've nagged this user before.
-       my $q = $dbh->prepare('SELECT * FROM users_nagged WHERE userid=?');
-       $q->execute($userid);
+       my $q = $dbh->prepare('SELECT * FROM users_nagged WHERE userid=? AND ts=?');
+       $q->execute($userid, $invitation_ts);
        if (defined($q->fetchrow_hashref)) {
                return;
        }
 
-       my $msg = "Hei! Du meldte deg akkurat på trening, men vi klarer ikke å finne deg i en gruppe i regnearket. For at det skal være enklere for trenerne, ønsker vi gjerne at du går inn på https://regneark.skvidar.run/ og skriver deg inn der med samme navn som du bruker på Slack. Om du er usikker på hvilken gruppe som passer for deg, ta gjerne kontakt med en trener. Velkommen på trening og til klubben!";
+       my $msg;
+       if (!defined($group)) {
+               $msg = "Hei! Du meldte deg akkurat på trening, men vi klarer ikke å finne deg i en gruppe i regnearket. For at det skal være enklere for trenerne, ønsker vi gjerne at du går inn på https://regneark.skvidar.run/ og skriver deg inn der med samme navn som du bruker på Slack. Om du er usikker på hvilken gruppe som passer for deg, ta gjerne kontakt med en trener. Velkommen på trening og til klubben!";
+               skv_log("Sender Slack-melding til $userid for å spørre om gruppe.");
+       } elsif ($group eq '(flere grupper)') {
+               $msg = "Hei! Du meldte deg akkurat på trening, men du ser ut til å stå i flere forskjellige grupper i regnearket. For at det skal være enklere for trenerne, ønsker vi gjerne at du går inn på https://regneark.skvidar.run/ og retter der. Om du er usikker på hvilken gruppe som passer for deg, ta gjerne kontakt med en trener. Velkommen på trening!";
+               skv_log("Sender Slack-melding til $userid for å spørre om gruppe.");
+       } else {
+               $msg = "Hei! Du er påmeldt gruppe *$group*. Om dette er feil, gå gjerne inn og endre på https://regneark.skvidar.run/. Vi gleder oss til å se deg på trening!";
+               skv_log("Sender Slack-melding om at $userid er i gruppe $group.");
+       }
 
-       skv_log("Sender melding til $userid for å spørre om gruppe.");
        my $content = {
                channel => $config::invitation_channel,
                user => $userid,
@@ -452,7 +461,7 @@ sub possibly_nag_user {
        die "Something went wrong: " . $response->decoded_content if (!defined($msg_json) || !$msg_json->{'ok'});
 
        # Mark that we've sent the message, so it won't happen again.
-       $dbh->do('INSERT INTO users_nagged (userid, last_nag) VALUES (?, CURRENT_TIMESTAMP)', undef, $userid);
+       $dbh->do('INSERT INTO users_nagged (userid, ts, last_nag) VALUES (?, ?, CURRENT_TIMESTAMP)', undef, $userid, $invitation_ts);
 }
 
 sub db_connect {
@@ -627,7 +636,7 @@ sub run {
                        }
                        if ($#candidates == -1) {
                                skv_log("$slack_name ($userid) er påmeldt på Slack, men fant ikke et regneark-navn for dem.");
-                               possibly_nag_user($dbh, $ua, $userid);
+                               possibly_nag_user($dbh, $ua, $userid, $invitation_ts, undef);
                        } elsif ($#candidates == 0) {
                                my $name = $candidates[0];
                                $slack_userid_to_real_name{$userid} = $name;
@@ -662,6 +671,15 @@ sub run {
                skv_log("$name er påmeldt flere steder på Slack; vet ikke hvilken som skal brukes.");
        }
 
+       # ...and possibly send welcome messages to remind them of groups.
+       for my $userid (@attending_userids) {
+               my $real_name = $slack_userid_to_real_name{$userid};
+               next if (!defined($real_name));
+               my $group = $assignments{$real_name};
+               next if (!defined($group));
+               possibly_nag_user($dbh, $ua, $userid, $invitation_ts, $group);
+       }
+
        # Find the list of names to mark yellow.
        my %want_colors = ();
        my $main_sheet_rows = $main_sheet_json->{'sheets'}[0]{'data'}[0]{'rowData'};
index e1249c13a978f4bda311d9189e3f5d25984a976f..5f0db3b8ec73e6a450f2b6bcda5222ebaa2b8bfc 100644 (file)
@@ -25,8 +25,9 @@ CREATE TABLE message_sheet_link (
 
 CREATE TABLE users_nagged (
     userid VARCHAR NOT NULL,
+    ts VARCHAR NOT NULL,  -- Of the invitation.
     last_nag TIMESTAMP WITH TIME ZONE NOT NULL,
-    PRIMARY KEY (userid)
+    PRIMARY KEY (userid, ts)
 );
 
 CREATE TABLE group_membership_history (