- # Fetch their Slack name if we don't already have it.
- my $slack_name;
- if (exists($slack_userid_to_slack_name{$userid})) {
- $slack_name = $slack_userid_to_slack_name{$userid};
- } else {
- $slack_userid_to_slack_name{$userid} = $slack_name;
- $slack_name = get_slack_name($ua, $userid);
- push @slack_mapping_updates, {
- range => "Slack-mapping!B$write_row:B$write_row",
- values => [ [ $slack_name ]]
- };
- $slack_userid_to_slack_name{$userid} = $slack_name;
+ $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::slack_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 {
+ my $start = [Time::HiRes::gettimeofday];
+
+ @log = ();
+ skv_log("Siste sync startet: " . POSIX::ctime(time));
+
+ # Initialize the handles we need for communication.
+ $dbh = DBI->connect("dbi:Pg:dbname=$config::dbname;host=127.0.0.1", $config::dbuser, $config::dbpass, {RaiseError => 1})
+ or die "Could not connect to Postgres: " . DBI->errstr;
+ my $ua = LWP::UserAgent->new('SKVidarLang/1.0');
+ my $token = get_oauth_bearer_token($ua);
+
+ # Find the newest message, and what it is linked to.
+ # TODO: Support more than one, and test better for errors here.
+ my $q = $dbh->prepare('select * from message_sheet_link where channel=? order by ts desc limit 1');
+ $q->execute($config::invitation_channel);
+ my $linkref = $q->fetchrow_hashref;
+ my $invitation_ts = $linkref->{'ts'};
+ my $wanted_sheet_title = $linkref->{'sheet_title'};
+ die "Could not get newest sheet title" if (!defined($wanted_sheet_title));
+
+ my ($tab_name, $tab_id) = get_spreadsheet_with_title($ua, $token, $wanted_sheet_title);
+ if (!defined($tab_name)) {
+ skv_log("Fant ikke noen fane med “$wanted_sheet_title” i navnet; kan ikke synkronisere.\n");
+ sheet_batch_update($ua, $token, [ serialize_skv_log_to_sheet() ]);
+ die;