351 lines
16 KiB
PHP
351 lines
16 KiB
PHP
<?php
|
|
error_reporting(E_ALL);
|
|
|
|
use \TelegramBot\Api\Client;
|
|
use \TelegramBot\Api\Types\Update;
|
|
|
|
if (PHP_INT_MAX == 2147483647) die("64 bit plaform required");
|
|
require_once "vendor/autoload.php";
|
|
require_once "database/Database.php";
|
|
require_once "database/NotFoundException.php";
|
|
require_once "database/DatabaseUser.php";
|
|
require_once "handlers/Command.php";
|
|
require_once "handlers/Flip.php";
|
|
require_once "handlers/Inspire.php";
|
|
require_once "handlers/Tpdne.php";
|
|
require_once "handlers/Rave.php";
|
|
require_once "handlers/Eva.php";
|
|
require_once "handlers/PrivateChat.php";
|
|
require_once "database/Group.php";
|
|
require_once "handlers/GroupWatcher.php";
|
|
require_once "handlers/Card.php";
|
|
require_once "handlers/Lookup.php";
|
|
require_once "handlers/Explain.php";
|
|
require_once "config.php";
|
|
try {
|
|
$bot = new Client($GLOBALS["token"]);
|
|
$database = new Database(new PDO("sqlite:database.sqlite3"));
|
|
|
|
$bot->command('fliph', function ($message) use ($bot, $database) {
|
|
if (PrivateChat::isPrivateChatContextChecker($message)) return false;
|
|
GroupWatcher::watch($database, $message, $bot);
|
|
$flip = new Flip($message, $bot, Flip::HORIZONTAL);
|
|
$flip->execute();
|
|
});
|
|
|
|
$bot->command('flipv', function ($message) use ($bot, $database) {
|
|
if (PrivateChat::isPrivateChatContextChecker($message)) return false;
|
|
GroupWatcher::watch($database, $message, $bot);
|
|
$flip = new Flip($message, $bot, Flip::VERTICAL);
|
|
$flip->execute();
|
|
});
|
|
|
|
$bot->command('flipb', function ($message) use ($bot, $database) {
|
|
if (PrivateChat::isPrivateChatContextChecker($message)) return false;
|
|
GroupWatcher::watch($database, $message, $bot);
|
|
$flip = new Flip($message, $bot, Flip::BOTH);
|
|
$flip->execute();
|
|
});
|
|
|
|
//TODO implement [commands] /card /lookup /help /rabio /stats
|
|
//TODO create private flow, with interactive buttons and datepicker
|
|
//TOO create admin comm ands and all logic
|
|
|
|
$bot->command('inspire', function ($message) use ($bot, $database) {
|
|
if (PrivateChat::isPrivateChatContextChecker($message)) return false;
|
|
GroupWatcher::watch($database, $message, $bot);
|
|
$inspire = new Inspire($message, $bot);
|
|
$inspire->execute();
|
|
});
|
|
|
|
$bot->command('tpdne', function ($message) use ($bot, $database) {
|
|
if (PrivateChat::isPrivateChatContextChecker($message)) return false;
|
|
GroupWatcher::watch($database, $message, $bot);
|
|
$inspire = new Tpdne($message, $bot);
|
|
$inspire->execute();
|
|
});
|
|
|
|
$bot->command('rave', function ($message) use ($bot, $database) {
|
|
if (PrivateChat::isPrivateChatContextChecker($message)) return false;
|
|
GroupWatcher::watch($database, $message, $bot);
|
|
$inspire = new Rave($message, $bot, Rave::CLASSIC);
|
|
$inspire->execute();
|
|
});
|
|
|
|
$bot->command('garfield', function ($message) use ($bot, $database) {
|
|
if (PrivateChat::isPrivateChatContextChecker($message)) return false;
|
|
GroupWatcher::watch($database, $message, $bot);
|
|
$inspire = new Rave($message, $bot, Rave::GARFIELD);
|
|
$inspire->execute();
|
|
});
|
|
|
|
$bot->command('megalovania', function ($message) use ($bot, $database) {
|
|
if (PrivateChat::isPrivateChatContextChecker($message)) return false;
|
|
GroupWatcher::watch($database, $message, $bot);
|
|
$inspire = new Rave($message, $bot, Rave::MEGALOVANIA);
|
|
$inspire->execute();
|
|
});
|
|
|
|
$bot->command('otamatone', function ($message) use ($bot, $database) {
|
|
if (PrivateChat::isPrivateChatContextChecker($message)) return false;
|
|
GroupWatcher::watch($database, $message, $bot);
|
|
$inspire = new Rave($message, $bot, Rave::OTAMATONE);
|
|
$inspire->execute();
|
|
});
|
|
|
|
$bot->command('info', function ($message) use ($bot, $database) {
|
|
if (PrivateChat::isPrivateChatContextChecker($message)) return false;
|
|
GroupWatcher::watch($database, $message, $bot);
|
|
$bot->sendMessage($message->getChat()->getId(), "V 10.0.0 by @matmasak\n Open source code on https://github.com/MatMasIt/rainbowBot", null, false, $message->getMessageId());
|
|
});
|
|
|
|
/*$bot->command('debug', function ($message) use ($bot) {
|
|
$bot->sendMessage($message->getChat()->getId(), $bot->getRawBody(), null, false, $message->getMessageId());
|
|
});*/
|
|
|
|
|
|
|
|
$bot->command('eva', function ($message) use ($bot, $database) {
|
|
if (PrivateChat::isPrivateChatContextChecker($message)) return false;
|
|
GroupWatcher::watch($database, $message, $bot);
|
|
$eva = new Eva($message, $bot);
|
|
$eva->execute();
|
|
});
|
|
|
|
$bot->command('card', function ($message) use ($bot, $database) {
|
|
if (PrivateChat::isPrivateChatContextChecker($message)) return false;
|
|
GroupWatcher::watch($database, $message, $bot);
|
|
$card = new Card($message, $bot, $database);
|
|
$card->execute();
|
|
});
|
|
|
|
$bot->command('lookup', function ($message) use ($bot, $database) {
|
|
if (PrivateChat::isPrivateChatContextChecker($message)) return false;
|
|
GroupWatcher::watch($database, $message, $bot);
|
|
$l = new Lookup($message, $bot, $database);
|
|
$l->execute();
|
|
});
|
|
|
|
$bot->command('explain', function ($message) use ($bot, $database) {
|
|
if (PrivateChat::isPrivateChatContextChecker($message)) return false;
|
|
GroupWatcher::watch($database, $message, $bot);
|
|
$l = new Explain($message, $bot, $database);
|
|
$l->execute();
|
|
});
|
|
|
|
|
|
|
|
# This function is called if someone clicks on an inline button
|
|
$bot->callbackQuery(function ($message) use ($bot, $database) {
|
|
if ($message->getData() == "noPolicy") {
|
|
$bot->answerCallbackQuery($message->getId());
|
|
$p = new PrivateChat($message->getMessage(), $bot, $database, $message->getFrom());
|
|
$p->noPolicy();
|
|
} elseif ($message->getData() == "yesPolicy") {
|
|
$bot->answerCallbackQuery($message->getId());
|
|
$p = new PrivateChat($message->getMessage(), $bot, $database, $message->getFrom());
|
|
$p->yesPolicy();
|
|
} elseif ($message->getData() == "whatIsThis") {
|
|
$bot->answerCallbackQuery($message->getId(), "Long descrizione");
|
|
} elseif ($message->getData() == "excludeMe") {
|
|
$bot->answerCallbackQuery($message->getId());
|
|
$p = new PrivateChat($message->getMessage(), $bot, $database, $message->getFrom());
|
|
$p->exclude();
|
|
} elseif ($message->getData() == "yesExclude") {
|
|
$bot->answerCallbackQuery($message->getId());
|
|
$p = new PrivateChat($message->getMessage(), $bot, $database, $message->getFrom());
|
|
$p->excludeYes();
|
|
} elseif ($message->getData() == "noExclude") {
|
|
$bot->answerCallbackQuery($message->getId());
|
|
$du = DatabaseUser::getByChat($database, $message->getFrom());
|
|
$du->setPrivateChatStatus(PrivateChat::STATUS_ASK_DM);
|
|
$du->setOptedOut(false);
|
|
$du->save(false);
|
|
$p = new PrivateChat($message->getMessage(), $bot, $database, $message->getFrom());
|
|
$p->execute();
|
|
} elseif ($message->getData() == "changedIdea") {
|
|
$bot->answerCallbackQuery($message->getId());
|
|
$du = DatabaseUser::getByChat($database, $message->getFrom());
|
|
$du->setPrivateChatStatus(PrivateChat::STATUS_ASK_DM);
|
|
$du->setOptedOut(false);
|
|
$du->save(false);
|
|
$p = new PrivateChat($message->getMessage(), $bot, $database, $message->getFrom());
|
|
$p->execute();
|
|
//syntax is skipTo#part
|
|
} elseif (explode("#", $message->getData())[0] == "go") {
|
|
$bot->answerCallbackQuery($message->getId());
|
|
$expl = explode("#", $message->getData());
|
|
$step = $expl[1];
|
|
$reset = $expl[2] === "reset";
|
|
$du = DatabaseUser::getByChat($database, $message->getFrom());
|
|
if ($reset) $du->setNULL($step);
|
|
$du->setPrivateChatStatus($step);
|
|
$du->setOptedOut(false);
|
|
$du->save(false);
|
|
$p = new PrivateChat($message->getMessage(), $bot, $database, $message->getFrom());
|
|
$p->execute(false);
|
|
} elseif (explode("#", $message->getData())[0] == "setGender") {
|
|
$bot->answerCallbackQuery($message->getId());
|
|
$expl = explode("#", $message->getData());
|
|
$text = $expl[1];
|
|
$du = DatabaseUser::getByChat($database, $message->getFrom());
|
|
if ($text == "custom") {
|
|
$message = $bot->sendMessage($message->getFrom()->getId(), "Scrivi il genere", null, false);
|
|
try {
|
|
if ($du->getLastPrivateMessage() != 0) $this->bot->deleteMessage(
|
|
$du->getTelegramId(),
|
|
$du->getLastPrivateMessage()
|
|
);
|
|
} catch (\TelegramBot\Api\Exception $e) {
|
|
}
|
|
$du->setLastPrivateMessage($message->getMessageId());
|
|
$du->save(false);
|
|
} else {
|
|
$du->setUGender($text);
|
|
$du->setOptedOut(false);
|
|
$du->save(false);
|
|
$p = new PrivateChat($message->getMessage(), $bot, $database, $message->getFrom());
|
|
$p->execute(false);
|
|
}
|
|
} elseif (explode("#", $message->getData())[0] == "setOrient") {
|
|
$bot->answerCallbackQuery($message->getId());
|
|
$expl = explode("#", $message->getData());
|
|
$text = $expl[1];
|
|
$du = DatabaseUser::getByChat($database, $message->getFrom());
|
|
if ($text == "custom") {
|
|
$message = $bot->sendMessage($message->getFrom()->getId(), "Scrivi l'orientamento", null, false);
|
|
try {
|
|
if ($du->getLastPrivateMessage() != 0) $this->bot->deleteMessage(
|
|
$du->getTelegramId(),
|
|
$du->getLastPrivateMessage()
|
|
);
|
|
} catch (\TelegramBot\Api\Exception $e) {
|
|
}
|
|
$du->setLastPrivateMessage($message->getMessageId());
|
|
$du->save(false);
|
|
} else {
|
|
$du->setUOrient($text);
|
|
$du->setOptedOut(false);
|
|
$du->save(false);
|
|
$p = new PrivateChat($message->getMessage(), $bot, $database, $message->getFrom());
|
|
$p->execute(false);
|
|
}
|
|
} elseif (explode("#", $message->getData())[0] == "setWhere") {
|
|
$bot->answerCallbackQuery($message->getId());
|
|
$expl = explode("#", $message->getData());
|
|
$text = $expl[1];
|
|
$du = DatabaseUser::getByChat($database, $message->getFrom());
|
|
if ($text == "custom") {
|
|
$message = $bot->sendMessage($message->getFrom()->getId(), "Scrivi da dove vieni", null, false);
|
|
try {
|
|
if ($du->getLastPrivateMessage() != 0) $this->bot->deleteMessage(
|
|
$du->getTelegramId(),
|
|
$du->getLastPrivateMessage()
|
|
);
|
|
} catch (\TelegramBot\Api\Exception $e) {
|
|
}
|
|
$du->setLastPrivateMessage($message->getMessageId());
|
|
$du->save(false);
|
|
} else {
|
|
$du->setUPlace($text);
|
|
$du->setOptedOut(false);
|
|
$du->save(false);
|
|
$p = new PrivateChat($message->getMessage(), $bot, $database, $message->getFrom());
|
|
$p->execute(false);
|
|
}
|
|
} elseif (explode("#", $message->getData())[0] == "setPVT") {
|
|
$bot->answerCallbackQuery($message->getId());
|
|
$expl = explode("#", $message->getData());
|
|
$text = $expl[1];
|
|
$du = DatabaseUser::getByChat($database, $message->getFrom());
|
|
if ($text == "custom") {
|
|
$message = $bot->sendMessage($message->getFrom()->getId(), "Scrivi una risposta personalizzata", null, false);
|
|
try {
|
|
if ($du->getLastPrivateMessage() != 0) $this->bot->deleteMessage(
|
|
$du->getTelegramId(),
|
|
$du->getLastPrivateMessage()
|
|
);
|
|
} catch (\TelegramBot\Api\Exception $e) {
|
|
}
|
|
$du->setLastPrivateMessage($message->getMessageId());
|
|
$du->save(false);
|
|
} else {
|
|
$du->setUpvtChoice($text);
|
|
$du->setOptedOut(false);
|
|
$du->save(false);
|
|
$p = new PrivateChat($message->getMessage(), $bot, $database, $message->getFrom());
|
|
$p->execute(false);
|
|
}
|
|
} elseif (explode("#", $message->getData())[0] == "setRel") {
|
|
$bot->answerCallbackQuery($message->getId());
|
|
$expl = explode("#", $message->getData());
|
|
$text = $expl[1];
|
|
$du = DatabaseUser::getByChat($database, $message->getFrom());
|
|
if ($text == "custom") {
|
|
$message = $bot->sendMessage($message->getFrom()->getId(), "Scrivi una risposta personalizzata", null, false);
|
|
try {
|
|
if ($du->getLastPrivateMessage() != 0) $this->bot->deleteMessage(
|
|
$du->getTelegramId(),
|
|
$du->getLastPrivateMessage()
|
|
);
|
|
} catch (\TelegramBot\Api\Exception $e) {
|
|
}
|
|
$du->setLastPrivateMessage($message->getMessageId());
|
|
$du->save(false);
|
|
} else {
|
|
$du->setURelationships($text);
|
|
$du->setOptedOut(false);
|
|
$du->save(false);
|
|
$p = new PrivateChat($message->getMessage(), $bot, $database, $message->getFrom());
|
|
$p->execute(false);
|
|
}
|
|
} elseif (explode("#", $message->getData())[0] == "endSet") {
|
|
$bot->answerCallbackQuery($message->getId());
|
|
$du = DatabaseUser::getByChat($database, $message->getFrom());
|
|
$expl = explode("#", $message->getData());
|
|
$askConf = $expl[1] != "save" && $du->countCompleted() != count(PrivateChat::$order);
|
|
$du = DatabaseUser::getByChat($database, $message->getFrom());
|
|
$p = new PrivateChat($message->getMessage(), $bot, $database, $message->getFrom());
|
|
$p->end($askConf);
|
|
} elseif ($message->getData() == "viewCard") {
|
|
$bot->answerCallbackQuery($message->getId());
|
|
$card = new Card($message->getMessage(), $bot, $database, $message->getFrom());
|
|
$du = DatabaseUser::getByChat($database, $message->getFrom());
|
|
$card->viewPVC($du);
|
|
} elseif ($message->getData() == "viewInfo") {
|
|
$bot->answerCallbackQuery($message->getId());
|
|
$card = new Lookup($message->getMessage(), $bot, $database, $message->getFrom());
|
|
$du = DatabaseUser::getByChat($database, $message->getFrom());
|
|
$card->pvtLookup($du);
|
|
} elseif ($message->getData() == "viewExp") {
|
|
$bot->answerCallbackQuery($message->getId());
|
|
$card = new Explain($message->getMessage(), $bot, $database, $message->getFrom());
|
|
$du = DatabaseUser::getByChat($database, $message->getFrom());
|
|
$card->pvtLookup($du);
|
|
} elseif ($message->getData() == "writeMessage") {
|
|
$bot->answerCallbackQuery($message->getId());
|
|
$p = new PrivateChat($message->getMessage(), $bot, $database, $message->getFrom());
|
|
$p->writeMessage();
|
|
}
|
|
});
|
|
|
|
|
|
$bot->on(function (Update $update) use ($bot, $database) {
|
|
$p = new PrivateChat($update->getMessage(), $bot, $database);
|
|
$p->execute();
|
|
}, function (Update $update) {
|
|
return PrivateChat::isPrivateChatContextChecker($update);
|
|
});
|
|
|
|
$bot->on(function (Update $update) use ($bot, $database) {
|
|
GroupWatcher::watch($database, $update->getMessage(), $bot);
|
|
}, function (Update $update) {
|
|
return PrivateChat::isPublicChatContextChecker($update);
|
|
});
|
|
|
|
|
|
$bot->run();
|
|
} catch (\TelegramBot\Api\Exception $e) {
|
|
file_put_contents("error.log", date("d/m/Y H:i:s") . "| " . $e->getMessage());
|
|
}
|