-sub load_class {
- my ($self,$class) = @_;
-
- my @subs = eval "$class->meta->get_method_list";
- for my $c (@subs){
- my $attr = eval "$class->meta->get_method('$c')->attributes";
- if (@$attr){
- print "Command: $c ";
- my %c = (channels => ['all']);
- my @aliases;
- for (@{$attr}){
- #Parse attributes, from Attribute::Handlers
- my ($attr, $data) = /^([a-z_]\w*)(?:[(](.*)[)])?$/is or next;
- my $evaled = eval("package Temp; no warnings;
- local \$SIG{__WARN__}=sub{die}; [$data]");
- $evaled = ($evaled && $data =~ /^\s*\[/) ? [$evaled]
- : ($evaled) ? $evaled : [$data];
-
- given ($attr){
- when ('Alias'){
- @aliases = @$evaled;
- }
- default {
- $c{lc $attr} = $evaled;
- }
- }
- }
- push @aliases, $c;
- my $f = eval "\\&${class}::$c";
- $c{func} = $f;
- for my $a (@aliases){
- $c{name} = $a;
- my $co = NDIRC::Command->new(\%c);
- $self->commands->{$a} = $co;
- }
- }
+sub command ($$$) {
+ my ($c,$a,$class) = @_;
+ my %c = %{$a};
+ my @aliases;
+ if (exists $c{alias}){
+ @aliases = @{$c{alias}} if ref $c{alias} eq 'ARRAY';
+ push @aliases, $c{alias} if ref $c{alias} eq '';
+ }
+ push @aliases, $c;
+ say "Command: (@aliases)";
+ for my $a (@aliases){
+ $c{name} = $a;
+ my $co = $class->new_object(\%c);
+ $DISP->commands->{$a} = $co;