From 4d95ff778ef37b0877d0f1f31435c420c02a3cee Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Sun, 29 Oct 2023 14:12:55 +0100 Subject: [PATCH] Message user to ask them about their user ID in the spreadsheet, if we cannot find them. --- bin/sync.pl | 40 +++++++++++++++++++++++++++++++++++++++- skvidarlang.sql | 9 +++++++-- 2 files changed, 46 insertions(+), 3 deletions(-) diff --git a/bin/sync.pl b/bin/sync.pl index 2bb175b..4bf7085 100644 --- a/bin/sync.pl +++ b/bin/sync.pl @@ -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; diff --git a/skvidarlang.sql b/skvidarlang.sql index 536a1d3..d52ed9d 100644 --- a/skvidarlang.sql +++ b/skvidarlang.sql @@ -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; -- 2.39.2