App-RoboBot

 view release on metacpan or  search on metacpan

lib/App/RoboBot/Plugin/Social/Skills.pm  view on Meta::CPAN


    my @related;

    foreach my $name (@skills) {
        # Lookup the related skill first to get the properly-capitalized version
        # of the name, and to ensure it's a real skill.
        my $rel = $self->bot->config->db->do(q{
            select skill_id, name
            from skills_skills
            where lower(name) = lower(?)
        }, $name);

        unless ($rel && $rel->next) {
            $message->response->raise('There is currently no skill for %s. Please check the name and try again.', $name);
            next;
        }

        # Blindly ignore any duplicate errors.
        my $res = $self->bot->config->db->do(q{
            insert into skills_related (skill_id, related_id) values
            ( ?, ? )
        }, $skill->{'skill_id'}, $rel->{'skill_id'});

        push(@related, $rel->{'name'});
    }

    if (@related > 0) {
        $message->response->push(sprintf('%s has been given the related skill(s): %s', $skill->{'name'}, join(', ', @related)));
    }

    return;
}

sub describe_skill {
    my ($self, $message, $command, $rpl, $skill, @args) = @_;

    unless (defined $skill && $skill =~ m{\w}) {
        $message->response->raise('You must provide a skill name.');
        return;
    }

    my $desc = join(' ', grep { defined $_ && $_ =~ m{\w+} } @args);

    unless (defined $desc && length($desc) > 0) {
        $message->response->raise('You must provide a description of the skill.');
        return;
    }

    my $res = $self->bot->config->db->do(q{
        update skills_skills
        set description = ?
        where lower(?) = lower(name)
        returning *
    }, $desc, $skill);

    unless ($res && $res->next) {
        $message->response->raise('Could not add a description to the skill "%s". Please make sure the skill exists and try again.', $skill);
        return;
    }

    $message->response->push(sprintf('Description for %s has been updated.', $skill));
    return;
}

sub skill_dontknow {
    my ($self, $message, $command, $rpl, @skills) = @_;

    unless (@skills) {
        $message->response->push('Must supply skill name(s) to remove.');
        return;
    }

    foreach my $skill (@skills) {
        next unless defined $skill && $skill =~ m{\w+};

        my $res = $self->bot->config->db->do(q{
            delete from skills_nicks
            where nick_id = ?
                and skill_id = ( select skill_id
                                 from skills_skills
                                 where lower(?) = lower(name) )
        }, $message->sender->id, $skill);

        unless ($res && $res->count > 0) {
            $message->response->push(sprintf("You didn't know %s before.", $skill));
            next;
        }

        $message->response->push(sprintf("You have now forgotten %s.", $skill));
    }

    return;
}

sub skill_know {
    my ($self, $message, $command, $rpl, $skill_name, $skill_level) = @_;

    unless (defined $skill_name && $skill_name =~ m{\w+}) {
        my @skills = $self->show_user_skills($message, $message->sender->id);

        if (@skills < 1) {
            $message->response->push('You have no registered skills.');
            return;
        } else {
            $message->response->push('You have the following skills registered:', @skills);
            return;
        }
    }

    my ($res, $level_id, $level_name);

    # We have a skill name (and unknown skills will be added automatically), but we need
    # to figure out what skill level they want to register at. Provided, but invalid,
    # skill levels are an error, unprovided levels default to the lowest by sort_order.
    if (defined $skill_level && $skill_level =~ m{.+}) {
        no warnings 'numeric';

        $res = $self->bot->config->db->do(q{
            select level_id, name
            from skills_levels
            where level_id = ? or lower(name) = lower(?)



( run in 1.277 second using v1.01-cache-2.11-cpan-39bf76dae61 )