diff --git a/schema.sql b/schema.sql new file mode 100644 index 0000000..474b59a --- /dev/null +++ b/schema.sql @@ -0,0 +1,76 @@ +-- MySQL dump 10.13 Distrib 5.7.20, for Linux (x86_64) +-- +-- Host: 127.0.0.1 Database: test +-- ------------------------------------------------------ +-- Server version 5.5.5-10.1.29-MariaDB + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Table structure for table `contact` +-- + +DROP TABLE IF EXISTS `contact`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `contact` ( + `id` int(10) NOT NULL AUTO_INCREMENT, + `username` varchar(100) NOT NULL, + `user_id` int(20) NOT NULL COMMENT 'Telegram user id', + `reg_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'First /start message', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `notification` +-- + +DROP TABLE IF EXISTS `notification`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `notification` ( + `id` int(10) NOT NULL AUTO_INCREMENT, + `topic_id` int(10) NOT NULL COMMENT '# of topic on rutracker.org', + `user_id` int(20) NOT NULL COMMENT 'user id on telegram', + `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Creation date', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `url` +-- + +DROP TABLE IF EXISTS `url`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `url` ( + `id` int(10) NOT NULL AUTO_INCREMENT, + `link` varchar(500) NOT NULL COMMENT 'URL', + `c_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Creation date', + `u_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Last update on rutracker', + `last_check` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- Dump completed on 2018-01-17 15:40:03 diff --git a/settings.ini_example b/settings.ini_example new file mode 100644 index 0000000..d7bfc8c --- /dev/null +++ b/settings.ini_example @@ -0,0 +1,3 @@ +[bot] +telegram_key = 539154645:ASJDDHaseytrrl9mHzGuKBiqegHAxaRZxVw +telegram_api = https://api.telegram.org/ \ No newline at end of file diff --git a/webhook/index.php b/webhook/index.php index 5c69886..26307a9 100644 --- a/webhook/index.php +++ b/webhook/index.php @@ -2,13 +2,40 @@ $config = parse_ini_file("../settings.ini"); $dbh = new PDO('mysql:host=localhost;dbname=test', 'root'); -$request = file_get_contents( 'php://input' ); +$request = file_get_contents('php://input'); $request = json_decode( $request, TRUE ); -function send($id, $msg, $config) { +function register(){ + global $dbh; + global $config; + global $user_id; + global $username; + $stmt = $dbh->query( + 'SELECT id FROM `contact` + WHERE user_id = "'.$user_id.'"' + ); + if($stmt->rowCount() == 0) + { + $stmt = $dbh->query( + 'INSERT into contact (username, user_id) + VALUES ("'.$username.'","'.$user_id.'")' + ); + send('Hello! Send me an URL to rutracker.org topic and i will notify you when topic will be updated.'); + } + else + { + send('Send me an URL to rutracker.org topic.'); + die(); + } +} + + +function send($msg, $die = FALSE) { + global $config; + global $user_id; $url = $config['telegram_api'].'bot'.$config['telegram_key'].'/sendMessage'; $data = array( - 'chat_id' => $id, + 'chat_id' => $user_id, 'text' => $msg ); $options = array( @@ -24,6 +51,70 @@ function send($id, $msg, $config) { return TRUE; } +function notify($url){ + global $user_id; + global $config; + global $dbh; + if ( + (parse_url($url, PHP_URL_HOST) == 'rutracker.org') && + (parse_url($url, PHP_URL_PATH) == '/forum/viewtopic.php') && + (parse_url($url, PHP_URL_QUERY)) + ) { + + parse_str((parse_url($url, PHP_URL_QUERY)), $url); + if (!isset($url['t'])) + { + send('URL is invalid.', $die = TRUE); + die(); + } + $url = $url['t']; + $stmt = $dbh->query( + 'SELECT * FROM notification n + LEFT JOIN contact c ON n.user_id = c.user_id + WHERE c.user_id = "'.$user_id.'" AND n.topic_id = "'.$url.'"' + ); + if($stmt->rowCount() > 0) + { + send('You already subscribed for '.$url." updates.", $die = TRUE); + }else{ + send('You will be subscribed for '.$url." updates."); + $stmt = $dbh->query( + 'SELECT * FROM `url` + WHERE link = "'.$url.'"' + ); + if($stmt->rowCount() > 0) + { + // make notify for new user using presented url id + $id = $stmt->fetch(); + $stmt = $dbh->query( + 'INSERT INTO notification (topic_id, user_id) + VALUES ("'.$id['link'].'","'.$user_id.'")' + ); + }else{ + // insert new url and user in db + $json = file_get_contents( + 'http://api.rutracker.org/v1/get_tor_topic_data?by=topic_id&val='.$url + ); + $obj = json_decode($json); + + $stmt = $dbh->query( + 'INSERT into url (link,u_date) + VALUES ("'.$url.'","'.gmdate("Y-m-d H:i:s", $obj->result->{$url}->reg_time).'")' + ); + $stmt = $dbh->query( + 'INSERT into notification (user_id, topic_id) + VALUES ("'.$user_id.'","'.$url.'")' + ); + } + + } + + }else{ + send('URL is invalid. Only rutracker supported right now.', $die = TRUE); + } + +} + if( !$request ) { die(); @@ -37,42 +128,15 @@ else $chatId = $request['message']['chat']['id']; $message = $request['message']['text']; $user_id = $request['message']['from']['id']; + //$user_id = '124317807'; + //$message = 'https://rutracker.org/forum/viewtopic.php?t=5505520'; $username = $request['message']['from']['username']; - if($message == '/start') - { - $stmt = $dbh->query( - 'SELECT id FROM `contact` - WHERE user_id = "'.$user_id.'"' - ); - if($stmt->rowCount() == 0) - { - $stmt = $dbh->query( - 'INSERT into contact (username, user_id) - VALUES ("'.$username.'","'.$user_id.'")' - ); - send( - $user_id, - 'Hello! Send me an URL and i will notify you when topic will be updated.', - $config - ); - } - else - { - send( - $user_id, - 'Hello again. Send me an URL and i will notify you when topic will be updated.', - $config - ); - die(); - } - // if message is an URL - }elseif(!(filter_var($message, FILTER_VALIDATE_URL) === FALSE)) { - send( - $user_id, - 'Recognized as an URL', - $config - ); + if(!(filter_var($message, FILTER_VALIDATE_URL) === FALSE)) { + #send('Recognized as an URL'); + notify($message); + }else{ + register(); } } ?> \ No newline at end of file