From a710ce67188110cff9e326d2d1395e867854bc11 Mon Sep 17 00:00:00 2001 From: giomba Date: Sat, 5 Dec 2020 19:28:53 +0100 Subject: [PATCH] porting for docker image this code is hell --- .gitignore | 1 + README | 3 - README.md | 8 ++ config.php => config.sample.php | 30 ++-- main.php | 245 ++++++++++++++++---------------- schedule.php | 15 +- shared.php | 150 ++++++++++--------- 7 files changed, 225 insertions(+), 227 deletions(-) delete mode 100644 README create mode 100644 README.md rename config.php => config.sample.php (85%) 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..8556c2e 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,51 @@ 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', $currentTab['year'] . '-' . $currentTab['month'] . '-' . $currentTab['day'] . '-' . $callback_data); + $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 +392,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 +431,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 +468,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 +483,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 +511,7 @@ elseif (isset($row->message)) { /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * END STATE_IDLE * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - + default: wrong_action($chatID); } diff --git a/schedule.php b/schedule.php index 1ec9f6d..9911b73 100644 --- a/schedule.php +++ b/schedule.php @@ -8,17 +8,16 @@ 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..3ad37ab 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); } }