+sub log_timing {
+ my ($start, $msg) = @_;
+ my $elapsed = Time::HiRes::tv_interval($start);
+ printf "%s: %.0f ms.\n", $msg, 1e3 * $elapsed;
+}
+
"iat" => $now,
});
my $jws_token = Crypt::JWT::encode_jwt(payload=>$jwt, alg=>'RS256', key=>\$config::jwt_key->{'private_key'});
"iat" => $now,
});
my $jws_token = Crypt::JWT::encode_jwt(payload=>$jwt, alg=>'RS256', key=>\$config::jwt_key->{'private_key'});
my $response = $ua->post('https://www.googleapis.com/oauth2/v4/token', [
'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer',
'assertion' => $jws_token ]);
my $response = $ua->post('https://www.googleapis.com/oauth2/v4/token', [
'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer',
'assertion' => $jws_token ]);
my $req = HTTP::Request->new('GET', 'https://slack.com/api/users.info?user=' . $userid, [
'Authorization' => 'Bearer ' . $config::slack_oauth_token
]);
my $req = HTTP::Request->new('GET', 'https://slack.com/api/users.info?user=' . $userid, [
'Authorization' => 'Bearer ' . $config::slack_oauth_token
]);
die $response->status_line if !$response->is_success;
my $user_json = JSON::XS::decode_json($response->decoded_content);
die $response->status_line if !$response->is_success;
my $user_json = JSON::XS::decode_json($response->decoded_content);
my $response = $ua->post(
'https://sheets.googleapis.com/v4/spreadsheets/' . $config::sheet_id . ':batchUpdate?key=' . $config::gsheets_api_key,
Content => JSON::XS::encode_json($update),
Content_type => 'application/json;charset=UTF-8',
Authorization => 'Bearer ' . $token
);
my $response = $ua->post(
'https://sheets.googleapis.com/v4/spreadsheets/' . $config::sheet_id . ':batchUpdate?key=' . $config::gsheets_api_key,
Content => JSON::XS::encode_json($update),
Content_type => 'application/json;charset=UTF-8',
Authorization => 'Bearer ' . $token
);
my ($ua, $token, $wanted_sheet_title) = @_;
# See if we have any spreadsheets that match this title.
my ($ua, $token, $wanted_sheet_title) = @_;
# See if we have any spreadsheets that match this title.
my $response = $ua->get('https://sheets.googleapis.com/v4/spreadsheets/' . $config::sheet_id . '?key=' . $config::gsheets_api_key . '&fields=sheets/properties',
Authorization => 'Bearer ' . $token
);
my $response = $ua->get('https://sheets.googleapis.com/v4/spreadsheets/' . $config::sheet_id . '?key=' . $config::gsheets_api_key . '&fields=sheets/properties',
Authorization => 'Bearer ' . $token
);
my $sheets_json = JSON::XS::decode_json($response->decoded_content);
my ($tab_name, $tab_id);
for my $sheet (@{$sheets_json->{'sheets'}}) {
my $sheets_json = JSON::XS::decode_json($response->decoded_content);
my ($tab_name, $tab_id);
for my $sheet (@{$sheets_json->{'sheets'}}) {
my $response = $ua->post(
'https://slack.com/api/chat.postEphemeral',
Content => JSON::XS::encode_json($content),
Content_type => 'application/json;charset=UTF-8',
Authorization => 'Bearer ' . $config::slack_oauth_token
);
my $response = $ua->post(
'https://slack.com/api/chat.postEphemeral',
Content => JSON::XS::encode_json($content),
Content_type => 'application/json;charset=UTF-8',
Authorization => 'Bearer ' . $config::slack_oauth_token
);
die $response->status_line if !$response->is_success;
my $msg_json = JSON::XS::decode_json($response->decoded_content);
die "Something went wrong: " . $response->decoded_content if (!defined($msg_json) || !$msg_json->{'ok'});
die $response->status_line if !$response->is_success;
my $msg_json = JSON::XS::decode_json($response->decoded_content);
die "Something went wrong: " . $response->decoded_content if (!defined($msg_json) || !$msg_json->{'ok'});
my $response = $ua->get('https://sheets.googleapis.com/v4/spreadsheets/' . $config::sheet_id . '?key=' . $config::gsheets_api_key . '&ranges=' . $tab_name . '!A4:Z5000&fields=sheets/data/rowData/values/userEnteredValue',
Authorization => 'Bearer ' . $token
);
my $response = $ua->get('https://sheets.googleapis.com/v4/spreadsheets/' . $config::sheet_id . '?key=' . $config::gsheets_api_key . '&ranges=' . $tab_name . '!A4:Z5000&fields=sheets/data/rowData/values/userEnteredValue',
Authorization => 'Bearer ' . $token
);
my $main_sheet_json = JSON::XS::decode_json($response->decoded_content);
# Update the list of groups we've seen people in.
my $main_sheet_json = JSON::XS::decode_json($response->decoded_content);
# Update the list of groups we've seen people in.
my %slack_userid_to_real_name = ();
my %slack_userid_to_slack_name = ();
my %slack_userid_to_row = ();
my %slack_userid_to_real_name = ();
my %slack_userid_to_slack_name = ();
my %slack_userid_to_row = ();
$response = $ua->get('https://sheets.googleapis.com/v4/spreadsheets/' . $config::sheet_id . '?key=' . $config::gsheets_api_key . '&ranges=Slack-mapping!A5:C5000&fields=sheets/data/rowData/values/userEnteredValue',
Authorization => 'Bearer ' . $token
);
$response = $ua->get('https://sheets.googleapis.com/v4/spreadsheets/' . $config::sheet_id . '?key=' . $config::gsheets_api_key . '&ranges=Slack-mapping!A5:C5000&fields=sheets/data/rowData/values/userEnteredValue',
Authorization => 'Bearer ' . $token
);
my $mapping_sheet_json = JSON::XS::decode_json($response->decoded_content);
my $mapping_sheet_rows = $mapping_sheet_json->{'sheets'}[0]{'data'}[0]{'rowData'};
my $cur_row = 5;
my $mapping_sheet_json = JSON::XS::decode_json($response->decoded_content);
my $mapping_sheet_rows = $mapping_sheet_json->{'sheets'}[0]{'data'}[0]{'rowData'};
my $cur_row = 5;
valueInputOption => 'USER_ENTERED',
data => \@slack_mapping_updates
};
valueInputOption => 'USER_ENTERED',
data => \@slack_mapping_updates
};
$response = $ua->post(
'https://sheets.googleapis.com/v4/spreadsheets/' . $config::sheet_id . '/values:batchUpdate?key=' . $config::gsheets_api_key,
Content => JSON::XS::encode_json($update),
Content_type => 'application/json;charset=UTF-8',
Authorization => 'Bearer ' . $token
);
$response = $ua->post(
'https://sheets.googleapis.com/v4/spreadsheets/' . $config::sheet_id . '/values:batchUpdate?key=' . $config::gsheets_api_key,
Content => JSON::XS::encode_json($update),
Content_type => 'application/json;charset=UTF-8',
Authorization => 'Bearer ' . $token
);
die $response->decoded_content if (!$response->is_success);
# Now that we have Slack names, we can log double-reacters.
die $response->decoded_content if (!$response->is_success);
# Now that we have Slack names, we can log double-reacters.