Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use DBI;
- use POSIX;
- $dsn = "DBI:mysql:database=db:host=localhost:port=3006";
- $user = "user";
- $pass = "pass";
- $db = DBI->connect($dsn,$user,$pass);
- $db->{RaiseError} = 1;
- $debug = "";
- sub getHelp {
- $what = shift;
- $ret = "";
- $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)";
- %list = split /[\-\|]/,$h;
- if(exists($list[$what])) {
- $ret = $list[$what];
- } else {
- $ret = "The command you provided, $what, was not found.";
- }
- return $ret;
- }
- sub getInfo {
- our $db;
- $ret = "";
- $id = shift;
- $q = $db->prepare("SELECT info FROM txt_main WHERE id=?");
- $q->execute($id) or $ret = "Error getting info ($DBI::errstr)";
- if($q->rows != 1) {
- $ret = "Couldn't find a user with id: $id";
- } else {
- ($info) = $q->fetchrow_array();
- $name = &getName($id);
- $ret = "$name's info: $info";
- }
- return $ret;
- $q->finish;
- }
- sub mail {
- $to = shift;
- $subject = shift;
- $subject = "Subject: ".$subject."\r\n";
- $content = shift;
- $headers = shift or "From: txt@sirmxe.info\r\nReply-to: txt@sirmxe.info";
- our $debug;
- return if $content == "";
- $debug .= "sending mail: $content to $to";
- my $sendmail = "/usr/bin/sendmail t";
- open SENDMAIL,"|$sendmail";
- print SENDMAIL $headers;
- print SENDMAIL $subject;
- print SENDMAIL "To: $to\r\n";
- print SENDMAIL "Content-type: text/plain\r\n\r\n";
- print SENDMAIL $content;
- close SENDMAIL;
- }
- sub wordwrap {
- $word = shift;
- $amount = shift or 80;
- $amount -= 1;
- $word = s/(.{1,$amount}\S|\S+)\s+/$1\n/mg;
- return $word;
- }
- sub sendResponse {
- our $debug;
- ($from, $response) = (shift, shift);
- if($response == "") {
- return;
- }
- $response =~ s/\n/ /ig;
- @responses = split /\n/,&wordwrap($response,150);
- $i = 0;
- $num = $#responses+1;
- foreach $response (@responses) {
- $response .= " ($i/$num)" if $num > 1;
- &mail($from, "", $response);
- $i++;
- }
- }
- sub lusers {
- our $debug;
- $q = $db->prepare("SELECT id,name,nick FROM txt_main" or $ret = "Error getting users ($DBI::errstr)");
- $ret = "Userlist\n";
- $q->execute;
- if($q->num == 0) {
- $ret = "No users registered.";
- } else {
- while(($id, $name, $nick) = $q->fetchrow_array()) {
- $debug .= "id: $id, name: $name, nick: $nick\n";
- if($nick == "") {
- $name = $nick;
- } else {
- @n = split / /,$name;
- $name = $n[0];
- }
- $ret .= "$id. $name\n";
- }
- }
- $q->finish;
- return $ret;
- }
- sub ago {
- $tm = shift;
- $rcs = shift or 0;
- $cur_tm = time;
- $dif = $cur_tm - $tm;
- @pds = ("second","minute","hour","day","week","month","year","decade");
- @lngh = array(1,60,3600,8400,604800,2630880,31570560,315705600);
- for($v = $#lngh-1; ($v >= 0) && (($no = $dif/$lngh[$v]) <= 1); $v--) { }
- if($v < 0) {
- $v = 0;
- }
- $_tm = $cur_tm - ($dif%$lngh[$v]);
- $no = floor($no);
- if($no != 1) {
- $pds[$v] .= 's';
- }
- $x = sprintf "%d %s", $no, $pds[$v];
- if(($rcs == 1)&&($v >= 1)&&(($cur_tm-$_tm) > 0)) {
- $x .= &ago($_tm);
- }
- return $x;
- }
- sub getStatus ($usr) {
- our $db;
- our $debug;
- $id = shift;
- $ret = "";
- $q = $db->prepare("SELECT `status`,`when` FROM txt_main_status WHERE userid=? ORDER BY `status` DESC LIMIT 1");
- $q->execute($id) or $ret = "Couldn't get status for userid $id ($DBI::errstr)";
- if($q->num == 0) {
- $ret = "No status updates from that person.";
- } else {
- ($status, $when) = $q->fetchrow_array();
- $who = &getName($id);
- $when = &ago($when);
- $ret = "$who's status: $status (posted $when)";
- }
- return $ret;
- }
- sub getName {
- our $db;
- $id = shift;
- $ret = "";
- $q = $db->prepare("SELECT username,name,nick FROM txt_main WHERE id=?");
- $q->execute($id) or $ret = "Could not look up user $id ($DBI::errstr)";
- if($q->num == 0) {
- $ret = "Could not find a user with that id.";
- } else {
- ($username,$name,$nick) = $q->fetchrow_array();
- if($nick != "") {
- $ret = $nick;
- } elsif ($name != "") {
- $n = split / /, $name;
- $ret = $n[0];
- } else {
- $ret = $username;
- }
- }
- return $ret;
- }
- sub getMostRecent {
- our $db;
- $id = shift;
- $ret = "";
- $q = $db->prepare("SELECT userid,`when` FROM txt_main_status ORDER BY `when` DESC LIMIT 1");
- $q->execute or $ret = "Couldn't get most recent: ($DBI::errstr)";
- $uid = $q->fetchrow_array();
- $ret = "Most recent update\n".&getStatus($uid);
- return $ret;
- }
- sub getID {
- $value = shift;
- $field = shift;
- return &get("id",$field,$value);
- }
- sub get {
- our $db;
- $ret = "";
- $what = shift;
- $from = shift;
- $value = shift;
- $q = $db->prepare("SELECT $what FROM txt_main WHERE $from=?");
- $q->execute($value) or $ret=-1;
- if($q->num == 0) {
- $ret = 0;
- } else {
- $ret = $q->fetchrow_array();
- }
- return $ret;
- }
- sub updateStatus {
- our $db;
- our $debug;
- ($from,$stat) = (shift, shift);
- $stat =~ s/\n//g;
- $id = &getID($from,"email");
- $debug .= "from = $from\n";
- $ret = "";
- if($id == 0) {
- $ret = "Couldn't update status.";
- $debug .= "Couldn't update status because user sent from an email address that doesn't exist.\n";
- } elsif ($id == -1) {
- $ret = "Couldn't update status.";
- $debug .= "Couldn't update status because of mysql error.\n";
- } else {
- $time = time;
- $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)";
- $db->do("UPDATE txt_main SET lastupdate=".$db->{'mysql_insertid'}." WHERE id=$id") or $ret = "Couldn't insert into txt_main ($DBI::errstr)";
- $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)";
- $q = $db->prepare("SELECT followerid FROM txt_main_followers WHERE userid=$id");
- while($fid = $q->fetchrow_array()) {
- $em = &get("email","id",$fid);
- $n = &getName($fid);
- $msg = "New update from $n: $stat";
- sendResponse($r["email"],$msg);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement