golem-telegram-bot/shared.php

288 lines
9.3 KiB
PHP
Raw Normal View History

<?php
2020-12-05 21:51:01 +00:00
require_once('/data/config.php');
// Base logging function. All logging functions use this.
// Change this to output everything on stdout, on file, on socket, on whathever you want...
2017-09-24 20:23:45 +00:00
function botlog($info) {
error_log($info);
}
2017-09-24 20:23:45 +00:00
// Unrecoverable error, program must be terminated
function error($message) {
if (DEBUG) botlog("[EE] $message");
if (DEBUG) botlog('[II] BOT request died');
2017-09-24 20:23:45 +00:00
die();
}
2017-09-24 20:23:45 +00:00
// Uncommon event
function warning($message) {
if (DEBUG) botlog("[WW] $message");
2017-09-24 20:23:45 +00:00
}
2017-09-24 20:23:45 +00:00
// Routine debugging informations
function info($message) {
if (DEBUG) botlog("[II] $message");
2017-09-24 20:23:45 +00:00
}
// Interpreta un comando inviato al bot - mettere null o simili invece di -1
2017-09-24 20:23:45 +00:00
function getCommand($messaggio, $NoOffset = true) {
if (!isset($messaggio->entities))
return null;
2017-09-24 20:23:45 +00:00
foreach ($messaggio->entities as $entity) {
if ($entity->type == "bot_command") {
if ($NoOffset == true and $entity->offset != 0)
return null;
2017-09-24 20:23:45 +00:00
//~ 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);
info("Command: $ret[command]");
2017-09-24 20:23:45 +00:00
return $ret;
}
}
return null;
2017-09-24 20:23:45 +00:00
}
/**** Telegram query functions ****/
// return a message object, null if is error
function sendMessage($chat_id, $text, $parse_mode = null,
$disable_web_preview = false,
$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,
2017-11-03 13:41:29 +00:00
$disable_notification = null) {
2017-11-03 13:41:29 +00:00
$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);
2017-11-03 13:41:29 +00:00
if ($answer === false) {
warning("Something is wrong in forwardMessage - chat_id: $chat_id - message_id: $message_id");
warning($answer);
}
return $answer;
}
// omitted "inline parameters", for inline bot funtions (not used here)
function editMessageText($chat_id, $message_id, $text,
$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);
2017-11-06 08:23:41 +00:00
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,
$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
2017-09-24 20:23:45 +00:00
function getCalendarTab ($month, $year) {
info('getting calendar...');
2017-12-16 22:58:36 +00:00
$kbd = new InlineKbd;
2017-09-24 20:23:45 +00:00
$days = array("L", "M", "M", "G", "V", "S", "D");
for ($i = 0; $i < 7; $i++)
2017-12-16 22:58:36 +00:00
$kbd->insertItem("$days[$i]", "null");
$kbd->pushLine();
2017-09-24 20:23:45 +00:00
$daysInMonth = cal_days_in_month (CAL_GREGORIAN , $month , $year);
$date = $year."-".$month;
$isCurrentMonth = date('nY') == $month.$year;
$startingDay = $isCurrentMonth ? date('j') : 1;
info("[II] First day: ".$date.'-'.$startingDay."\n");
2017-09-24 20:23:45 +00:00
$firstDay = date("N", strtotime($date.'-'.$startingDay));
2017-09-24 20:23:45 +00:00
// blank buttons
2017-12-16 22:58:36 +00:00
for ($i = 1; $i < $firstDay; $i++)
$kbd->insertItem(" ", "null");
2017-09-24 20:23:45 +00:00
for ($numDay = $startingDay; $numDay <= $daysInMonth; $numDay++, $i++) {
2017-12-16 22:58:36 +00:00
$kbd->insertItem("$numDay", "$numDay");
2017-09-24 20:23:45 +00:00
if ($i >= 7) {
2017-12-16 22:58:36 +00:00
$kbd->pushLine();
2017-09-24 20:23:45 +00:00
$i = 0;
}
}
// empty buttons
2018-02-20 19:07:21 +00:00
if ($i != 0) {
2017-12-16 22:58:36 +00:00
for (; $i > 1 and $i <= 7; $i++)
$kbd->insertItem(" ", "null");
$kbd->pushLine();
2017-09-24 20:23:45 +00:00
}
2017-12-16 22:58:36 +00:00
if ($isCurrentMonth)
$kbd->insertItem(" ", "null");
else
$kbd->insertItem("<", "<");
$kbd->insertItem("$EMOJI_X Annulla",MSG_ABORT);
$kbd->insertItem(">", ">");
2017-12-16 22:58:36 +00:00
$kbd->pushLine();
2017-12-16 22:58:36 +00:00
return $kbd->getKeyboard();
2017-09-24 20:23:45 +00:00
}
2017-12-26 17:12:06 +00:00
// Function used to get an archived message
// and make an appropriate keyboard
2017-12-26 17:12:06 +00:00
// -- I dont' like so much --
function navigateMsgArchive ($msgNumber, $mc, $chatID) {
$sql = new Sqlite3(DBFILE);
$numbers = $sql->query("SELECT COUNT(*) FROM telegram_post");
$numbers = $numbers->fetchArray()[0];
2017-12-26 17:12:06 +00:00
if ($numbers == 0) {
return array( "text" => "Nessun messaggio programmato",
"kbd" => null);
$sql->close();
//~ $query = API_URL.API_TOKEN."/sendmessage?chat_id=".($chatID).
//~ "&text=Nessun messaggio programmato";
//~ $answer = file_get_contents($query);
//~ die();
}
else {
$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();
2017-12-26 17:12:06 +00:00
$mc->set($chatID.MC_DELETE_SCHEDULED_ID, $row['ID'])
or $mc->replace($chatID.MC_DELETE_SCHEDULED_ID, $row['ID']);
$sql->close();
2017-12-26 17:12:06 +00:00
$kbd = new InlineKbd;
$kbd->insertItem($row['DateTimeFormat'], "null");
$kbd->pushLine();
if ($msgNumber == 0)
$kbd->insertItem(" ","null");
else
$kbd->insertItem("<","<");
$kbd->insertItem("Rimuovi", MSG_DELETE);
if ($numbers - $msgNumber > 1)
$kbd->insertItem(">", ">");
else
$kbd->insertItem(" ","null");
$kbd->pushLine();
$kbd = $kbd->getKeyboard();
2017-12-26 17:12:06 +00:00
if ($row['Text'] != ''){
$text="$row[Text]\n<i>$row[Author]</i>"; // NOME CANALE ".API_CHANNEL_ID."?";
}
else
$text="Non testo puro";
2017-12-26 17:12:06 +00:00
return array( "text" => $text,
"kbd" => $kbd);
}
}
2017-09-24 20:23:45 +00:00
function not_authorized($chatID) {
$query = API_URL . API_TOKEN . '/sendMessage?' .
'chat_id=' . urlencode($chatID) .
"&text=".urlencode("Questo bot è solo per il Consiglio Direttivo.\nForse cercavi @golem_empoli (canale) oppure https://golem.linux.it/ (sito)");
2017-09-24 20:23:45 +00:00
file_get_contents($query);
2017-09-24 20:23:45 +00:00
die();
}
2017-09-24 20:23:45 +00:00
function wrong_action($chatID) {
$query = API_URL . API_TOKEN . '/sendMessage?' .
'chat_id=' . urlencode($chatID) .
"&text=Azione non corretta";
2017-09-24 20:23:45 +00:00
file_get_contents($query);
2017-09-24 20:23:45 +00:00
die();
}
2017-12-16 22:58:36 +00:00
class InlineKbd
{
private $keyboard = array();
private $currentLine = array();
2017-12-16 22:58:36 +00:00
public function pushLine() {
$this->keyboard[] = $this->currentLine;
$this->currentLine = array();
}
public function insertItem($text, $callback_data) {
$this->currentLine[] = array(
"text" => $text,
"callback_data" => $callback_data
);
}
public function getKeyboard() {
$kbd = array("inline_keyboard" => $this->keyboard);
2017-12-16 22:58:36 +00:00
return json_encode($kbd);
}
}
?>