+ $write_row = $cur_row++;
+ $slack_userid_to_row{$userid} = $write_row;
+ push @slack_mapping_updates, {
+ range => "Slack-mapping!A$write_row:A$write_row",
+ values => [ [ $userid ]]
+ };
+ }
+
+ # 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;
+ }
+
+ if (exists($seen_names{sort_key($slack_name)})) {
+ # The name exists exactly, once or more, so it's a direct match and we ignore any fuzz.
+ $slack_userid_to_real_name{$userid} = $slack_name;
+ push @slack_mapping_updates, {
+ range => "Slack-mapping!C$write_row:C$write_row",
+ values => [ [ $slack_name ]]
+ };
+ } else {
+ # Do a search through all the available names in the sheet to find an obvious(ish) match.
+ my @candidates = ();
+ my $main_sheet_rows = $main_sheet_json->{'data'}[0]{'rowData'};
+ $start = [Time::HiRes::gettimeofday];
+ my @ap = map { sort_key($_) } split /\s+/, $slack_name; # Precalc for matches_name().
+ for my $row (@$main_sheet_rows) {
+ for my $val (@{$row->{'values'}}) {
+ my $name = get_spreadsheet_name($val);
+ if (defined($name) && matches_name($slack_name, $name, \@ap)) {
+ push @candidates, $name;
+ }
+ }
+ }
+ log_timing($start, "Fuzzy-searching for Slack name $slack_name");
+ 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, $invitation_ts, undef, \%slack_userid_to_slack_name);
+ } elsif ($#candidates == 0) {
+ my $name = $candidates[0];
+ $slack_userid_to_real_name{$userid} = $name;
+ push @slack_mapping_updates, {
+ range => "Slack-mapping!C$write_row:C$write_row",
+ values => [ [ $name ]]
+ };
+ } else {
+ skv_log("$slack_name ($userid) er pƄmeldt pƄ Slack, men hadde flere fuzzy-matcher; vet ikke hvilket regneark-navn som skal brukes.");
+ }