|
|
|
@ -1,8 +1,8 @@
|
|
|
|
|
<?php
|
|
|
|
|
/*
|
|
|
|
|
* Codice beta v0.99 del GOLEMbot - 24 set 2017
|
|
|
|
|
* Codice beta v0.99.1 del GOLEMbot - 28 set 2017
|
|
|
|
|
*
|
|
|
|
|
* Opera by giomba e giuliof rilasciata sotto licenza GPLv3
|
|
|
|
|
* Opera by giomba, lucam e giuliof released by GPLv3 license
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
@ -27,8 +27,8 @@ $mc->addServer('localhost', MEMCACHED_PORT)
|
|
|
|
|
or error("Something is wrong connecting to memcached daemon");
|
|
|
|
|
|
|
|
|
|
// Accept only messages from a private chat
|
|
|
|
|
if (isset($row->message->chat->type) and $row->message->chat->type != "private") {
|
|
|
|
|
if (DEBUG) warning("Message from ".$row->message->chat->type);
|
|
|
|
|
if(!isset($row->message->text)) {
|
|
|
|
|
if (DEBUG) warning("Message from a not acceptable source");
|
|
|
|
|
die();
|
|
|
|
|
}
|
|
|
|
|
// HANDLE A CALLBACK
|
|
|
|
@ -59,6 +59,12 @@ elseif (isset ($row->callback_query)) {
|
|
|
|
|
}
|
|
|
|
|
// HANDLE A COMMON MESSAGE (text/commands/keyboard)
|
|
|
|
|
else {
|
|
|
|
|
// throw away photos, documents and stickers (fixit)
|
|
|
|
|
if(isset($row->message->sticker) or isset($row->message->document)) {
|
|
|
|
|
// sto username si potrebbe quasi quasi estrapolare e mettere in una variabile decente
|
|
|
|
|
error("Qualcheduno (".$row->message->from->username.") ha mandato una cosa non supportata");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Load variables
|
|
|
|
|
$chatID = $row->message->chat->id;
|
|
|
|
|
|
|
|
|
@ -70,7 +76,11 @@ else {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Finally, check actual state and do things
|
|
|
|
|
$status = $mc->get($chatID.MC_STATUS) or $mc->set($chatID.MC_STATUS, STATE_IDLE) or die(); // set status or force it to STATE_IDLE
|
|
|
|
|
$status = $mc->get($chatID.MC_STATUS);
|
|
|
|
|
if (!$status) {
|
|
|
|
|
$mc->set($chatID.MC_STATUS, STATE_IDLE) or die(); // set status or force it to STATE_IDLE
|
|
|
|
|
$status = STATE_IDLE;
|
|
|
|
|
}
|
|
|
|
|
if (DEBUG) info("Starting from status $status");
|
|
|
|
|
|
|
|
|
|
// ricordati di schiantare quando ricevi un messaggio invece di una callback
|
|
|
|
@ -79,12 +89,114 @@ switch ($status) {
|
|
|
|
|
case STATE_IDLE:
|
|
|
|
|
// In this state are not accepted callback requests
|
|
|
|
|
if (isset($callback_data)) {
|
|
|
|
|
if (DEBUG) warning("Callback request is not accepted in status $status");
|
|
|
|
|
die();
|
|
|
|
|
switch ($callback_data){
|
|
|
|
|
case MSG_DELETE:
|
|
|
|
|
$sql = new mysqli('localhost', MYSQL_USER, MYSQL_PASSWORD, MYSQL_DB);
|
|
|
|
|
$IDdelete = $mc->get($chatID.MC_DELETE_SCHEDULED_ID);
|
|
|
|
|
$sql->query("DELETE FROM ".MYSQL_TABLE." WHERE ID=$IDdelete")
|
|
|
|
|
or error("Can't make the query, SQL error ".$sql->error);
|
|
|
|
|
$sql->close();
|
|
|
|
|
|
|
|
|
|
$url = API_URL.API_TOKEN."/editMessageText?chat_id=".($chatID).
|
|
|
|
|
"&message_id=".$inlineID .
|
|
|
|
|
"&text=Rimosso correttamente";
|
|
|
|
|
file_get_contents($url);
|
|
|
|
|
die();
|
|
|
|
|
break;
|
|
|
|
|
case '>':
|
|
|
|
|
$sql = new mysqli('localhost', MYSQL_USER, MYSQL_PASSWORD, MYSQL_DB);
|
|
|
|
|
$numbers = $sql->query("SELECT COUNT(*) FROM ".MYSQL_TABLE);
|
|
|
|
|
$numbers = $numbers->fetch_array()[0];
|
|
|
|
|
info("Number of pages: $numbers");
|
|
|
|
|
$offset = $mc->get($chatID.MC_LIST_NUMBER);
|
|
|
|
|
// gestire meglio qui
|
|
|
|
|
$offset++;
|
|
|
|
|
break;
|
|
|
|
|
case '<':
|
|
|
|
|
$sql = new mysqli('localhost', MYSQL_USER, MYSQL_PASSWORD, MYSQL_DB);
|
|
|
|
|
$numbers = $sql->query("SELECT COUNT(*) FROM ".MYSQL_TABLE);
|
|
|
|
|
$numbers = $numbers->fetch_array()[0];
|
|
|
|
|
info("Number of pages: $numbers");
|
|
|
|
|
$offset = $mc->get($chatID.MC_LIST_NUMBER);
|
|
|
|
|
// gestire meglio qui
|
|
|
|
|
$offset--;
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
if (DEBUG) warning("Callback request is not accepted in status $status");
|
|
|
|
|
die();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$query = $sql->query("SELECT DATE_FORMAT(DateTime,'%d/%m/%Y ore %H') as DateTime,Text,Author,ID FROM ".MYSQL_TABLE."
|
|
|
|
|
ORDER BY DateTime ASC LIMIT 1 OFFSET $offset") or error("Can't make the query, SQL error ".$sql->error);
|
|
|
|
|
|
|
|
|
|
//while($row = $query->fetch_assoc()) {
|
|
|
|
|
$row = $query->fetch_assoc();
|
|
|
|
|
$mc->set($chatID.MC_DELETE_SCHEDULED_ID, $row['ID'])
|
|
|
|
|
or $mc->replace($chatID.MC_DELETE_SCHEDULED_ID, $row['ID']);
|
|
|
|
|
//~ $query = API_URL . API_TOKEN . '/forwardMessage?' .
|
|
|
|
|
//~ 'chat_id=' . urlencode($chatID) .
|
|
|
|
|
//~ '&from_chat_id=' . urlencode($row['ChatID']) .
|
|
|
|
|
//~ '&message_id=' . urlencode($row['MessageID']);
|
|
|
|
|
//~ $answer = file_get_contents($query);
|
|
|
|
|
//~ $answer = json_decode($answer);
|
|
|
|
|
$sql->close();
|
|
|
|
|
|
|
|
|
|
$container = array(
|
|
|
|
|
array(
|
|
|
|
|
array(
|
|
|
|
|
"text" => $row['DateTime'],
|
|
|
|
|
"callback_data" => "null"
|
|
|
|
|
)));
|
|
|
|
|
|
|
|
|
|
$container[] = array(
|
|
|
|
|
$offset > 0?
|
|
|
|
|
array(
|
|
|
|
|
"text" => "<",
|
|
|
|
|
"callback_data" => "<"
|
|
|
|
|
)
|
|
|
|
|
:
|
|
|
|
|
array(
|
|
|
|
|
"text" => " ",
|
|
|
|
|
"callback_data" => "null"
|
|
|
|
|
),
|
|
|
|
|
array(
|
|
|
|
|
"text" => "$EMOJI_THUMBSDOWN Canc",
|
|
|
|
|
"callback_data" => MSG_DELETE
|
|
|
|
|
),
|
|
|
|
|
$offset < $numbers-1 ?
|
|
|
|
|
array(
|
|
|
|
|
"text" => ">",
|
|
|
|
|
"callback_data" => ">"
|
|
|
|
|
)
|
|
|
|
|
:
|
|
|
|
|
array(
|
|
|
|
|
"text" => " ",
|
|
|
|
|
"callback_data" => "null"
|
|
|
|
|
)
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
$resp = array(
|
|
|
|
|
"inline_keyboard" => $container);
|
|
|
|
|
$reply = json_encode($resp);
|
|
|
|
|
|
|
|
|
|
$text="$row[Text]\n_$row[Author]_"; // NOME CANALE ".API_CHANNEL_ID."?";
|
|
|
|
|
|
|
|
|
|
$query = API_URL.API_TOKEN."/editMessageText?chat_id=".($chatID).
|
|
|
|
|
"&message_id=".$inlineID.
|
|
|
|
|
"&text=".urlencode($text).
|
|
|
|
|
"&parse_mode=".urlencode("Markdown").
|
|
|
|
|
"&reply_markup=".$reply;
|
|
|
|
|
$answer = file_get_contents($query);
|
|
|
|
|
$answer = json_decode($answer);
|
|
|
|
|
|
|
|
|
|
$mc->set($chatID.MC_LIST_NUMBER, $offset)
|
|
|
|
|
or $mc->replace($chatID.MC_LIST_NUMBER, $offset);
|
|
|
|
|
|
|
|
|
|
die();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// qui ci metterei un else
|
|
|
|
|
// Search for a command
|
|
|
|
|
if (($command = getCommand($row->message)) != -1) {
|
|
|
|
|
if (($command = getCommand($row->message)) != null) {
|
|
|
|
|
info("Command received: $command[command] with options $command[options]");
|
|
|
|
|
|
|
|
|
|
switch ($command['command']) {
|
|
|
|
@ -99,29 +211,116 @@ switch ($status) {
|
|
|
|
|
file_get_contents($query);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case '/edit':
|
|
|
|
|
//~ $text = "Invio effettuato correttamente";
|
|
|
|
|
//~ $url = API_URL.API_TOKEN."/deleteMessage?chat_id=".($chatID).
|
|
|
|
|
//~ "&message_id=2551";
|
|
|
|
|
//~ file_get_contents($url);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case '/list':
|
|
|
|
|
$dateID = date('Y-n-j G:*');
|
|
|
|
|
//~ $dateID = date('Y-n-j G:*');
|
|
|
|
|
|
|
|
|
|
$sql = new mysqli('localhost', MYSQL_USER, MYSQL_PASSWORD, MYSQL_DB);
|
|
|
|
|
$query = $sql->query("SELECT DateTime FROM ".MYSQL_TABLE." WHERE DateTime>='$dateID'
|
|
|
|
|
ORDER BY DateTime ASC LIMIT 10") or error("Can't make the query, SQL error ".$sql->error);
|
|
|
|
|
//~ $sql = new mysqli('localhost', MYSQL_USER, MYSQL_PASSWORD, MYSQL_DB);
|
|
|
|
|
//~ $query = $sql->query("SELECT DateTime,ChatID,MessageID FROM ".MYSQL_TABLE." WHERE DateTime>='$dateID'
|
|
|
|
|
//~ ORDER BY DateTime ASC LIMIT 10") or error("Can't make the query, SQL error ".$sql->error);
|
|
|
|
|
|
|
|
|
|
$text = "Prossimi 10 messaggi programmati";
|
|
|
|
|
$i = 1;
|
|
|
|
|
while ($row = $query->fetch_assoc()) {
|
|
|
|
|
$text .= "\n".$i." - ". $row['DateTime'];
|
|
|
|
|
$i++;
|
|
|
|
|
//~ $text = "Prossimi 10 messaggi programmati";
|
|
|
|
|
//~ $i = 1;
|
|
|
|
|
//~ while($row = $query->fetch_assoc()) {
|
|
|
|
|
//~ $text .= "\n".$i." - ". $row['DateTime'];
|
|
|
|
|
//~ $i++;
|
|
|
|
|
//~ }
|
|
|
|
|
//~ $text .= "\nFunzione in miglioramento";
|
|
|
|
|
//~ $query = API_URL . API_TOKEN . '/sendMessage?' .
|
|
|
|
|
//~ 'chat_id=' . urlencode($chatID) .
|
|
|
|
|
//~ '&text=' . urlencode($text);
|
|
|
|
|
//~ $sql->close();
|
|
|
|
|
//~ file_get_contents($query);
|
|
|
|
|
|
|
|
|
|
//~ break;
|
|
|
|
|
|
|
|
|
|
// yusdgfdsjf
|
|
|
|
|
|
|
|
|
|
//~ $dateID = date('Y-n-j G:*');
|
|
|
|
|
|
|
|
|
|
$sql = new mysqli('localhost', MYSQL_USER, MYSQL_PASSWORD, MYSQL_DB);
|
|
|
|
|
$numbers = $sql->query("SELECT COUNT(*) FROM ".MYSQL_TABLE);
|
|
|
|
|
$numbers = $numbers->fetch_array()[0];
|
|
|
|
|
if ($numbers == 0) {
|
|
|
|
|
$query = API_URL.API_TOKEN."/sendmessage?chat_id=".($chatID).
|
|
|
|
|
"&text=Nessun messaggio programmato";
|
|
|
|
|
$answer = file_get_contents($query);
|
|
|
|
|
die();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$query = $sql->query("SELECT DATE_FORMAT(DateTime,'%d/%m/%Y ore %H') as DateTime,Text,Author,ID FROM ".MYSQL_TABLE."
|
|
|
|
|
ORDER BY DateTime ASC LIMIT 1") or error("Can't make the query, SQL error ".$sql->error);
|
|
|
|
|
|
|
|
|
|
//while($row = $query->fetch_assoc()) {
|
|
|
|
|
$row = $query->fetch_assoc();
|
|
|
|
|
$mc->set($chatID.MC_DELETE_SCHEDULED_ID, $row['ID'])
|
|
|
|
|
or $mc->replace($chatID.MC_DELETE_SCHEDULED_ID, $row['ID']);;
|
|
|
|
|
//~ $query = API_URL . API_TOKEN . '/forwardMessage?' .
|
|
|
|
|
//~ 'chat_id=' . urlencode($chatID) .
|
|
|
|
|
//~ '&from_chat_id=' . urlencode($row['ChatID']) .
|
|
|
|
|
//~ '&message_id=' . urlencode($row['MessageID']);
|
|
|
|
|
//~ $answer = file_get_contents($query);
|
|
|
|
|
//~ $answer = json_decode($answer);
|
|
|
|
|
$sql->close();
|
|
|
|
|
|
|
|
|
|
$query = API_URL.API_TOKEN."/sendmessage?chat_id=".($chatID).
|
|
|
|
|
"&text=".urlencode($text).
|
|
|
|
|
"&reply_markup=".$reply;
|
|
|
|
|
$answer = file_get_contents($query);
|
|
|
|
|
//$mc->set($chatID.MC_FW_EDIT, $answer->result->message_id)
|
|
|
|
|
// or $mc->replace($chatID.MC_FW_EDIT, $answer->result->message_id);
|
|
|
|
|
$container = array(
|
|
|
|
|
array(
|
|
|
|
|
array(
|
|
|
|
|
"text" => $row['DateTime'],
|
|
|
|
|
"callback_data" => "null"
|
|
|
|
|
)));
|
|
|
|
|
|
|
|
|
|
$container[] = array(
|
|
|
|
|
array(
|
|
|
|
|
"text" => " ",
|
|
|
|
|
"callback_data" => "null"
|
|
|
|
|
),
|
|
|
|
|
array(
|
|
|
|
|
"text" => "$EMOJI_THUMBSDOWN Canc",
|
|
|
|
|
"callback_data" => MSG_DELETE
|
|
|
|
|
),
|
|
|
|
|
$numbers > 1 ?
|
|
|
|
|
array(
|
|
|
|
|
"text" => ">",
|
|
|
|
|
"callback_data" => ">"
|
|
|
|
|
)
|
|
|
|
|
:
|
|
|
|
|
array(
|
|
|
|
|
"text" => " ",
|
|
|
|
|
"callback_data" => "null"
|
|
|
|
|
)
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
$resp = array(
|
|
|
|
|
"inline_keyboard" => $container);
|
|
|
|
|
$reply = json_encode($resp);
|
|
|
|
|
|
|
|
|
|
$text="$row[Text]\n_$row[Author]_"; // NOME CANALE ".API_CHANNEL_ID."?";
|
|
|
|
|
|
|
|
|
|
$query = API_URL.API_TOKEN."/sendmessage?chat_id=".($chatID).
|
|
|
|
|
"&text=".urlencode($text).
|
|
|
|
|
"&parse_mode=".urlencode("Markdown").
|
|
|
|
|
"&reply_markup=".$reply;
|
|
|
|
|
$answer = file_get_contents($query);
|
|
|
|
|
$answer = json_decode($answer);
|
|
|
|
|
|
|
|
|
|
$mc->set($chatID.MC_INLINE_ID, $answer->result->message_id)
|
|
|
|
|
or $mc->replace($chatID.MC_INLINE_ID, $answer->result->message_id);
|
|
|
|
|
|
|
|
|
|
$mc->set($chatID.MC_LIST_NUMBER, 0)
|
|
|
|
|
or $mc->replace($chatID.MC_LIST_NUMBER, 0);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
if (DEBUG) warning("$command[command] is not a valid command");
|
|
|
|
|
warning("$command[command] is not a valid command");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else { // not a command (pure text)
|
|
|
|
@ -181,11 +380,17 @@ switch ($status) {
|
|
|
|
|
$msg = $mc->get($chatID.MC_FORWARD_MSG)
|
|
|
|
|
or error("Can't forward message\n");
|
|
|
|
|
|
|
|
|
|
$query = API_URL . API_TOKEN . '/forwardMessage?' .
|
|
|
|
|
'chat_id=' . urlencode(API_CHANNEL_ID) .
|
|
|
|
|
'&from_chat_id=' . urlencode($msg->message->chat->id) .
|
|
|
|
|
'&message_id=' . urlencode($msg->message->message_id);
|
|
|
|
|
file_get_contents($query);
|
|
|
|
|
//~ $query = API_URL . API_TOKEN . '/forwardMessage?' .
|
|
|
|
|
//~ 'chat_id=' . urlencode(API_CHANNEL_ID) .
|
|
|
|
|
//~ '&from_chat_id=' . urlencode($msg->message->chat->id) .
|
|
|
|
|
//~ '&message_id=' . urlencode($msg->message->message_id);
|
|
|
|
|
//~ file_get_contents($query);
|
|
|
|
|
$query = API_URL . API_TOKEN . '/sendmessage?' .
|
|
|
|
|
'chat_id=' . urlencode(API_CHANNEL_ID) .
|
|
|
|
|
'&text='.urlencode($msg->message->text."\n_".$msg->message->chat->username."_").
|
|
|
|
|
"&parse_mode=".urlencode("Markdown"); //bah, un isset un ce lo vedrei male
|
|
|
|
|
$result = file_get_contents($query);
|
|
|
|
|
if(DEBUG) botlog("[LOG] $result\n");
|
|
|
|
|
|
|
|
|
|
// Remove kbd
|
|
|
|
|
$text = "Invio effettuato correttamente";
|
|
|
|
@ -386,7 +591,7 @@ switch ($status) {
|
|
|
|
|
$msg = $mc->get($chatID.MC_FORWARD_MSG);
|
|
|
|
|
|
|
|
|
|
// add to database (mysql)
|
|
|
|
|
|
|
|
|
|
$sql = new mysqli('localhost', MYSQL_USER, MYSQL_PASSWORD, MYSQL_DB);
|
|
|
|
|
// Build up mysql query
|
|
|
|
|
$value = "(";
|
|
|
|
|
$value .= $msg->message->message_id;
|
|
|
|
@ -397,12 +602,17 @@ switch ($status) {
|
|
|
|
|
$value .= $currentTab['month'].'-';
|
|
|
|
|
$value .= $currentTab['day'].' ';
|
|
|
|
|
$value .= $callback_data.":00:00'";
|
|
|
|
|
$value .= ",";
|
|
|
|
|
$value .= "'".$sql->escape_string($msg->message->text)."'";
|
|
|
|
|
$value .= ",";
|
|
|
|
|
$value .= "'".$sql->escape_string($msg->message->from->username)."'"; // andrebbe fatto un isset, vabbé
|
|
|
|
|
$value .= ");";
|
|
|
|
|
|
|
|
|
|
info("Saving post in ".MYSQL_TABLE.", scheduled date: ".$value);
|
|
|
|
|
|
|
|
|
|
$sql = new mysqli('localhost', MYSQL_USER, MYSQL_PASSWORD, MYSQL_DB);
|
|
|
|
|
$query = $sql->query("INSERT INTO ".MYSQL_TABLE." (MessageID,ChatID,DateTime) VALUE ".$value);
|
|
|
|
|
|
|
|
|
|
$query = $sql->query("INSERT INTO ".MYSQL_TABLE." (MessageID,ChatID,DateTime,Text,Author) VALUE ".$value)
|
|
|
|
|
or error("Can't make the query, SQL error ".$sql->error);
|
|
|
|
|
$sql->close();
|
|
|
|
|
|
|
|
|
|
$text = "Programmazione avvenuta con successo";
|
|
|
|
|