diff --git a/.gitignore b/.gitignore
index 4f4773f..8b13789 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1 @@
-config.php
+
diff --git a/bot-2-channel-email-POST.php b/bot-2-channel-email-POST.php
deleted file mode 100644
index c821fa9..0000000
--- a/bot-2-channel-email-POST.php
+++ /dev/null
@@ -1,133 +0,0 @@
-message))
- {
- if (isset($row->message->from->username))
- {
- if (DEBUG) botlog('[II] ' . $row->message->from->username . ' has written «' . $row->message->text . '»' . "\n");
-
- if (! isCommand($row->message))
- {
- if (in_array($row->message->from->username, BOT_ALLOWED_USERS))
- {
- if (DEBUG) botlog( ' Telegram: forwarding to channel... ');
- $r = forwardChannel($row->message);
- if (DEBUG) botlog(($r ? 'done' : 'error') . "\n");
-
- if (DEBUG) botlog(' Mail: mailing to address... ');
- $r = sendEmail($row->message);
- if (DEBUG) botlog(($r ? 'done' : 'not done') . "\n");
- }
- else if (DEBUG) botlog('[EE] User ' . $row->message->from->username . ' not authorized!' . "\n");
- }
- else if (DEBUG) botlog('[WW] Command not allowed' . "\n");
- }
- else if (DEBUG) botlog('[EE] from->username not set!' . "\n");
- }
-
- echo '{}' . "\n";
- botlog('[II] End at ' . date('Y-m-d H:i:s') . ' ====================' . "\n");
- /* ===== END of MAIN PROGRAM ===== */
-
- /* ===== FUNCTIONS ===== */
- function forwardChannel($message)
- {
- $query = API_URL . API_TOKEN . '/forwardMessage?' .
- 'chat_id=' . urlencode(API_CHANNEL_ID) .
- '&from_chat_id=' . urlencode($message->chat->id) .
- '&message_id=' . urlencode($message->message_id);
- if (DEBUG) botlog($query);
- return file_get_contents($query);
- }
-
- function sendEmail($message)
- {
- $link = isLink($message);
- if ($link)
- {
- $title = getHtmlTitle($link);
- if ($title)
- {
- $subject = $title;
- $text = mb_convert_encoding($message->text, 'UTF-8');
- $headers = 'From: ' . MAIL_FROM_ADDR . "\n" . 'Content-Type: text/plain; charset=UTF-8';
-
- if (mail(MAIL_TO_ADDR, $subject, $text, $headers))
- return true;
- }
- }
- return false;
- }
-
- /*
- * Retrieves link content, then, if it is HTML, returns the title (if any), else returns false
- * http://stackoverflow.com/questions/399332/fastest-way-to-retrieve-a-title-in-php
- */
- function getHtmlTitle($link)
- {
- $html = file_get_contents($link);
- if ($html)
- {
- if (! preg_match('/
(.*)<\/title>/siU', $html, $titleMatches))
- {
- if (DEBUG) botlog('[II] Not HTML compliant link');
- return false;
- }
-
- $title = trim(preg_replace('/\s+/', ' ', $titleMatches[1]));
- return $title;
- }
- return false;
- }
-
- /*
- * Checks wheter message has a link (and returns it) or not (and returns false)
- * Only the first link is checked, bicos unn'aveo voglia di fanne altri - in inglisc un rend
- */
- function isLink($message)
- {
- if (isset($message->entities))
- {
- foreach($message->entities as $entity)
- {
- if ($entity->type == 'url')
- {
- return substr(utf8_decode($message->text), $entity->offset, $entity->length);
- }
- }
- }
- return false;
- }
-
- /*
- * Checks wheter message contains commands
- * Sì, il codice fa schifo e non è ottimizzato,
- * ma del resto è stato fatto in fretta e furia e, come detto,
- * è più per farsi un'idea e capire un po' come funziona 'sta cosa
- * Verrà abbellito durante qualche ora del GOLEM
- */
-
- function isCommand($message)
- {
- if (isset($message->entities))
- {
- foreach($message->entities as $entity)
- {
- if ($entity->type == 'bot_command') return true;
- }
- }
- return false;
- }
-
-?>
diff --git a/config.php b/config.php
new file mode 100644
index 0000000..dbe6633
--- /dev/null
+++ b/config.php
@@ -0,0 +1,58 @@
+
diff --git a/feed-2-channel-email.php b/feed-2-channel-email.php
deleted file mode 100644
index 4cb5557..0000000
--- a/feed-2-channel-email.php
+++ /dev/null
@@ -1,43 +0,0 @@
-', '', $content);
-
- $feed = new SimpleXMLElement($content); /* KABOOM */
-
- foreach($feed->channel->item as $item)
- {
- $timestamp = strtotime($item->pubDate);
- if ($timestamp > $latestGetTime)
- {
- echo 'Now publishing: ' . $item->title . "\n";
-
- /* Send to Telegram Channel */
- if (DEBUG) echo 'Publishing on Telegram channel...';
- $message = $item->title . "\n\n" . $item->description . "\n" . $item->link;
- $r = file_get_contents(API_URL . API_TOKEN . '/sendMessage?chat_id=' . urlencode(API_CHANNEL_ID) . '&text=' . urlencode($message));
- echo ($r ? 'done' : 'error') . "\n";
-
- /* Send to Email/Mailing List */
- if (DEBUG) echo 'Sending to email address...';
- $title = mb_convert_encoding($item->title, 'ASCII');
- $text = mb_convert_encoding($item->description, 'UTF-8') . "\n" . $item->link;
- $r = mail(MAIL_TO_ADDR, $title, $text, 'From: ' . MAIL_FROM_ADDR . "\n" . 'Content-Type: text/plain; charset=UTF-8');
- echo ($r ? 'done' : 'error') . "\n";
-
- echo "\n";
- }
- }
-
- file_put_contents('latestFeedTimestamp.conf', $newLatestGetTime );
- /* ===== END of MAIN PROGRAM ===== */
-
-?>
diff --git a/main.php b/main.php
new file mode 100644
index 0000000..714bba2
--- /dev/null
+++ b/main.php
@@ -0,0 +1,418 @@
+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);
+ die();
+}
+// HANDLE A CALLBACK
+elseif (isset ($row->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_ALLOWED_USERS) or not_authorized($chatID);
+
+ // Answer to the callback query (remove the loading sign)
+ if (DEBUG) 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();
+ }
+}
+// HANDLE A COMMON MESSAGE (text/commands/keyboard)
+else {
+ // Load variables
+ $chatID = $row->message->chat->id;
+
+
+ // Check if it was thrown by admitted users
+ in_array($row->message->from->username, BOT_ALLOWED_USERS) or not_authorized($chatID);
+
+
+}
+
+// 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
+if (DEBUG) info("Starting from status $status");
+
+// ricordati di schiantare quando ricevi un messaggio invece di una callback
+
+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();
+ }
+
+ // Search for a command
+ if (($command = getCommand($row->message)) != -1) {
+ info("Command received: $command[command] with options $command[options]");
+
+ switch ($command['command']) {
+ case '/help':
+ $resp = array("remove_keyboard" => true);
+ $resp = json_encode($resp);
+
+ $query = API_URL . API_TOKEN . '/sendmessage?' .
+ 'chat_id=' . urlencode($chatID) .
+ '&text='.urlencode($WELCOME_MESSAGE).
+ '&reply_markup='.$resp;
+ file_get_contents($query);
+ break;
+
+ case '/list':
+ $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);
+
+ $text = "Prossimi 10 messaggi programmati";
+ $i = 1;
+ while ($row = $query->fetch_assoc()) {
+ $text .= "\n".$i." - ". $row['DateTime'];
+ $i++;
+ }
+ $sql->close();
+
+ $query = API_URL.API_TOKEN."/sendmessage?chat_id=".($chatID).
+ "&text=".urlencode($text).
+ "&reply_markup=".$reply;
+ $answer = file_get_contents($query);
+ break;
+
+ default:
+ if (DEBUG) warning("$command[command] is not a valid command");
+ }
+ }
+ else { // not a command (pure text)
+ // you probably want to forward a message?
+ $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)
+ $container[] = array(
+ array(
+ "text" => "SI ".$EMOJI_THUMBSUP,
+ "callback_data" => MSG_YES
+ ),
+ array(
+ "text" => "NO ".$EMOJI_THUMBSDOWN,
+ "callback_data" => MSG_NO
+ ),
+ array(
+ "text" => "Programma ".$EMOJI_CLOCK,
+ "callback_data" => MSG_SCHEDULE
+ ));
+ $resp = array(
+ "inline_keyboard" => $container);
+ $reply = json_encode($resp);
+
+ $text="Vuoi condividere sul canale?"; // NOME CANALE ".API_CHANNEL_ID."?";
+
+ $query = API_URL.API_TOKEN."/sendmessage?chat_id=".($row->message->chat->id).
+ "&text=".urlencode($text).
+ "&reply_markup=".$reply;
+ $answer = file_get_contents($query);
+ //if (DEBUG) botlog("\nINLINE ANSWER\n\n".$answer);
+ $answer = json_decode($answer);
+
+ $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);
+ }
+ break;
+
+
+ case STATE_MSG_ANSWER: // only accessible by callback
+ 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
+ $mc->replace($chatID.MC_STATUS, STATE_IDLE)
+ or error("Something is wrong with memcached");
+ $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);
+
+ // Remove kbd
+ $text = "Invio effettuato correttamente";
+ $url = API_URL.API_TOKEN."/editMessageText?chat_id=".($chatID).
+ "&message_id=".$inlineID .
+ "&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";
+ $url = API_URL.API_TOKEN."/editMessageText?chat_id=".($chatID).
+ "&message_id=".$inlineID .
+ "&text=".urlencode($text);
+ file_get_contents($url);
+ 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(
+ 'month' => date('n'),
+ 'year' => date('Y'),
+ 'day' => null
+ );
+
+ $container = getCalendarTab($currentTab['month'], $currentTab['year']);
+
+ $mc->set($chatID.MC_DATE_MSG, $currentTab) or $mc->replace($chatID.MC_DATE_MSG, $currentTab) or die ();
+
+ $container = array(
+ "inline_keyboard" => $container);
+
+ $text="Quando vuoi inviare il messaggio?";
+ $reply = json_encode($container);
+
+ $url = API_URL.API_TOKEN."/editMessageText?chat_id=".($chatID).
+ "&message_id=".$inlineID .
+ "&text=".urlencode($text).
+ "&reply_markup=".$reply;
+
+ file_get_contents($url);
+
+ $mc->set($chatID.MC_INLINE_ID, $inlineID) or $mc->replace($chatID.MC_INLINE_ID, $inlineID)
+ or error("Something is wrong with memcached");
+ // == end ==
+ break;
+ }
+ break;
+
+ case STATE_WAIT_DATE:
+ if (!isset($callback_data)) {
+ wrong_action($chatID);
+ die();
+ }
+
+ $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
+ if ($currentTab['month'] < 12)
+ $currentTab['month'] +=1;
+ else {
+ $currentTab['month'] = 1;
+ $currentTab['year'] +=1;
+ }
+ $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 == '<') {
+ if ($currentTab['month'] > 1)
+ $currentTab['month'] -=1;
+ 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");
+ }
+ elseif ($callback_data == 'null') {
+ // not a valid button (like week days buttons)
+ die();
+ }
+ elseif ($callback_data == MSG_ABORT) {
+ $text = "Invio annullato correttamente";
+ $url = API_URL.API_TOKEN."/editMessageText?chat_id=".($chatID).
+ "&message_id=".$inlineID .
+ "&text=".urlencode($text);
+ file_get_contents($url);
+ $mc->replace($chatID.MC_STATUS, STATE_IDLE) or die();
+ die();
+ }
+ else {
+ // read current day, verify it and then change state
+ if (!$callback_data = intval($callback_data))
+ 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
+ $container = array();
+ $riga = array();
+
+ $firstHour = date('Ynj') == $currentTab['year'].$currentTab['month'].$currentTab['day']?
+ date('G')+1 : 8;
+
+ for ($i = 8; $i <= 21; $i++) {
+ if ($i < $firstHour) {
+ $riga[] = array(
+ "text" => " ",
+ "callback_data" => "null"
+ );
+ }
+ else {
+ $riga[] = array(
+ "text" => "$i".":00",
+ "callback_data" => "$i"
+ );
+ }
+
+ if ($i == 14) {
+ $container[] = $riga;
+ $riga = array();
+ }
+ }
+ $container[] = $riga;
+
+ $container[] = array(array(
+ "text" => "$EMOJI_X Annulla",
+ "callback_data" => MSG_ABORT
+ ));
+
+ $container = array(
+ "inline_keyboard" => $container);
+
+ $text="A che ora vuoi inviare il messaggio?";
+ $reply = json_encode($container);
+
+ $url = API_URL.API_TOKEN."/editMessageText?chat_id=".($chatID).
+ "&message_id=".$inlineID .
+ "&text=".urlencode($text)."&reply_markup=".$reply;
+ file_get_contents($url);
+
+ $mc->replace($chatID.MC_STATUS, STATE_WAIT_TIME) or die();
+ break;
+ }
+
+ // If answer is < or > remain in current state and update calendar
+ $container = getCalendarTab($currentTab['month'], $currentTab['year']);
+
+ $resp = array(
+ "inline_keyboard" => $container);
+
+ $reply = json_encode($resp);
+
+ $url = API_URL.API_TOKEN."/editMessageText?chat_id=".($chatID).
+ "&message_id=".$inlineID .
+ "&text=".urlencode($text)."&reply_markup=".$reply;
+ file_get_contents($url);
+
+ $mc->set($chatID.MC_INLINE_ID, $inlineID) or $mc->replace($chatID.MC_INLINE_ID, $inlineID);
+
+ break;
+
+ case STATE_WAIT_TIME:
+ $mc->replace($chatID.MC_STATUS, STATE_IDLE);
+ if (!isset($callback_data)) {
+ die();
+ }
+
+ if ($callback_data == MSG_ABORT) {
+ $text = "Invio annullato correttamente";
+ $url = API_URL.API_TOKEN."/editMessageText?chat_id=".($chatID).
+ "&message_id=".$inlineID .
+ "&text=".urlencode($text);
+ file_get_contents($url);
+ $mc->replace($chatID.MC_STATUS, STATE_IDLE) or die();
+ die();
+ }
+ elseif (!$time = intval($callback_data)) {
+ if (DEBUG) botlog("[EE] Not a numeric time\n");
+ die();
+ }
+
+ $currentTab = $mc->get($chatID.MC_DATE_MSG);
+ $msg = $mc->get($chatID.MC_FORWARD_MSG);
+
+ // add to database (mysql)
+
+ // 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 .= ");";
+
+ 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);
+ $sql->close();
+
+ $text = "Programmazione avvenuta con successo";
+
+ $url = API_URL.API_TOKEN."/editMessageText?chat_id=".($chatID).
+ "&message_id=".$inlineID .
+ "&text=".urlencode($text);
+ file_get_contents($url);
+
+ break;
+}
+
+?>
diff --git a/schedule.php b/schedule.php
new file mode 100644
index 0000000..0d1a187
--- /dev/null
+++ b/schedule.php
@@ -0,0 +1,23 @@
+query("SELECT MessageID,ChatID FROM ".MYSQL_TABLE." WHERE DateTime='".$dateID."'");
+while ($row = $query->fetch_assoc()) {
+ info("Publishing message $row[MessageID]");
+ $bot_query = API_URL . API_TOKEN . '/forwardMessage?' .
+ 'chat_id=' . urlencode(API_CHANNEL_ID) .
+ '&from_chat_id=' . urlencode($row['ChatID']) .
+ '&message_id=' . urlencode($row['MessageID']);
+ file_get_contents($bot_query);
+}
+// clean events <= today
+
+$sql->query("DELETE FROM ".MYSQL_TABLE." WHERE DateTime<='".$dateID."'");
+$sql->close();
+?>
diff --git a/shared.php b/shared.php
index 01ec911..5d69db4 100644
--- a/shared.php
+++ b/shared.php
@@ -1,15 +1,166 @@
entities))
+ return -1;
+ foreach ($messaggio->entities as $entity) {
+ if ($entity->type == "bot_command") {
+ if ($NoOffset == true and $entity->offset != 0)
+ return -1;
+ //~ if (DEBUG) botlog("[II] Comando: ".$entity->offset. " ".$messaggio->text);
+ //return substr($messaggio->text, $entity->offset, $entity->length);
+ $ret['command'] = substr($messaggio->text, $entity->offset, $entity->length);
+ $ret['options'] = substr($messaggio->text, $entity->length+$entity->offset+1);
+ if (DEBUG) botlog("[II] Comando: ".$ret['command']."\n");
+ return $ret;
+ }
+ }
+ return -1;
+ }
+
+ // fabbrica una tabellina che in futuro sarà la pagina di calendario specificata da $mese e $anno
+ function getCalendarTab ($month, $year) {
+ $container = array();
+ $riga = array();
+
+ $days = array("L", "M", "M", "G", "V", "S", "D");
+
+ for ($i = 0; $i < 7; $i++) {
+ $element = array(
+ "text" => "$days[$i]",
+ "callback_data" => "null"
+ );
+
+ $riga[] = $element;
+ }
+
+
+ $container[] = $riga;
+ $riga = array();
+
+ $daysInMonth = cal_days_in_month (CAL_GREGORIAN , $month , $year);
+ $date = $year."-".$month;
+ $currentMonth = date('nY') == $month.$year; //magari anche l'anno?
+ $startingDay = $currentMonth ? date('j') : 1;
+ if (DEBUG) botlog("[II] First day: ".$date.'-'.$startingDay."\n");
+ $firstDay = date("N", strtotime($date.'-'.$startingDay));
+
+ // blank buttons
+ for ($i = 1; $i < $firstDay; $i++) {
+ $element = array(
+ "text" => " ",
+ "callback_data" => "null"
+ );
+
+ $riga[] = $element;
+ }
+
+ for ($numDay = $startingDay; $numDay <= $daysInMonth; $numDay++, $i++) {
+ //if ($today <= $numDay) {
+ $element = array(
+ "text" => "$numDay",
+ "callback_data" => "$numDay"
+ );
+ //}
+ //else {
+ /* $element = array(
+ "text" => " ",
+ "callback_data" => "null"
+ );*/
+ //}
+
+ $riga[] = $element;
+
+ if ($i >= 7) {
+ $container[] = $riga;
+ $riga = array();
+ $i = 0;
+ }
+ }
+
+ // empty buttons
+
+ for (; $i > 1 and $i <= 7; $i++) {
+ $element = array(
+ "text" => " ",
+ "callback_data" => "null"
+ );
+
+ $riga[] = $element;
+ }
+
+ if (!empty($riga)) {
+ $container[] = $riga;
+ }
+
+
+ $container[] = array(
+ $currentMonth ?
+ array(
+ "text" => " ",
+ "callback_data" => "null"
+ )
+ :
+ array(
+ "text" => "<",
+ "callback_data" => "<"
+ ),
+ array(
+ "text" => "$EMOJI_X Annulla",
+ "callback_data" => MSG_ABORT
+ ),
+ array(
+ "text" => ">",
+ "callback_data" => ">"
+ ));
+
+ return $container;
+ }
+
+
+ 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");
+
+ 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();
+ }
?>