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 )