@@ -134,6 +134,18 @@ sub listener_specs {
134134 }
135135 ],
136136 },
137+ {
138+ name => ' vesta_show' ,
139+ method => ' handle_vesta_show' ,
140+ exclusive => 1,
141+ predicate => sub ($, $e ) { $e -> was_targeted && $e -> text =~ / \A vesta show\z /i },
142+ help_entries => [
143+ {
144+ title => ' vesta' ,
145+ text => " *vesta show*: see what's on the board" ,
146+ }
147+ ],
148+ },
137149 {
138150 name => ' vesta_lock' ,
139151 method => ' handle_vesta_lock' ,
@@ -383,6 +395,64 @@ sub _setup_content_server ($self) {
383395 return ;
384396}
385397
398+ my %CHAR_FOR = (
399+ 0 => " \N{IDEOGRAPHIC SPACE} " ,
400+ (map { $_ => chr (0xFF20 + $_ ) } ( 1 .. 26)), # A .. Z
401+ (map { $_ => chr (0xFF10 + $_ - 26) } (27 .. 35)), # 1 .. 9
402+ 36 => " \x{FF10} " , # Zero
403+
404+ 40 => " \N{FULLWIDTH DOLLAR SIGN} " ,
405+ 41 => " \N{FULLWIDTH LEFT PARENTHESIS} " , # '(',
406+ 42 => " \N{FULLWIDTH RIGHT PARENTHESIS} " , # ')',
407+
408+ 44 => " \N{FULLWIDTH HYPHEN-MINUS} " , # '-',
409+
410+ 46 => " \N{FULLWIDTH PLUS SIGN} " , # '+',
411+ 47 => " \N{FULLWIDTH AMPERSAND} " , # '&',
412+ 48 => " \N{FULLWIDTH EQUALS SIGN} " , # '=',
413+ 49 => " \N{FULLWIDTH SEMICOLON} " , # ';',
414+ 37 => " \N{FULLWIDTH EXCLAMATION MARK} " , # '!',
415+ 38 => " \N{FULLWIDTH COMMERCIAL AT} " , # '@',
416+ 39 => " \N{FULLWIDTH NUMBER SIGN} " , # '#',
417+ 50 => " \N{FULLWIDTH COLON} " , # ':',
418+
419+ 52 => " \N{FULLWIDTH APOSTROPHE} " , # "'",
420+ 53 => " \N{FULLWIDTH QUOTATION MARK} " ,
421+ 54 => " \N{FULLWIDTH PERCENT SIGN} " ,
422+ 55 => " \N{FULLWIDTH COMMA} " ,
423+ 56 => " \N{FULLWIDTH FULL STOP} " ,
424+
425+ 59 => " \N{FULLWIDTH SOLIDUS} " ,
426+ 60 => " \N{FULLWIDTH QUOTATION MARK} " ,
427+ 62 => " ° " , # no full-width variant available
428+ 63 => ' 🟥' , # here and below: the colors
429+ 64 => ' 🟧' ,
430+ 65 => ' 🟨' ,
431+ 66 => ' 🟩' ,
432+ 67 => ' 🟦' ,
433+ 68 => ' 🟪' ,
434+ 69 => ' ⬜️' ,
435+ );
436+
437+ sub handle_vesta_show ($self , $event ) {
438+ $event -> mark_handled;
439+
440+ my $curr = $self -> _current_characters;
441+
442+ unless ($curr ) {
443+ $event -> reply(" Sorry, I don't know what's on the board!" );
444+ return ;
445+ }
446+
447+ my @lines ;
448+ for my $line (@$curr ) {
449+ push @lines ,
450+ join q{ } , map {; $CHAR_FOR {$_ } // " \N{IDEOGRAPHIC SPACE} " } @$line ;
451+ }
452+
453+ $event -> reply(" Currently on the board:\n " . join qq{ \n } , @lines );
454+ }
455+
386456sub handle_vesta_lock ($self , $event ) {
387457 $event -> mark_handled;
388458
0 commit comments