diff --git a/.gitignore b/.gitignore
index 8b13789..1e8944d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
+config.php
diff --git a/README b/README
deleted file mode 100644
index 37faf10..0000000
--- a/README
+++ /dev/null
@@ -1,3 +0,0 @@
-Further info (in Italian) at
- http://golem.linux.it/wiki/GOLEM_Telegram_Bot
-
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..035fbb0
--- /dev/null
+++ b/README.md
@@ -0,0 +1,8 @@
+# golem-telegram-bot
+http://golem.linux.it/wiki/GOLEM_Telegram_Bot
+
+## sqlite3 database creation
+```
+CREATE TABLE telegram_post (ID INTEGER PRIMARY KEY NOT NULL, MessageID INTEGER NOT NULL, ChatID INTEGER NOT NULL, DateTime DATETIME NOT NULL, Text TEXT NOT NULL, Author TEXT);
+```
+
diff --git a/config.php b/config.sample.php
similarity index 85%
rename from config.php
rename to config.sample.php
index e63c560..45b9616 100644
--- a/config.php
+++ b/config.sample.php
@@ -1,15 +1,13 @@
grassetto**, __corsivo__ e `codice
`
diff --git a/main.php b/main.php
index c3b3d97..3a55f37 100644
--- a/main.php
+++ b/main.php
@@ -1,30 +1,29 @@
addServer('localhost', MEMCACHED_PORT)
- or error("Something is wrong connecting to memcached daemon");
+if ($mc == null) error('no memcached object instance');
+if (! $mc->addServer(MEMCACHED_HOST, MEMCACHED_PORT)) {
+ error("something is wrong connecting to memcached daemon");
+}
// Structure of managed telegram messages
/*
@@ -45,7 +44,7 @@ $mc->addServer('localhost', MEMCACHED_PORT)
* |_ text § string (message_text)
* |_ entities: [{"offset":...,"length":...,"type":"italic"}]
* |_ photo, location, video
- *
+ *
* **Callback Query**
* $row
* |_ callback_query
@@ -54,34 +53,35 @@ $mc->addServer('localhost', MEMCACHED_PORT)
* |_ message § Message
* |_ inline_message_id § integer (inlineID)
* |_ ...
- */
+ */
// HANDLE A CALLBACK
if (isset ($row->callback_query)) {
+DEBUG and botlog('handle callback query');
$chatID = $row->callback_query->message->chat->id;
-
+
// Check if it was thrown by admitted users
- in_array($row->callback_query->message->chat->username, BOT_BETA_TESTERS) or not_authorized($chatID);
-
+ in_array($row->callback_query->message->chat->username, BOT_ALLOWED_USERS) or not_authorized($chatID);
+ botlog('Ok authorized user pass!');
+
// Answer to the callback query (remove the loading sign)
- if (DEBUG) info("Callback Query, answering");
+ info("Callback Query, answering");
$url = API_URL.API_TOKEN."/answerCallbackQuery?callback_query_id=".$row->callback_query->id;
file_get_contents($url);
-
+
// Do something - insert here useful variables
$callback_data = $row->callback_query->data;
- //$callback_id = $row->callback_query->id;
-
+
$inlineID = $row->callback_query->message->message_id;
$inlineID_old = $mc->get($chatID.MC_INLINE_ID);
-
+
// check if request comes from active inline item
if ($inlineID != $inlineID_old) { // expired session
// If called callback comes from an old inline item do not answer
if (DEBUG) warning("That's an old callback!");
die();
}
-
+
// Finally, check actual state and do things
$status = $mc->get($chatID.MC_STATUS);
if (!$status) {
@@ -90,7 +90,7 @@ if (isset ($row->callback_query)) {
}
if (DEBUG) info("Starting from status $status");
-
+
// Callback state machine
switch ($status) {
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
@@ -100,17 +100,17 @@ if (isset ($row->callback_query)) {
case STATE_IDLE:
switch ($callback_data){
case MSG_DELETE:
-
+
// remove current message
- $sql = new mysqli('localhost', MYSQL_USER, MYSQL_PASSWORD, MYSQL_DB);
+ $sql = new Sqlite3(DBFILE);
$IDdelete = $mc->get($chatID.MC_DELETE_SCHEDULED_ID) or error("No ID to delete");
- $sql->query("DELETE FROM ".MYSQL_TABLE." WHERE ID=$IDdelete")
- or error("Can't make the query, SQL error ".$sql->error);
-
+ $sql->query("DELETE FROM telegram_post WHERE ID=$IDdelete")
+ or error("Can't make the query, SQL error ".$sql->lastErrorMsg());
+
$sql->close();
-
+
$offset = $mc->get($chatID.MC_LIST_NUMBER);
-
+
if ($offset > 0) {
$offset--;
}
@@ -128,37 +128,37 @@ if (isset ($row->callback_query)) {
if (DEBUG) warning("Callback request is not accepted in status $status");
die();
}
-
+
$archivedMsg = navigateMsgArchive($offset, $mc, $chatID);
-
+
$answer = editMessageText($chatID, $inlineID, $archivedMsg['text'],
"HTML", false, $archivedMsg['kbd'] );
$answer = json_decode($answer);
-
+
$mc->set($chatID.MC_LIST_NUMBER, $offset)
or $mc->replace($chatID.MC_LIST_NUMBER, $offset);
-
+
die();
break;
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* END STATE_IDLE
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
+
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* entering STATE_MSG_ANSWER - callback
* you can: (after you sent a message) choose if forward to
* channel or schedule it
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
+
case STATE_MSG_ANSWER: // only accessible by callback
-
+
/////// spostare di là
if (!(isset($callback_data))) {
//$mc->replace($chatID.MC_STATUS, STATE_IDLE);
wrong_action($chatID);
die();
}
-
+
switch ($callback_data) {
case MSG_YES:
// forward previously sent message
@@ -167,9 +167,9 @@ if (isset ($row->callback_query)) {
or error("Something is wrong with memcached");
$msg = $mc->get($chatID.MC_FORWARD_MSG)
or error("Can't forward message\n");
-
+
forwardMessage(API_CHANNEL_ID, $msg->message->chat->id, $msg->message->message_id, FORWARD_SILENT);
-
+
// Remove kbd
$text = "Invio effettuato correttamente";
editMessageText($chatID, $inlineID, $text);
@@ -178,32 +178,34 @@ if (isset ($row->callback_query)) {
//~ "&text=".urlencode($text);
//~ file_get_contents($url);
break;
-
+
case MSG_NO:
$status = $mc->replace($chatID.MC_STATUS, STATE_IDLE)
or error("Something is wrong with memcached");
-
+
// destroy saved message?
$text = "Invio annullato correttamente";
editMessageText($chatID, $inlineID, $text);
break;
-
+
case MSG_SCHEDULE:
- // == from here can be put in a function ==
- $status = $mc->replace($chatID.MC_STATUS, STATE_WAIT_DATE) or die();
- $currentTab = array(
+ // == from here can be put in a function ==
+ info('status MSG_SCHEDULE');
+ $status = $mc->replace($chatID.MC_STATUS, STATE_WAIT_DATE) or error(__FILE__ . __LINE__);
+ $currentTab = array(
'month' => date('n'),
'year' => date('Y'),
'day' => null
);
-
+
$reply = getCalendarTab($currentTab['month'], $currentTab['year']);
-
- $mc->set($chatID.MC_DATE_MSG, $currentTab) or $mc->replace($chatID.MC_DATE_MSG, $currentTab) or die ();
-
+ info('calendar tab: ' . $reply);
+
+ $mc->set($chatID.MC_DATE_MSG, $currentTab) or $mc->replace($chatID.MC_DATE_MSG, $currentTab) or error(__FILE__ . __LINE__);
+
$text="Quando vuoi inviare il messaggio?";
editMessageText($chatID, $inlineID, $text, "HTML", false, $reply);
-
+
$mc->set($chatID.MC_INLINE_ID, $inlineID) or $mc->replace($chatID.MC_INLINE_ID, $inlineID)
or error("Something is wrong with memcached");
// == end ==
@@ -213,15 +215,15 @@ if (isset ($row->callback_query)) {
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* END STATE_MSG_ANSWER
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
+
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* entering STATE_WAIT_DATE - callback
* you can: choose the date of scheduled message(s)
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
case STATE_WAIT_DATE:
$currentTab = $mc->get($chatID.MC_DATE_MSG)
or error("Something is wrong with memcached");
-
+
// two cases: change page or confirm date
if ($callback_data == '>') {
// add 1 to month
@@ -233,9 +235,9 @@ if (isset ($row->callback_query)) {
}
$mc->set($chatID.MC_DATE_MSG, $currentTab) or $mc->replace($chatID.MC_DATE_MSG, $currentTab)
or error("Something is wrong with memcached");
-
+
$text = "Il calendario del ".$currentTab['month']."-".$currentTab['year'];
-
+
// get new inline container
}
elseif ($callback_data == '<') {
@@ -244,9 +246,9 @@ if (isset ($row->callback_query)) {
else {
$currentTab['month'] = 12;
$currentTab['year'] -=1;
- }
+ }
$text = "Il calendario del ".$currentTab['month']."-".$currentTab['year'];
-
+
$mc->set($chatID.MC_DATE_MSG, $currentTab) or $mc->replace($chatID.MC_DATE_MSG, $currentTab)
or error("Something is wrong with memcached");
}
@@ -266,59 +268,59 @@ if (isset ($row->callback_query)) {
error("Not a numerical day, how you did it?!?");
$currentTab['day'] = $callback_data;
$mc->set($chatID.MC_DATE_MSG, $currentTab) or $mc->replace($chatID.MC_DATE_MSG, $currentTab) or die ("Failed to save data at Memcached server");
-
+
// Display time inline keyboard
$kbd = new InlineKbd;
-
+
$firstHour = date('Ynj') == $currentTab['year'].$currentTab['month'].$currentTab['day']?
date('G')+1 : 8;
-
+
for ($i = 8; $i <= 21; $i++) {
if ($i < $firstHour)
$kbd->insertItem(" ", "null");
else
$kbd->insertItem("$i".":00", $i);
-
+
if ($i == 14)
$kbd->pushLine();
}
$kbd->pushLine();
-
+
$kbd->insertItem("$EMOJI_X Annulla", MSG_ABORT);
-
+
$kbd->pushLine();
-
-
+
+
$text="A che ora vuoi inviare il messaggio?";
-
+
//~ $url = API_URL.API_TOKEN."/editMessageText?chat_id=".($chatID).
//~ "&message_id=".$inlineID .
//~ "&text=".urlencode($text)."&reply_markup=".$reply;
//~ file_get_contents($url);
-
+
editMessageText($chatID, $inlineID, $text, "HTML",
false, $kbd->getKeyboard());
-
+
$mc->replace($chatID.MC_STATUS, STATE_WAIT_TIME) or die();
break;
}
-
+
// If answer is < or > remain in current state and update calendar
$reply = getCalendarTab($currentTab['month'], $currentTab['year']);
-
+
//~ $url = API_URL.API_TOKEN."/editMessageText?chat_id=".($chatID).
//~ "&message_id=".$inlineID .
//~ "&text=".urlencode($text)."&reply_markup=".$reply;
//~ file_get_contents($url);
editMessageText($chatID, $inlineID, $text, "HTML", false, $reply);
-
+
$mc->set($chatID.MC_INLINE_ID, $inlineID) or $mc->replace($chatID.MC_INLINE_ID, $inlineID);
-
+
break;
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* END STATE_WAIT_DATE
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
+
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* entering STATE_WAIT_TIME - callback
* you can: choose the time of scheduled message(s)
@@ -335,52 +337,52 @@ if (isset ($row->callback_query)) {
if (DEBUG) botlog("[EE] Not a numeric time\n");
die();
}
-
+
$currentTab = $mc->get($chatID.MC_DATE_MSG);
$msg = $mc->get($chatID.MC_FORWARD_MSG);
-
-
+
+
// Message preview in scheduling list is not formatted!
$text = htmlspecialchars($msg->message->text);
-
+
+ $dateObj = DateTime::createFromFormat('Y-n-j-G-e', $currentTab['year'] . '-' . $currentTab['month'] . '-' . $currentTab['day'] . '-' . $callback_data . '-Europe/Rome');
+ $dateObj->setTimezone(new DateTimeZone('UTC'));
+ $formattedDate = $dateObj->format('Y-m-d H:i:s');
+
+
// add to database (mysql)
- $sql = new mysqli('localhost', MYSQL_USER, MYSQL_PASSWORD, MYSQL_DB);
+ $sql = new SQLite3(DBFILE);
// Build up mysql query
$value = "(";
$value .= $msg->message->message_id;
$value .= ",";
$value .= $msg->message->chat->id;
$value .= ",";
- $value .= "'".$currentTab['year'].'-';
- $value .= $currentTab['month'].'-';
- $value .= $currentTab['day'].' ';
- $value .= $callback_data.":00:00'";
+ $value .= "'$formattedDate'";
$value .= ",";
if (isset($text))
- $value .= "'".$sql->escape_string($text)."'";
+ $value .= "'".$sql->escapeString($text)."'";
else
$value .= "''";
$value .= ",";
if (isset($msg->message->forward_from->username))
- $value .= "'".$sql->escape_string($msg->message->forward_from->username)."'";
+ $value .= "'".$sql->escapeString($msg->message->forward_from->username)."'";
elseif (isset($msg->message->from->username))
- $value .= "'".$sql->escape_string($msg->message->from->username)."'";
+ $value .= "'".$sql->escapeString($msg->message->from->username)."'";
else
- $value .= "''";
+ $value .= "''";
$value .= ");";
-
- info("Saving post in ".MYSQL_TABLE.", scheduled date: ".$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);
+
+ $query = "INSERT INTO telegram_post (MessageID,ChatID,DateTime,Text,Author) VALUES ".$value;
+ info('saving post in database, query: ' . $query);
+ $sql->query($query) or error("Can't make the query, SQL error ".$sql->lastErrorMsg());
$sql->close();
-
+
$text = "Programmazione avvenuta con successo";
-
+
editMessageText($chatID, $inlineID, $text);
-
+
break;
}
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
@@ -391,23 +393,21 @@ if (isset ($row->callback_query)) {
// HANDLE A COMMON MESSAGE (text/commands/photos...)
elseif (isset($row->message)) {
+ info('handling common message');
// Load variables
$chatID = $row->message->chat->id;
// Check if it was thrown by admitted users
- if (in_array($row->message->from->username, BOT_ALLOWED_USERS)) {
- info( ' Telegram: forwarding to channel... ');
- forwardMessage(API_CHANNEL_ID, $row->message->chat->id, $row->message->message_id, FORWARD_SILENT);
- }
- else if (in_array($row->message->from->username, BOT_BETA_TESTERS)) {
-
+if (in_array($row->message->from->username, BOT_ALLOWED_USERS)) {
+ info('authorized user ok');
+
// Finally, check actual state and do things
$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");
-
+ info("Starting from status $status");
+
// Reset CMD
if (($command = getCommand($row->message))['command'] == '/reset') {
warning("Reset command received");
@@ -432,32 +432,32 @@ elseif (isset($row->message)) {
case STATE_IDLE:
if (($command = getCommand($row->message)) != null) {
info("Command received: $command[command] with options $command[options]");
-
+
switch ($command['command']) {
case '/help':
case '/start':
// Send some explainations about this bot
sendMessage($chatID,$WELCOME_MESSAGE, "HTML");
break;
-
+
case '/edit':
// not yet implemented
sendMessage($chatID, "Bravo! Hai trovato un comando non ancora implementato. Apri il codice su GitHub e lavoraci su");
break;
-
+
case '/list':
-
+
$archivedMsg = navigateMsgArchive(0, $mc, $chatID);
-
+
$answer = sendMessage($chatID, $archivedMsg['text'], "HTML", false, false, null, $archivedMsg['kbd']);
$answer = json_decode($answer);
// Should forward the message if is not pure text
//forwardMessage($chatID, $row['ChatID'], $row['MessageID']);
-
-
+
+
$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;
@@ -469,14 +469,14 @@ elseif (isset($row->message)) {
}
else { // not a command (text?)
// you probably want to forward a message?
-
+
// Check what kind of message is this
$kbd = new InlineKbd;
$kbd->insertItem("SI ".$EMOJI_THUMBSUP,MSG_YES);
$kbd->insertItem("NO ".$EMOJI_THUMBSDOWN,MSG_NO);
$kbd->insertItem("Programma ".$EMOJI_CLOCK,MSG_SCHEDULE);
$kbd->pushLine();
-
+
// This bot accepts only text, images, videos and locations
if (!(isset($row->message->photo) or isset($row->message->location)
or isset($row->message->video) or isset($row->message->text) )) {
@@ -484,27 +484,27 @@ elseif (isset($row->message)) {
error("Not supported content");
// Program stops here
}
-
+
$mc->set($chatID.MC_FORWARD_MSG, $row)
or $mc->replace($chatID.MC_FORWARD_MSG, $row)
or error("Something is wrong with memcached");
-
+
// SetUp inline messages (OK, NO, SCHEDULE)
-
+
$text="Vuoi condividere sul canale?"; // NOME CANALE ".API_CHANNEL_ID."?";
-
+
$query = sendMessage($row->message->chat->id,
$text,
null, false, false, null,
$kbd->getKeyboard());
-
+
//~ $answer = file_get_contents($query);
$answer = json_decode($query);
-
+
$inlineID = $answer->result->message_id;
if (DEBUG) info("Callback message id: $inlineID");
-
-
+
+
$mc->replace($chatID.MC_STATUS, STATE_MSG_ANSWER);
$mc->set($chatID.MC_INLINE_ID, $inlineID) or $mc->replace($chatID.MC_INLINE_ID, $inlineID);
}
@@ -512,7 +512,7 @@ elseif (isset($row->message)) {
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* END STATE_IDLE
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
+
default:
wrong_action($chatID);
}
diff --git a/schedule.php b/schedule.php
index 1ec9f6d..4feba7d 100644
--- a/schedule.php
+++ b/schedule.php
@@ -3,22 +3,21 @@
* This script must be called from the system every hour (i.e. cron)
*/
-require_once('config.php');
+require_once('/data/config.php');
require_once('shared.php');
if (DEBUG) botlog("\n\n\n".'[II] Scheduler starting at ' . date('Y-m-d H:i:s') . ' ====================' . "\n\n");
-// Get current date in MySQL DATETIME default format
-$dateID = date('Y-n-d G:00');
+// Get current date in sqlite datetime format
+$dateID = date('Y-m-d H:i:s');
// Connect to MySQL DB
-$sql = new mysqli('localhost', MYSQL_USER, MYSQL_PASSWORD, MYSQL_DB);
-$query = $sql->query("SELECT MessageID,ChatID,DateTime,Text,Author FROM ".MYSQL_TABLE.
- " WHERE DateTime<='".$dateID."'")
+$sql = new Sqlite3(DBFILE);
+$query = $sql->query("SELECT MessageID,ChatID,DateTime,Text,Author FROM telegram_post WHERE DateTime<='".$dateID."'")
or error("Can't make the query, SQL error ".$sql->error);
// Post all messages (only text)
-while ($row = $query->fetch_assoc()) {
+while ($row = $query->fetchArray()) {
info("Publishing message $row[MessageID]");
/*
$bot_query = API_URL . API_TOKEN . '/sendMessage?' .
@@ -32,7 +31,7 @@ while ($row = $query->fetch_assoc()) {
}
-// Remove just posted messages (and any eventual previous one)
-$sql->query("DELETE FROM ".MYSQL_TABLE." WHERE DateTime<='".$dateID."'");
+// Remove just posted messages (and possibly any previous one)
+$sql->query("DELETE FROM telegram_post WHERE DateTime<='".$dateID."'");
$sql->close();
?>
diff --git a/shared.php b/shared.php
index 32ca1e5..d499a31 100644
--- a/shared.php
+++ b/shared.php
@@ -1,31 +1,29 @@
entities))
@@ -44,40 +42,40 @@
}
return null;
}
-
+
/**** Telegram query functions ****/
-
+
// return a message object, null if is error
- function sendMessage($chat_id, $text, $parse_mode = null,
+ function sendMessage($chat_id, $text, $parse_mode = null,
$disable_web_preview = false,
- $disable_notification = false,
- $reply_to_message_id = null,
+ $disable_notification = false,
+ $reply_to_message_id = null,
$reply_markup = null) {
$query = API_URL.API_TOKEN."/sendMessage?chat_id=".$chat_id.
"&text=".urlencode($text);
-
+
if ($parse_mode != null) $query .= "&parse_mode=$parse_mode";
if ($reply_markup != null) $query .= "&reply_markup=$reply_markup";
if ($disable_web_preview != false) $query .= "&disable_web_preview=$disable_web_preview";
if ($disable_notification != false) $query .= "&disable_notification=$disable_notification";
if ($reply_to_message_id != null) $query .= "&reply_to_message_id=$reply_to_message_id";
if ($reply_markup != null) $query .= "&reply_markup=$reply_markup";
-
+
$answer = file_get_contents($query);
if ($answer === false) warning("Something is wrong in sendMessage - chat_id: $chat_id - text: $text");
return $answer;
}
-
+
//
function forwardMessage($chat_id, $from_chat_id,
$message_id,
$disable_notification = null) {
-
+
$query = API_URL.API_TOKEN."/forwardMessage?" .
"chat_id=".urlencode($chat_id) .
"&from_chat_id=" . urlencode($from_chat_id) .
"&message_id=" . urlencode($message_id);
-
+
if ($disable_notification != null) $query .= "&disable_notification=$disable_notification";
$answer = file_get_contents($query);
@@ -93,110 +91,112 @@
$parse_mode = null,
$disable_web_page_preview = false,
$reply_markup = null) {
-
+
$query = API_URL . API_TOKEN . "/editMessageText?" .
"chat_id=".urlencode($chat_id) .
"&message_id=" . urlencode($message_id).
"&text=" . urlencode($text);
-
+
if ($parse_mode != null) $query .= "&parse_mode=$parse_mode";
if ($disable_web_page_preview != false) $query .= "&disable_web_page_preview=$disable_web_page_preview";
if ($reply_markup != null) $query .= "&reply_markup=$reply_markup";
$answer = file_get_contents($query);
if ($answer === false) warning("Something is wrong in editMessageText - chat_id: $chat_id - message_id: $message_id");
+ info("edit message answer: $answer");
return $answer;
}
-
+
//
function deleteMessage($chat_id, $message_id) {
-
+
$query = API_URL . API_TOKEN . "/deleteMessage?" .
"chat_id=".urlencode($chat_id) .
"&message_id=" . urlencode($message_id);
-
+
$answer = file_get_contents($query);
if ($answer === false) warning("Something is wrong in deleteMessage - chat_id: $chat_id - message_id: $message_id");
return $answer;
}
-
+
function sendPhoto ($chat_id, $photo,
$caption = null,
$reply_markup = null,
- $disable_notification = false,
+ $disable_notification = false,
$reply_to_message_id = null ) {
-
+
$query = API_URL . API_TOKEN . "/sendPhoto?" .
"chat_id=".urlencode($chat_id) .
"&photo=" . urlencode($photo);
-
+
$query .= "&disable_notification=$disable_notification";
if ($reply_to_message_id != null) $query .= "&reply_to_message_id=$disable_web_page_preview";
if ($reply_markup != null) $query .= "&reply_markup=$reply_markup";
if ($caption != null) $query .= "&caption=$caption";
-
+
$answer = file_get_contents($query);
}
-
+
// Makes the calendar inline keyboard
function getCalendarTab ($month, $year) {
+ info('getting calendar...');
$kbd = new InlineKbd;
-
+
$days = array("L", "M", "M", "G", "V", "S", "D");
-
- for ($i = 0; $i < 7; $i++)
+
+ for ($i = 0; $i < 7; $i++)
$kbd->insertItem("$days[$i]", "null");
$kbd->pushLine();
-
+
$daysInMonth = cal_days_in_month (CAL_GREGORIAN , $month , $year);
$date = $year."-".$month;
$isCurrentMonth = date('nY') == $month.$year;
$startingDay = $isCurrentMonth ? date('j') : 1;
- if (DEBUG) botlog("[II] First day: ".$date.'-'.$startingDay."\n");
+ info("[II] First day: ".$date.'-'.$startingDay."\n");
$firstDay = date("N", strtotime($date.'-'.$startingDay));
-
+
// blank buttons
for ($i = 1; $i < $firstDay; $i++)
$kbd->insertItem(" ", "null");
-
+
for ($numDay = $startingDay; $numDay <= $daysInMonth; $numDay++, $i++) {
$kbd->insertItem("$numDay", "$numDay");
-
+
if ($i >= 7) {
$kbd->pushLine();
$i = 0;
}
}
-
- // empty buttons
+
+ // empty buttons
if ($i != 0) {
for (; $i > 1 and $i <= 7; $i++)
$kbd->insertItem(" ", "null");
$kbd->pushLine();
}
-
-
+
+
if ($isCurrentMonth)
$kbd->insertItem(" ", "null");
else
$kbd->insertItem("<", "<");
$kbd->insertItem("$EMOJI_X Annulla",MSG_ABORT);
$kbd->insertItem(">", ">");
-
+
$kbd->pushLine();
-
+
return $kbd->getKeyboard();
}
-
-
+
+
// Function used to get an archived message
// and make an appropriate keyboard
-
+
// -- I dont' like so much --
function navigateMsgArchive ($msgNumber, $mc, $chatID) {
- $sql = new mysqli('localhost', MYSQL_USER, MYSQL_PASSWORD, MYSQL_DB);
- $numbers = $sql->query("SELECT COUNT(*) FROM ".MYSQL_TABLE);
- $numbers = $numbers->fetch_array()[0];
+ $sql = new Sqlite3(DBFILE);
+ $numbers = $sql->query("SELECT COUNT(*) FROM telegram_post");
+ $numbers = $numbers->fetchArray()[0];
if ($numbers == 0) {
return array( "text" => "Nessun messaggio programmato",
"kbd" => null);
@@ -207,17 +207,15 @@
//~ die();
}
else {
- $query = $sql->query("SELECT DATE_FORMAT(DateTime,'%d/%m/%Y ore %H') as DateTimeFormat,ChatID, MessageID,Text,Author,ID FROM ".MYSQL_TABLE."
- ORDER BY DateTime ASC LIMIT 1 OFFSET $msgNumber") or error("Can't make the query, SQL error ".$sql->error);
-
- //while($row = $query->fetch_assoc()) {
- $row = $query->fetch_assoc();
-
+ $query = $sql->query("SELECT DateTime as DateTimeFormat,ChatID, MessageID,Text,Author,ID FROM telegram_post ORDER BY DateTime ASC LIMIT 1 OFFSET $msgNumber") or error("Can't make the query, SQL error ".$sql->error);
+
+ $row = $query->fetchArray();
+
$mc->set($chatID.MC_DELETE_SCHEDULED_ID, $row['ID'])
or $mc->replace($chatID.MC_DELETE_SCHEDULED_ID, $row['ID']);
$sql->close();
-
+
$kbd = new InlineKbd;
$kbd->insertItem($row['DateTimeFormat'], "null");
$kbd->pushLine();
@@ -232,45 +230,45 @@
$kbd->insertItem(" ","null");
$kbd->pushLine();
$kbd = $kbd->getKeyboard();
-
-
+
+
if ($row['Text'] != ''){
$text="$row[Text]\n$row[Author]"; // NOME CANALE ".API_CHANNEL_ID."?";
}
else
$text="Non testo puro";
-
+
return array( "text" => $text,
"kbd" => $kbd);
}
}
-
+
function not_authorized($chatID) {
$query = API_URL . API_TOKEN . '/sendMessage?' .
'chat_id=' . urlencode($chatID) .
- "&text=".urlencode("Utente non autorizzato\nhttps://www.youtube.com/watch?v=HO8ctP_QNZc");
-
+ "&text=".urlencode("Questo bot è solo per il Consiglio Direttivo.\nForse cercavi @golem_empoli (canale) oppure https://golem.linux.it/ (sito)");
+
file_get_contents($query);
-
+
die();
}
-
+
function wrong_action($chatID) {
$query = API_URL . API_TOKEN . '/sendMessage?' .
'chat_id=' . urlencode($chatID) .
"&text=Azione non corretta";
-
+
file_get_contents($query);
-
+
die();
}
-
-
+
+
class InlineKbd
{
private $keyboard = array();
private $currentLine = array();
-
+
public function pushLine() {
$this->keyboard[] = $this->currentLine;
$this->currentLine = array();
@@ -282,7 +280,7 @@
);
}
public function getKeyboard() {
- $kbd = array("inline_keyboard" => $this->keyboard);
+ $kbd = array("inline_keyboard" => $this->keyboard);
return json_encode($kbd);
}
}
diff --git a/tgbot.cron b/tgbot.cron
new file mode 100644
index 0000000..7c95e82
--- /dev/null
+++ b/tgbot.cron
@@ -0,0 +1,2 @@
+* * * * * cd /var/www/html && /usr/local/bin/php schedule.php
+