|
@@ -0,0 +1,176 @@
|
|
|
+package MumbleBot::Command::Pushover;
|
|
|
+
|
|
|
+use strictures 2;
|
|
|
+
|
|
|
+use Moo;
|
|
|
+
|
|
|
+with 'MumbleBot::Command';
|
|
|
+
|
|
|
+use HTML::Table;
|
|
|
+use Try::Tiny;
|
|
|
+
|
|
|
+around BUILDARGS => sub {
|
|
|
+ my ($orig, $class, %args) = @_;
|
|
|
+
|
|
|
+ $args{name} = 'pushover';
|
|
|
+
|
|
|
+ return $class->$orig(%args);
|
|
|
+};
|
|
|
+
|
|
|
+sub execute {
|
|
|
+ my ($self, $channel, $sender, @args) = @_;
|
|
|
+
|
|
|
+ unless (ref $sender eq 'MumbleBot::State::RegisteredUser') {
|
|
|
+ $sender->send_message(
|
|
|
+ "You must be a registered user to run this command.",
|
|
|
+ );
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ unless (@args) {
|
|
|
+ $sender->send_message(
|
|
|
+ "Missing arguments, see '/mb help pushover' for more info.",
|
|
|
+ );
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ my $command = shift @args;
|
|
|
+ if ($command eq 'add') {
|
|
|
+ $self->_add($sender, @args);
|
|
|
+ }
|
|
|
+ elsif ($command eq 'remove') {
|
|
|
+ $self->_remove($sender, @args);
|
|
|
+ }
|
|
|
+ elsif ($command eq 'list') {
|
|
|
+ $self->_list($sender, @args);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ $sender->send_message(
|
|
|
+ "Unrecognised argument '$command', see"
|
|
|
+ . "'/mb help pushover' for more info.",
|
|
|
+ );
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+sub help_text {
|
|
|
+ my $self = shift;
|
|
|
+}
|
|
|
+
|
|
|
+sub _add {
|
|
|
+ my ($self, $sender, $name, $key) = @_;
|
|
|
+
|
|
|
+ unless ($name) {
|
|
|
+ $sender->send_message(
|
|
|
+ "Missing device name, see '/mb help pushover for more info.",
|
|
|
+ );
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ unless ($key) {
|
|
|
+ $sender->send_message(
|
|
|
+ "Missing device key, see '/mb help pushover for more info.",
|
|
|
+ );
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (length $name > 128) {
|
|
|
+ $sender->send_message(
|
|
|
+ "Device name too long, max length is 128 characters.",
|
|
|
+ );
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($key !~ /^[0-9a-z]{30}$/i) {
|
|
|
+ $sender->send_message(
|
|
|
+ "Device key is invalid.",
|
|
|
+ );
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($self->_device_exists($sender, $name)) {
|
|
|
+ $sender->send_message(
|
|
|
+ "You already have a device added under '$name'.",
|
|
|
+ );
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ $sender->add_pushover_device($name, $key);
|
|
|
+ $sender->send_message(
|
|
|
+ "Device added successfully.",
|
|
|
+ );
|
|
|
+ }
|
|
|
+ catch {
|
|
|
+ $sender->send_message(
|
|
|
+ "Error adding device: $_",
|
|
|
+ );
|
|
|
+ };
|
|
|
+}
|
|
|
+
|
|
|
+sub _remove {
|
|
|
+ my ($self, $sender, $name) = @_;
|
|
|
+
|
|
|
+ unless ($name) {
|
|
|
+ $sender->send_message(
|
|
|
+ "Missing device name, see '/mb help pushover for more info.",
|
|
|
+ );
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!$self->_device_exists($sender, $name)) {
|
|
|
+ $sender->send_message(
|
|
|
+ "No devices found with name '$name'.",
|
|
|
+ );
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ $sender->remove_pushover_device($name);
|
|
|
+ $sender->send_message(
|
|
|
+ "Device removed successfully",
|
|
|
+ );
|
|
|
+ }
|
|
|
+ catch {
|
|
|
+ $sender->send_message(
|
|
|
+ "Error removing device: $_",
|
|
|
+ );
|
|
|
+ };
|
|
|
+}
|
|
|
+
|
|
|
+sub _list {
|
|
|
+ my ($self, $sender) = @_;
|
|
|
+
|
|
|
+ my @devices = @{ $sender->pushover_devices };
|
|
|
+
|
|
|
+ unless (@devices) {
|
|
|
+ $sender->send_message(
|
|
|
+ "You have no pushover devices.<br><br>"
|
|
|
+ . "See '/mb pushover add' to add some.",
|
|
|
+ );
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ my $table = HTML::Table->new(-head => ['Name', 'Key']);
|
|
|
+ foreach my $device (@devices) {
|
|
|
+ $table->addRow(
|
|
|
+ $device->{name},
|
|
|
+ $device->{key},
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ $sender->send_message(
|
|
|
+ "Your devices:<br>" . $table->getTable,
|
|
|
+ );
|
|
|
+}
|
|
|
+
|
|
|
+sub _device_exists {
|
|
|
+ my ($self, $sender, $name) = @_;
|
|
|
+
|
|
|
+ my @devices = @{ $sender->pushover_devices };
|
|
|
+ foreach my $device (@devices) {
|
|
|
+ return 1 if $device->{name} eq $name;
|
|
|
+ }
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+1;
|