Add sql schema. Implement simple notification interface.

This commit is contained in:
UltraDesu
2018-01-17 15:44:03 +03:00
parent 6a7db03c5a
commit 975f9116ed
3 changed files with 180 additions and 37 deletions

76
schema.sql Normal file
View File

@ -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

3
settings.ini_example Normal file
View File

@ -0,0 +1,3 @@
[bot]
telegram_key = 539154645:ASJDDHaseytrrl9mHzGuKBiqegHAxaRZxVw
telegram_api = https://api.telegram.org/

View File

@ -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();
}
}
?>