Advertisement
Guest User

Untitled

a guest
Aug 7th, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 6.18 KB | None | 0 0
  1. use DBI;
  2. use POSIX;
  3. $dsn = "DBI:mysql:database=db:host=localhost:port=3006";
  4. $user = "user";
  5. $pass = "pass";
  6. $db = DBI->connect($dsn,$user,$pass);
  7. $db->{RaiseError} = 1;
  8. $debug = "";
  9. sub getHelp {
  10.     $what = shift;
  11.     $ret = "";
  12.     $h = "cinfo-change your info.|cname-change name on account|cnick-change your nickname|fortune-get a fortune|info-get usrs info (use like info userid)|lusers-list usrs and id|msg-msg usr (use like msg userid text)|status-get status (use like status id)|recent-get most recent update|help-alone lists cmds, w/ cmd name gives help (i.e. help help)|menu-lists cmds|follow-follow user (use like follow id)|unfollow-unfollow user (use like unfollow id)";
  13.     %list = split /[\-\|]/,$h;
  14.     if(exists($list[$what])) {
  15.         $ret = $list[$what];
  16.     } else {
  17.         $ret = "The command you provided, $what, was not found.";
  18.     }
  19.     return $ret;
  20. }
  21.  
  22. sub getInfo {
  23.     our $db;
  24.     $ret = "";
  25.     $id = shift;
  26.     $q = $db->prepare("SELECT info FROM txt_main WHERE id=?");
  27.     $q->execute($id) or $ret = "Error getting info ($DBI::errstr)";
  28.     if($q->rows != 1) {
  29.         $ret = "Couldn't find a user with id: $id";
  30.     } else {
  31.         ($info) = $q->fetchrow_array();
  32.         $name = &getName($id);
  33.         $ret = "$name's info: $info";
  34.     }
  35.     return $ret;
  36.     $q->finish;
  37. }
  38.  
  39. sub mail {
  40.     $to = shift;
  41.     $subject = shift;
  42.     $subject = "Subject: ".$subject."\r\n";
  43.     $content = shift;
  44.     $headers = shift or "From: txt@sirmxe.info\r\nReply-to: txt@sirmxe.info";
  45.     our $debug;
  46.     return if $content == "";
  47.     $debug .= "sending mail: $content to $to"; 
  48.     my $sendmail = "/usr/bin/sendmail t";
  49.     open SENDMAIL,"|$sendmail";
  50.     print SENDMAIL $headers;
  51.     print SENDMAIL $subject;
  52.     print SENDMAIL "To: $to\r\n";
  53.     print SENDMAIL "Content-type: text/plain\r\n\r\n";
  54.     print SENDMAIL $content;
  55.     close SENDMAIL;
  56. }
  57.  
  58. sub wordwrap {
  59.     $word = shift;
  60.     $amount = shift or 80;
  61.     $amount -= 1;
  62.     $word = s/(.{1,$amount}\S|\S+)\s+/$1\n/mg;
  63.     return $word;
  64. }
  65.  
  66. sub sendResponse {
  67.     our $debug;
  68.     ($from, $response) = (shift, shift);
  69.     if($response == "") {
  70.         return;
  71.     }
  72.     $response =~ s/\n/ /ig;
  73.     @responses = split /\n/,&wordwrap($response,150);
  74.     $i = 0;
  75.     $num = $#responses+1;
  76.     foreach $response (@responses) {
  77.         $response .= " ($i/$num)" if $num > 1;
  78.         &mail($from, "", $response);
  79.         $i++;
  80.     }
  81. }
  82.      
  83. sub lusers {
  84.     our $debug;
  85.     $q = $db->prepare("SELECT id,name,nick FROM txt_main" or $ret = "Error getting users ($DBI::errstr)");
  86.     $ret = "Userlist\n";
  87.     $q->execute;
  88.     if($q->num == 0) {
  89.         $ret = "No users registered.";
  90.     } else {
  91.         while(($id, $name, $nick) = $q->fetchrow_array()) {
  92.             $debug .= "id: $id, name: $name, nick: $nick\n";
  93.             if($nick == "") {
  94.                 $name = $nick;
  95.             } else {
  96.                 @n = split / /,$name;
  97.                 $name = $n[0];
  98.             }
  99.             $ret .= "$id. $name\n";
  100.         }
  101.     }
  102.     $q->finish;
  103.     return $ret;
  104. }
  105.  
  106. sub ago {
  107.     $tm = shift;
  108.     $rcs = shift or 0;
  109.     $cur_tm = time;
  110.     $dif = $cur_tm - $tm;
  111.     @pds = ("second","minute","hour","day","week","month","year","decade");
  112.     @lngh = array(1,60,3600,8400,604800,2630880,31570560,315705600);
  113.     for($v = $#lngh-1; ($v >= 0) && (($no = $dif/$lngh[$v]) <= 1); $v--) { }
  114.     if($v < 0) {
  115.         $v = 0;
  116.     }
  117.     $_tm = $cur_tm - ($dif%$lngh[$v]);
  118.     $no = floor($no);
  119.     if($no != 1) {
  120.         $pds[$v] .= 's';
  121.     }
  122.     $x = sprintf "%d %s", $no, $pds[$v];
  123.     if(($rcs == 1)&&($v >= 1)&&(($cur_tm-$_tm) > 0)) {
  124.         $x .= &ago($_tm);
  125.     }
  126.     return $x;
  127. }
  128.  
  129. sub getStatus ($usr) {
  130.     our $db;
  131.     our $debug;
  132.     $id = shift;
  133.     $ret = "";
  134.     $q = $db->prepare("SELECT `status`,`when` FROM txt_main_status WHERE userid=? ORDER BY `status` DESC LIMIT 1");
  135.     $q->execute($id) or $ret = "Couldn't get status for userid $id ($DBI::errstr)";
  136.     if($q->num == 0) {
  137.         $ret = "No status updates from that person.";
  138.     } else {
  139.         ($status, $when) = $q->fetchrow_array();
  140.         $who = &getName($id);
  141.         $when = &ago($when);
  142.         $ret = "$who's status: $status (posted $when)";
  143.     }
  144.     return $ret;
  145. }
  146.        
  147. sub getName {
  148.     our $db;
  149.     $id = shift;
  150.     $ret = "";
  151.     $q = $db->prepare("SELECT username,name,nick FROM txt_main WHERE id=?");
  152.     $q->execute($id) or $ret = "Could not look up user $id ($DBI::errstr)";
  153.     if($q->num == 0) {
  154.         $ret = "Could not find a user with that id.";
  155.     } else {
  156.         ($username,$name,$nick) = $q->fetchrow_array();
  157.         if($nick != "") {
  158.             $ret = $nick;
  159.         } elsif ($name != "") {
  160.             $n = split / /, $name;
  161.             $ret = $n[0];
  162.         } else {
  163.             $ret =  $username;
  164.         }
  165.     }
  166.     return $ret;
  167. }
  168.  
  169. sub getMostRecent {
  170.     our $db;
  171.     $id = shift;
  172.     $ret = "";
  173.     $q = $db->prepare("SELECT userid,`when` FROM txt_main_status ORDER BY `when` DESC LIMIT 1");
  174.     $q->execute or $ret = "Couldn't get most recent: ($DBI::errstr)";
  175.     $uid = $q->fetchrow_array();
  176.     $ret = "Most recent update\n".&getStatus($uid);
  177.     return $ret;
  178. }
  179.  
  180. sub getID {
  181.     $value = shift;
  182.     $field = shift;
  183.     return &get("id",$field,$value);
  184. }
  185.  
  186. sub get {
  187.     our $db;
  188.     $ret = "";
  189.     $what = shift;
  190.     $from = shift;
  191.     $value = shift;
  192.     $q = $db->prepare("SELECT $what FROM txt_main WHERE $from=?");
  193.     $q->execute($value) or $ret=-1;
  194.     if($q->num == 0) {
  195.         $ret = 0;
  196.     } else {
  197.         $ret = $q->fetchrow_array();
  198.     }
  199.     return $ret;
  200. }
  201.  
  202. sub updateStatus {
  203.     our $db;
  204.     our $debug;
  205.     ($from,$stat) = (shift, shift);
  206.     $stat =~ s/\n//g;
  207.     $id = &getID($from,"email");
  208.     $debug .= "from = $from\n";
  209.     $ret = "";
  210.     if($id == 0) {
  211.         $ret = "Couldn't update status.";
  212.         $debug .= "Couldn't update status because user sent from an email address that doesn't exist.\n";
  213.     } elsif ($id == -1) {
  214.         $ret = "Couldn't update status.";
  215.         $debug .= "Couldn't update status because of mysql error.\n";
  216.     } else {
  217.         $time = time;
  218.         $db->do("INSERT INTO txt_status (`status`,`when`,`userid`) VALUES (".$db->quote($stat).",$time,$id)") or $ret = "Couldn't insert into txt_status ($DBI::errstr)";
  219.         $db->do("UPDATE txt_main SET lastupdate=".$db->{'mysql_insertid'}." WHERE id=$id") or $ret = "Couldn't insert into txt_main ($DBI::errstr)";
  220.         $db->do("UPDATE txt_main SET lastupdatetxt=".$db->quote($stat)." WHERE id=$id") or $ret = "Couldn't insert last txt into txt_main ($DBI::errstr)";
  221.         $q = $db->prepare("SELECT followerid FROM txt_main_followers WHERE userid=$id");
  222.         while($fid = $q->fetchrow_array()) {
  223.             $em = &get("email","id",$fid);
  224.             $n = &getName($fid);
  225.             $msg = "New update from $n: $stat";
  226.             sendResponse($r["email"],$msg);
  227.         }
  228.     }
  229. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement