]> ruin.nu Git - NDIRC.git/commitdiff
Sms send and status commands
authorMichael Andreen <harv@ruin.nu>
Sun, 31 May 2009 21:40:55 +0000 (23:40 +0200)
committerMichael Andreen <harv@ruin.nu>
Tue, 2 Jun 2009 22:33:26 +0000 (00:33 +0200)
Commands/SMS.pm [new file with mode: 0644]
database/roles.sql
ndawn.pl

diff --git a/Commands/SMS.pm b/Commands/SMS.pm
new file mode 100644 (file)
index 0000000..1b28dc7
--- /dev/null
@@ -0,0 +1,90 @@
+#**************************************************************************
+#   Copyright (C) 2009 by Michael Andreen <harvATruinDOTnu>               *
+#                                                                         *
+#   This program is free software; you can redistribute it and/or modify  *
+#   it under the terms of the GNU General Public License as published by  *
+#   the Free Software Foundation; either version 2 of the License, or     *
+#   (at your option) any later version.                                   *
+#                                                                         *
+#   This program is distributed in the hope that it will be useful,       *
+#   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
+#   GNU General Public License for more details.                          *
+#                                                                         *
+#   You should have received a copy of the GNU General Public License     *
+#   along with this program; if not, write to the                         *
+#   Free Software Foundation, Inc.,                                       *
+#   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.         *
+#**************************************************************************/
+
+package NDIRC::Commands::SMS;
+
+use strict;
+use warnings;
+use feature ':5.10';
+
+use Moose;
+use MooseX::MethodAttributes;
+
+
+sub sendsms
+       : Help(.sendsms <username or number> message | number has to be an international number, like +44234234562 for a uk number or +1234528234 for a north american number)
+       : ACL(irc_sendsms)
+       : Type(member)
+{
+       my ($self,$c,$msg) = @_;
+       my ($number,$message) = $msg =~ /^(\S+) (.+)$/ or die 'ARGS';
+       my $dbh = $c->model;
+
+       if (length $message > 140){
+               $c->reply("Message is too long");
+               return;
+       }
+       if ($number =~ /^\+([1-9]\d+)$/){
+               $number = $1;
+       }else{
+               my ($sms) = $dbh->selectrow_array(q{SELECT sms FROM users WHERE username ilike $1}
+                       ,undef,$number);
+               $sms //= 'No number, or invalid user';
+               if ($sms =~ /^\+([1-9]\d+)$/){
+                       $number = $1;
+               }else{
+                       $c->reply("User $number has number '$sms' which is not a valid international number");
+                       return;
+               }
+       }
+       my $sms = $dbh->prepare(q{
+INSERT INTO sms (uid,number,message)
+VALUES((SELECT uid FROM users WHERE hostmask ilike $1),$2,$3)
+RETURNING id
+               });
+       $sms->execute($c->host,$number,$message);
+       my ($id) = $sms->fetchrow_array;
+       $c->reply("Message added to queue, you can see the status with: .smsstatus $id");
+}
+
+sub smsstatus
+       : Help(.smsstatus smsid | Gives information about a given sms)
+       : ACL(irc_smsstatus)
+       : Type(member)
+{
+       my ($self,$c,$msg) = @_;
+       my ($id) = $msg =~ /(\d+)/ or die 'ARGS';
+       my $dbh = $c->model;
+
+       my $sms = $dbh->selectrow_hashref(q{
+SELECT s.id, u.username, s.number, s.status, s.cost
+       ,s.time AT TIME ZONE 'GMT' AS time
+FROM sms s
+       JOIN users u USING (uid)
+WHERE id = $1
+               }, undef, $id);
+
+       if($sms->{id}){
+               $c->reply("SMS <b>$sms->{id}</b> was sent by <b>$sms->{username}</b> to <b>$sms->{number}</b> cost: <b>$sms->{cost}</b>. Last status at <b>$sms->{time}</b>: $sms->{status}");
+       }else{
+               $c->reply("Could not find any sms with id: $id");
+       }
+}
+
+1;
index 752672369ba1be03abae7514949b1279ffae8520..eafc00dfce8074f54ef8f72dded2f87a5da21ac3 100644 (file)
@@ -34,6 +34,8 @@ INSERT INTO roles VALUES('irc_settype');
 INSERT INTO roles VALUES('irc_calltake');
 INSERT INTO roles VALUES('irc_setcalc');
 INSERT INTO roles VALUES('irc_getcalc');
+INSERT INTO roles VALUES('irc_sendsms');
+INSERT INTO roles VALUES('irc_smsstatus');
 
 INSERT INTO group_roles (gid,role) VALUES(1,'irc_p_nick');
 INSERT INTO group_roles (gid,role) VALUES(1,'irc_p_intel');
@@ -69,6 +71,8 @@ INSERT INTO group_roles (gid,role) VALUES(1,'irc_settype');
 INSERT INTO group_roles (gid,role) VALUES(1,'irc_calltake');
 INSERT INTO group_roles (gid,role) VALUES(1,'irc_setcalc');
 INSERT INTO group_roles (gid,role) VALUES(1,'irc_getcalc');
+INSERT INTO group_roles (gid,role) VALUES(1,'irc_sendsms');
+INSERT INTO group_roles (gid,role) VALUES(1,'irc_smsstatus');
 
 INSERT INTO group_roles (gid,role) VALUES(2,'irc_gs');
 INSERT INTO group_roles (gid,role) VALUES(2,'irc_scan');
@@ -106,6 +110,8 @@ INSERT INTO group_roles (gid,role) VALUES(3,'irc_settype');
 INSERT INTO group_roles (gid,role) VALUES(3,'irc_calltake');
 INSERT INTO group_roles (gid,role) VALUES(3,'irc_setcalc');
 INSERT INTO group_roles (gid,role) VALUES(3,'irc_getcalc');
+INSERT INTO group_roles (gid,role) VALUES(3,'irc_sendsms');
+INSERT INTO group_roles (gid,role) VALUES(3,'irc_smsstatus');
 
 INSERT INTO group_roles (gid,role) VALUES(4,'irc_points_others');
 INSERT INTO group_roles (gid,role) VALUES(4,'irc_a');
@@ -130,6 +136,8 @@ INSERT INTO group_roles (gid,role) VALUES(6,'irc_settype');
 INSERT INTO group_roles (gid,role) VALUES(6,'irc_calltake');
 INSERT INTO group_roles (gid,role) VALUES(6,'irc_setcalc');
 INSERT INTO group_roles (gid,role) VALUES(6,'irc_getcalc');
+INSERT INTO group_roles (gid,role) VALUES(6,'irc_sendsms');
+INSERT INTO group_roles (gid,role) VALUES(6,'irc_smsstatus');
 
 INSERT INTO group_roles (gid,role) VALUES(8,'irc_scanreqs');
 INSERT INTO group_roles (gid,role) VALUES(8,'irc_anonscan');
index 7923e2a8cba97e0aa1c022a852590b7f2bed3371..b8d35bbd3c451094102097a4b0bdfdfd77100c61 100644 (file)
--- a/ndawn.pl
+++ b/ndawn.pl
@@ -55,7 +55,7 @@ my $TICK = $DBH->selectrow_array('SELECT tick()');
 
 my $disp = new NDIRC::Dispatcher;
 
-$disp->load('Basic','PA','Channel','Quotes','Members','Usermgm','Intel','Scans');
+$disp->load('Basic','SMS');
 
 $ND::scanchan = '#testarmer';
 $ND::defchan = '#testarlite';