]> git.sesse.net Git - skvidarsync/commitdiff
Message user to ask them about their user ID in the spreadsheet, if we cannot find...
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Sun, 29 Oct 2023 13:12:55 +0000 (14:12 +0100)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Sun, 29 Oct 2023 13:12:55 +0000 (14:12 +0100)
bin/sync.pl
skvidarlang.sql

index 2bb175bf9bdbb7809dbd4aafecb8945d16d788c2..4bf7085bdec3a4a6f1ababdb06a79df3eb82397a 100644 (file)
@@ -13,7 +13,6 @@ use utf8;
 
 # TODO:
 # - detect moves between groups
-# - message people when they sign up and we can't find them in the spreadsheet
 
 require '../include/config.pm';
 
@@ -265,6 +264,44 @@ sub find_diff {
        return @diffs;
 }
 
+sub possibly_nag_user {
+       my ($dbh, $ua, $userid) = @_;
+
+       # See if we've nagged this user before.
+       my $q = $dbh->prepare('SELECT * FROM users_nagged WHERE userid=?');
+       $q->execute($userid);
+       if (defined($q->fetchrow_hashref)) {
+               return;
+       }
+
+       skv_log("Sender melding til $userid for å spørre om gruppe.");
+       my $response = $ua->post(
+               'https://slack.com/api/conversations.open',
+               Content => JSON::XS::encode_json({ users => [ $userid ] }),
+               Content_type => 'application/json;charset=UTF-8',
+               Authorization => 'Bearer ' . $config::oauth_token
+       );
+       die $response->status_line if !$response->is_success;
+
+       my $im_json = JSON::XS::decode_json($response->decoded_content);
+       die "Something went wrong: " . $response->decoded_content if (!defined($im_json) || !$im_json->{'ok'});
+       my $channel_id = $im_json->{'channel'}{'id'};
+
+       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!";
+
+       $response = $ua->post(
+               'https://slack.com/api/chat.postMessage',
+               Content => JSON::XS::encode_json({ channel => $channel_id, text => $msg }),
+               Content_type => 'application/json;charset=UTF-8',
+               Authorization => 'Bearer ' . $config::oauth_token
+       );
+       my $msg_json = JSON::XS::decode_json($response->decoded_content);
+       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);
+}
+
 sub run {
        @log = ();
        skv_log("Siste sync startet: " . POSIX::ctime(time));
@@ -391,6 +428,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);
                        } elsif ($#candidates == 0) {
                                my $name = $candidates[0];
                                $slack_userid_to_real_name{$userid} = $name;
index 536a1d3e905d914a9083a9a1b7b8f18905f2667b..d52ed9d8b13c3d133a31f78c4c01b543588eeba0 100644 (file)
@@ -22,6 +22,12 @@ CREATE TABLE message_sheet_link (
     PRIMARY KEY (channel, ts)
 );
 
+CREATE TABLE users_nagged (
+    userid VARCHAR NOT NULL,
+    last_nag TIMESTAMP WITH TIME ZONE NOT NULL,
+    PRIMARY KEY (userid)
+);
+
 CREATE VIEW current_reactions AS
   SELECT userid, channel, ts, reaction
     FROM ( SELECT DISTINCT ON (channel, ts, userid, reaction)
@@ -33,5 +39,4 @@ GRANT SELECT,INSERT,DELETE ON TABLE applied TO skvidarlang;
 GRANT SELECT,INSERT ON TABLE reaction_log TO skvidarlang;
 GRANT SELECT ON TABLE current_reactions TO skvidarlang;
 GRANT SELECT,UPDATE,INSERT ON TABLE message_sheet_link TO skvidarlang;
-
-
+GRANT SELECT,INSERT ON TABLE users_nagged TO skvidarlang;