package LINE::Bot::API::Builder::TemplateMessage;
use strict;
use warnings;
sub new_buttons {
my($class, %args) = @_;
LINE::Bot::API::Builder::TemplateMessage::Buttons->new(%args);
}
sub new_confirm {
my($class, %args) = @_;
LINE::Bot::API::Builder::TemplateMessage::Confirm->new(%args);
}
sub new_carousel {
my($class, %args) = @_;
LINE::Bot::API::Builder::TemplateMessage::Carousel->new(%args);
}
sub new_image_carousel {
my($class, %args) = @_;
LINE::Bot::API::Builder::TemplateMessage::ImageCarousel->new(%args);
}
package LINE::Bot::API::Builder::TemplateMessage::ActionBase {
sub add_action {
my($self, $action) = @_;
push @{ $self->_actions }, $action;
$self;
}
sub add_postback_action {
my($self, %args) = @_;
$self->add_action(+{
type => 'postback',
label => $args{label},
data => $args{data},
text => $args{text},
});
}
sub add_message_action {
my($self, %args) = @_;
$self->add_action(+{
type => 'message',
label => $args{label},
text => $args{text},
});
}
sub add_uri_action {
my($self, %args) = @_;
$self->add_action(+{
type => 'uri',
label => $args{label},
uri => $args{uri},
});
}
}
package LINE::Bot::API::Builder::TemplateMessage::Buttons {
use parent -norequire, 'LINE::Bot::API::Builder::TemplateMessage::ActionBase';
sub new {
my($class, %args) = @_;
bless {
type => 'template',
altText => $args{alt_text},
template => +{
type => 'buttons',
thumbnailImageUrl => $args{image_url},
title => $args{title},
text => $args{text},
actions => $args{actions} // +[],
},
}, $class;
}
sub build {
my($self, ) = @_;
+{ %{ $self } };
}
sub _actions { $_[0]{template}{actions} }
}
package LINE::Bot::API::Builder::TemplateMessage::Confirm {
use parent -norequire, 'LINE::Bot::API::Builder::TemplateMessage::ActionBase';
sub new {
my($class, %args) = @_;
bless {
type => 'template',
altText => $args{alt_text},
template => +{
type => 'confirm',
text => $args{text},
actions => $args{actions} // +[],
},
}, $class;
}
sub build {
my($self, ) = @_;
+{ %{ $self } };
}
sub _actions { $_[0]{template}{actions} }
}
package LINE::Bot::API::Builder::TemplateMessage::Carousel {
sub new {
my($class, %args) = @_;
bless {
type => 'template',
altText => $args{alt_text},
template => +{
type => 'carousel',
columns => $args{columns} // +[],
},
}, $class;
}
sub build {
my($self, ) = @_;
+{ %{ $self } };
}
sub add_column {
my($self, $column) = @_;
push @{ $self->{template}{columns} }, $column;
$self;
}
}
package LINE::Bot::API::Builder::TemplateMessage::ImageCarousel {
sub new {
my($class, %args) = @_;
bless {
type => 'template',
altText => $args{alt_text},
template => +{
type => 'image_carousel',
columns => $args{columns} // +[],
},
}, $class;
}
sub build {
my($self, ) = @_;
+{ %{ $self } };
}
sub add_column {
my($self, $column) = @_;
push @{ $self->{template}{columns} }, $column;
$self;
}
}
package LINE::Bot::API::Builder::TemplateMessage::Column {
use parent -norequire, 'LINE::Bot::API::Builder::TemplateMessage::ActionBase';
sub new {
my($class, %args) = @_;
bless {
thumbnailImageUrl => $args{image_url},
title => $args{title},
text => $args{text},
actions => $args{actions} // +[],
}, $class;
}
sub build {
my($self, ) = @_;
+{ %{ $self } };
}
sub _actions { $_[0]{actions} }
}
package LINE::Bot::API::Builder::TemplateMessage::ImageColumn {
use parent -norequire, 'LINE::Bot::API::Builder::TemplateMessage::ActionBase';
sub new {
my($class, %args) = @_;
bless {
imageUrl => $args{image_url},
action => undef,
}, $class;
}
sub build {
my($self, ) = @_;
+{ %{ $self } };
}
sub add_action {
my($self, $action) = @_;
$self->{action} = $action;
$self;
}
}
1;