Major revision 2
							
								
								
									
										8
									
								
								.github/workflows/syntax.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -1,8 +0,0 @@
 | 
			
		||||
name: PHP Linting
 | 
			
		||||
on: push
 | 
			
		||||
jobs:
 | 
			
		||||
  phplint:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    steps:
 | 
			
		||||
        - uses: actions/checkout@v1
 | 
			
		||||
        - uses: michaelw90/PHP-Lint@master
 | 
			
		||||
							
								
								
									
										21
									
								
								LICENSE
									
									
									
									
									
								
							
							
						
						@@ -1,21 +0,0 @@
 | 
			
		||||
MIT License
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2021 MatMasIt
 | 
			
		||||
 | 
			
		||||
Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
in the Software without restriction, including without limitation the rights
 | 
			
		||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
furnished to do so, subject to the following conditions:
 | 
			
		||||
 | 
			
		||||
The above copyright notice and this permission notice shall be included in all
 | 
			
		||||
copies or substantial portions of the Software.
 | 
			
		||||
 | 
			
		||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 | 
			
		||||
SOFTWARE.
 | 
			
		||||
							
								
								
									
										15
									
								
								README.md
									
									
									
									
									
								
							
							
						
						@@ -1,13 +1,2 @@
 | 
			
		||||
# rainbowBot
 | 
			
		||||
 | 
			
		||||
[](https://github.com/MatMasIt/rainbowBot/actions/workflows/syntax.yml)
 | 
			
		||||

 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
Official bot of WeAreLGBT+ Network on Telegram
 | 
			
		||||
 | 
			
		||||
A lot of mixed stuff accumulated over the years, and yes the source is terrible.
 | 
			
		||||
 | 
			
		||||
May be of help to someone
 | 
			
		||||
 | 
			
		||||
The bot source is automatically updated from here
 | 
			
		||||
# RainbowBot
 | 
			
		||||
Telegram bot for lgbt groups
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										101
									
								
								card.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,101 @@
 | 
			
		||||
<?php
 | 
			
		||||
require "database/DatabaseUser.php";
 | 
			
		||||
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
 | 
			
		||||
header("Cache-Control: post-check=0, pre-check=0", false);
 | 
			
		||||
header("Pragma: no-cache");
 | 
			
		||||
$data = json_decode($_GET["data"], true);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
?>
 | 
			
		||||
<div class="card">
 | 
			
		||||
    <img src="<?php echo htmlentities($data["img"]); ?>" alt="Immagine" id="pic">
 | 
			
		||||
    <header class="eva-heading" id="cen">
 | 
			
		||||
        <h2 class="eva-heading__title"><img src="https://images.emojiterra.com/google/android-10/512px/1f3f3-1f308.png" style="width:20px"> Rainbow Bot <img src="https://images.emojiterra.com/google/android-10/512px/1f3f3-1f308.png" style="width:20px"></h2><br />
 | 
			
		||||
        <h4 class="eva-heading__episode-title">
 | 
			
		||||
            <?php if ($data["name"]) {
 | 
			
		||||
            ?>
 | 
			
		||||
                <i>Nome</i>:   <?php echo htmlentities($data["name"]); ?> <br />
 | 
			
		||||
            <?php
 | 
			
		||||
            }
 | 
			
		||||
            if ($data["birth"]) {
 | 
			
		||||
            ?>
 | 
			
		||||
                <i>Data di Nascita</i>:   <?php echo itdate($data["birth"]) . " (" . DatabaseUser::calcAge((int)$data["birth"]) . " anni)" ?><br />
 | 
			
		||||
            <?php
 | 
			
		||||
            }
 | 
			
		||||
            if ($data["gender"]) {
 | 
			
		||||
            ?>
 | 
			
		||||
                <i>Genere</i>:   <?php echo htmlentities($data["gender"]); ?> <br />
 | 
			
		||||
            <?php
 | 
			
		||||
            }
 | 
			
		||||
            if ($data["orientation"]) {
 | 
			
		||||
            ?>
 | 
			
		||||
                <i>Orientamento</i>:   <?php echo htmlentities($data["orientation"]); ?><br />
 | 
			
		||||
            <?php
 | 
			
		||||
            }
 | 
			
		||||
            if ($data["where"]) {
 | 
			
		||||
            ?>
 | 
			
		||||
                <i>Provenienza</i>:   <?php echo htmlentities($data["where"]); ?><br />
 | 
			
		||||
            <?php
 | 
			
		||||
            }
 | 
			
		||||
            if ($data["pvt"]) {
 | 
			
		||||
            ?>
 | 
			
		||||
                <i>Messaggi privati</i>:   <?php echo htmlentities($data["pvt"]); ?><br />
 | 
			
		||||
            <?php
 | 
			
		||||
            }
 | 
			
		||||
            if ($data["rel"]) {
 | 
			
		||||
            ?>
 | 
			
		||||
                <i>Relazioni</i>:   <?php echo htmlentities($data["rel"]); ?><br />
 | 
			
		||||
            <?php
 | 
			
		||||
            }
 | 
			
		||||
            ?>
 | 
			
		||||
        </h4>
 | 
			
		||||
        <br />
 | 
			
		||||
        <?php
 | 
			
		||||
        if ($data["isDev"]) $data["flags"][] = "dev";
 | 
			
		||||
        foreach ($data["flags"] as $flag) {
 | 
			
		||||
        ?>
 | 
			
		||||
            <img src="flags/<?php echo htmlentities($flag); ?>.png" class="flag">
 | 
			
		||||
        <?php
 | 
			
		||||
        }
 | 
			
		||||
        ?>
 | 
			
		||||
    </header>
 | 
			
		||||
</div>
 | 
			
		||||
<style>
 | 
			
		||||
    .flag {
 | 
			
		||||
        width: 100px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .card {
 | 
			
		||||
        width: 600px;
 | 
			
		||||
        height: 478px;
 | 
			
		||||
        /*border: 1px solid white;*/
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    * {
 | 
			
		||||
        margin: 0;
 | 
			
		||||
        padding: 0;
 | 
			
		||||
        color: white;
 | 
			
		||||
        font-size: 25px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    #pic {
 | 
			
		||||
        width: 200px;
 | 
			
		||||
        height: 200px;
 | 
			
		||||
        float: right;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #cen {
 | 
			
		||||
        margin-top: 32px;
 | 
			
		||||
        margin-left: 32px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    body {
 | 
			
		||||
        background-color: black;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    h2 {
 | 
			
		||||
        font-size: 30px;
 | 
			
		||||
    }
 | 
			
		||||
</style>
 | 
			
		||||
							
								
								
									
										16
									
								
								common.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,16 @@
 | 
			
		||||
<?php
 | 
			
		||||
function itdate($unix)
 | 
			
		||||
{
 | 
			
		||||
    $daysIT = ["Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato", "Domenica"];
 | 
			
		||||
    $monthsIT = ["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"];
 | 
			
		||||
    return  $daysIT[date("N", $unix) - 1] . " " . date("d", $unix) . " " . $monthsIT[date("m", $unix) - 1] . " " . date("Y", $unix);
 | 
			
		||||
}
 | 
			
		||||
function contains($needle, $haystack)
 | 
			
		||||
{
 | 
			
		||||
    return (strpos($haystack, $needle) !== false);
 | 
			
		||||
}
 | 
			
		||||
function ellipses(string $string, int $len = 40, $ellipses = "...")
 | 
			
		||||
{
 | 
			
		||||
    $slen = $len - strlen($ellipses);
 | 
			
		||||
    return strlen($string) > $slen ? substr($string, 0, $slen) . "..." : $string;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										5
									
								
								composer.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,5 @@
 | 
			
		||||
{
 | 
			
		||||
    "require": {
 | 
			
		||||
        "telegram-bot/api": "^2.3"
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										78
									
								
								composer.lock
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,78 @@
 | 
			
		||||
{
 | 
			
		||||
    "_readme": [
 | 
			
		||||
        "This file locks the dependencies of your project to a known state",
 | 
			
		||||
        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
 | 
			
		||||
        "This file is @generated automatically"
 | 
			
		||||
    ],
 | 
			
		||||
    "content-hash": "4436204c0d5f43443ce858a5077afd8c",
 | 
			
		||||
    "packages": [
 | 
			
		||||
        {
 | 
			
		||||
            "name": "telegram-bot/api",
 | 
			
		||||
            "version": "v2.3.13",
 | 
			
		||||
            "source": {
 | 
			
		||||
                "type": "git",
 | 
			
		||||
                "url": "https://github.com/TelegramBot/Api.git",
 | 
			
		||||
                "reference": "8d34f3ccd3230a9fd7c7fd9ba8ec0110a059f781"
 | 
			
		||||
            },
 | 
			
		||||
            "dist": {
 | 
			
		||||
                "type": "zip",
 | 
			
		||||
                "url": "https://api.github.com/repos/TelegramBot/Api/zipball/8d34f3ccd3230a9fd7c7fd9ba8ec0110a059f781",
 | 
			
		||||
                "reference": "8d34f3ccd3230a9fd7c7fd9ba8ec0110a059f781",
 | 
			
		||||
                "shasum": ""
 | 
			
		||||
            },
 | 
			
		||||
            "require": {
 | 
			
		||||
                "php": ">=5.5.0"
 | 
			
		||||
            },
 | 
			
		||||
            "require-dev": {
 | 
			
		||||
                "codeception/codeception": "*",
 | 
			
		||||
                "phpunit/phpunit": "~4.0",
 | 
			
		||||
                "squizlabs/php_codesniffer": "2.*"
 | 
			
		||||
            },
 | 
			
		||||
            "type": "library",
 | 
			
		||||
            "extra": {
 | 
			
		||||
                "branch-alias": {
 | 
			
		||||
                    "dev-master": "1.0-dev"
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            "autoload": {
 | 
			
		||||
                "psr-4": {
 | 
			
		||||
                    "TelegramBot\\Api\\": "src"
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            "notification-url": "https://packagist.org/downloads/",
 | 
			
		||||
            "license": [
 | 
			
		||||
                "MIT"
 | 
			
		||||
            ],
 | 
			
		||||
            "authors": [
 | 
			
		||||
                {
 | 
			
		||||
                    "name": "Ilya Gusev",
 | 
			
		||||
                    "email": "mail@igusev.ru",
 | 
			
		||||
                    "homepage": "https://php-cat.com",
 | 
			
		||||
                    "role": "Developer"
 | 
			
		||||
                }
 | 
			
		||||
            ],
 | 
			
		||||
            "description": "PHP Wrapper for Telegram Bot API",
 | 
			
		||||
            "homepage": "https://github.com/TelegramBot/Api",
 | 
			
		||||
            "keywords": [
 | 
			
		||||
                "bot",
 | 
			
		||||
                "bot api",
 | 
			
		||||
                "php",
 | 
			
		||||
                "telegram"
 | 
			
		||||
            ],
 | 
			
		||||
            "support": {
 | 
			
		||||
                "issues": "https://github.com/TelegramBot/Api/issues",
 | 
			
		||||
                "source": "https://github.com/TelegramBot/Api/tree/master"
 | 
			
		||||
            },
 | 
			
		||||
            "time": "2018-04-30T11:46:15+00:00"
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "packages-dev": [],
 | 
			
		||||
    "aliases": [],
 | 
			
		||||
    "minimum-stability": "stable",
 | 
			
		||||
    "stability-flags": [],
 | 
			
		||||
    "prefer-stable": false,
 | 
			
		||||
    "prefer-lowest": false,
 | 
			
		||||
    "platform": [],
 | 
			
		||||
    "platform-dev": [],
 | 
			
		||||
    "plugin-api-version": "2.2.0"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										324
									
								
								config.php
									
									
									
									
									
								
							
							
						
						@@ -1,317 +1,9 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
return [
 | 
			
		||||
    "lgbt" => [
 | 
			
		||||
        "on" => true,
 | 
			
		||||
        "maintenance" => 1111111,
 | 
			
		||||
        "logChannelId" => (-11111111111),
 | 
			
		||||
        "TOKEN" => "TOKEN",
 | 
			
		||||
        "devId"=>11111111,
 | 
			
		||||
        "markovdefault" => 25,
 | 
			
		||||
        "modulesEnabled" => [
 | 
			
		||||
           "boot" => true,
 | 
			
		||||
            "log" => true,
 | 
			
		||||
            "watchedForward" => true,
 | 
			
		||||
            "welcome" => true,
 | 
			
		||||
            "registerNewUsersInDb" => true,
 | 
			
		||||
            "happyBirthday" => true,
 | 
			
		||||
            "updateUsernameData" => true,
 | 
			
		||||
            ".s" => true,
 | 
			
		||||
            ".ai" => true,
 | 
			
		||||
            ".stats" => true,
 | 
			
		||||
            ".raBIO" => true,
 | 
			
		||||
            ".nr" => true,
 | 
			
		||||
            ".rave" => true,
 | 
			
		||||
            ".helpb" => true,
 | 
			
		||||
            ".eq" => true,
 | 
			
		||||
            ".RWP" => true,
 | 
			
		||||
            ".NLG" => true,
 | 
			
		||||
            ".evc" => true,
 | 
			
		||||
            ".CAH" => true,
 | 
			
		||||
            ".lgbtShuffle" => true,
 | 
			
		||||
            ".kq" => true,
 | 
			
		||||
            ".ez" => true,
 | 
			
		||||
            ".card" => true,
 | 
			
		||||
            ".lookup" => true,
 | 
			
		||||
            ".tpdne" => true,
 | 
			
		||||
            ".oracolo" => true,
 | 
			
		||||
            ".marry" => true,
 | 
			
		||||
            ".nolgbt" => true,
 | 
			
		||||
            ".n" => true,
 | 
			
		||||
            ".scp" => true,
 | 
			
		||||
            ".lgbts" => true,
 | 
			
		||||
            ".forum" => true,
 | 
			
		||||
            ".usage" => true,
 | 
			
		||||
            ".anon" => true,
 | 
			
		||||
            ".joke" => true,
 | 
			
		||||
            ".no" => true,
 | 
			
		||||
            ".tutti" => true,
 | 
			
		||||
            ".i" => true,
 | 
			
		||||
            ".ii" => true,
 | 
			
		||||
            ".asuna" => true,
 | 
			
		||||
            ".watch" => true,
 | 
			
		||||
            ".unwatchAll" => true,
 | 
			
		||||
            ".listWatch" => true,
 | 
			
		||||
            ".reking" => true,
 | 
			
		||||
            ".s" => true,
 | 
			
		||||
            ".cry" => true,
 | 
			
		||||
            ".pvt" => true,
 | 
			
		||||
            ".log" => true,
 | 
			
		||||
            ".ud" => true,
 | 
			
		||||
            ".emu" => false,
 | 
			
		||||
            ".AAJuebox" => true,
 | 
			
		||||
            ".pokeJuebox" => true,
 | 
			
		||||
            ".DCJuebox" => true,
 | 
			
		||||
            ".bibbiaJuebox" => true,
 | 
			
		||||
            ".soffriggi" => true,
 | 
			
		||||
            ".prg" => false,
 | 
			
		||||
            ".imgCacheClean" => false,
 | 
			
		||||
            ".inspire" => true,
 | 
			
		||||
            ".eva" => true
 | 
			
		||||
        ],
 | 
			
		||||
        "APIs" => [
 | 
			
		||||
            "jokes" => "https://sv443.net/jokeapi/v2/joke/Any",
 | 
			
		||||
            "kanye" => "https://api.kanye.rest/",
 | 
			
		||||
            "ud" => "https://twitchsharer.com/files/urbandict.php?Term=",
 | 
			
		||||
            "scp" => "http://www.scp-wiki.net/scp-",
 | 
			
		||||
            "help" => "https://webport.altervista.org/bots/telegram/lgbt/help.php",
 | 
			
		||||
            "myTable" => "https://webport.altervista.org/bots/telegram/lgbt/mytable.php",
 | 
			
		||||
            "wikiRandom" => "https://it.wikipedia.org/api/rest_v1/page/random/summary",
 | 
			
		||||
            "numbers" => "http://numbersapi.com/",
 | 
			
		||||
            "inspire" => "https://inspirobot.me/api?generate=true",
 | 
			
		||||
            "tpdne"=>"https://thispersondoesnotexist.com/image"
 | 
			
		||||
        ],
 | 
			
		||||
        "imagesLgbts" => [
 | 
			
		||||
            "https://i.pinimg.com/originals/00/bc/67/00bc67aae61bba3b4b0b741edf86e334.jpg",
 | 
			
		||||
            "https://i.pinimg.com/originals/f1/aa/45/f1aa451f945020df20cd736bc1e7fa4c.png",
 | 
			
		||||
            "https://www.itspronouncedmetrosexual.com/wp-content/uploads/2012/01/1600-Genderbread-Person.jpg",
 | 
			
		||||
            "https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/e8b09dd4-d06b-4a29-ac04-46be3c7602c3/d7et5c6-c7c88a99-dcb1-4e90-b576-63ed011cf2d5.jpg/v1/fill/w_900,h_1379,q_75,strp/lgbt_community_terminology_and_flags_by_lovemystarfire_d7et5c6-fullview.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOiIsImlzcyI6InVybjphcHA6Iiwib2JqIjpbW3siaGVpZ2h0IjoiPD0xMzc5IiwicGF0aCI6IlwvZlwvZThiMDlkZDQtZDA2Yi00YTI5LWFjMDQtNDZiZTNjNzYwMmMzXC9kN2V0NWM2LWM3Yzg4YTk5LWRjYjEtNGU5MC1iNTc2LTYzZWQwMTFjZjJkNS5qcGciLCJ3aWR0aCI6Ijw9OTAwIn1dXSwiYXVkIjpbInVybjpzZXJ2aWNlOmltYWdlLm9wZXJhdGlvbnMiXX0.gXd1svAzbWRl2F_u-vwOLz4QouME1vsbcKQrdJRf2Yg"
 | 
			
		||||
        ],
 | 
			
		||||
        "text" => [
 | 
			
		||||
            "userView" => [
 | 
			
		||||
                "birthDate" => "Data di nascita",
 | 
			
		||||
                "name" => "Nome",
 | 
			
		||||
                "yearsOld" => "Età",
 | 
			
		||||
                "gender" => "Genere",
 | 
			
		||||
                "orient" => "Orientamento",
 | 
			
		||||
                "where" => "Viene da",
 | 
			
		||||
                "pvtNotice" => "Avviso sui messaggi privati",
 | 
			
		||||
                "bio" => "Bio"
 | 
			
		||||
            ],
 | 
			
		||||
            "status" => [
 | 
			
		||||
                "missingJueBox" => "\n¬ Missing the Divina Commedia file!\nIts juebox will not work\n",
 | 
			
		||||
                "missingBibleFile" => "\n¬ Missing the Bible file!\nIts juebox will not work\n",
 | 
			
		||||
                "missingPokemonFile" => "\n¬ Missing the Pokemon Music List file!\nIts juebox will not work\n",
 | 
			
		||||
                "missingAAFile" => "\n¬ Missing the Ace Attorney Music List file!\nIts juebox will not work\n",
 | 
			
		||||
                "missingMyTable" => "\n¬ Missing the MyTable viewer!\nThe \".tutti\" command will not work\n",
 | 
			
		||||
                "missingNoLgbt" => "\n¬ Missing the NoLGBT ignorance collection!\nThe \".nolgbt\" command will not work\n",
 | 
			
		||||
                "someErrors" => "\nSome errors though:\n",
 | 
			
		||||
                "up" => " - Up and running!"
 | 
			
		||||
            ],
 | 
			
		||||
            "csvTell" => "Inserisci la lista in stile CSV, vai: (:q per annullare)",
 | 
			
		||||
            "lgbtBegin" => "LGBTQIA -> ",
 | 
			
		||||
            "kanyeSaid" => "Kanye says :\n",
 | 
			
		||||
            "cardsAgainstHumanity" => "Cards against humanity\n",
 | 
			
		||||
            "messageSent" => "Messaggio inviato",
 | 
			
		||||
            "notFound" => "Non trovato",
 | 
			
		||||
            "udHint" =>  "Che cosa devo cercare?\nEx: \".ud\" sos oppure cita un messaggio e scrivi \".ud\"",
 | 
			
		||||
            "notInDbNoUsr" => "Non nel Database / Non hai selezionato nessun utente",
 | 
			
		||||
            "noResults" => "Nessun risultato",
 | 
			
		||||
            "parameterNotFound" => "Parametro specificato non valido",
 | 
			
		||||
            "scpNotFound" =>  "SCP non trovato",
 | 
			
		||||
            "whichScp" =>  "Quale scp?\nEx: \".scp\" 1471 oppure cita un messaggio e scrivi \".scp\"",
 | 
			
		||||
            "notInDb" => "Non nel Database ",
 | 
			
		||||
            "yesMaster" => "Yes, master",
 | 
			
		||||
            "purgeBegin" => "Starting the P U R G E.\n this may take a while; the bot may become unresponsive",
 | 
			
		||||
            "purged" => " Old records P U R G E D.",
 | 
			
		||||
            "fry" => "Vi ho contattato ma non mi avete scritto?\nOra vi soffriggo\n*RUMORE DI OLIO DA FRITTURA*",
 | 
			
		||||
            "cry" => "I am going to make @MtMsdns cry:\nhttps://www.youtube.com/playlist?list=PLsAXnLyfCDZZHhEE2z6LS10eIOhR6Qiaw",
 | 
			
		||||
            "info" =>  "v 4.1.0 by @MtMsdns e @xSylla",
 | 
			
		||||
            "pvt" => "Controlla se l'utente vuole essere contattato in privato tramite .lookup!",
 | 
			
		||||
            "nolgbt" =>  "Ecco la mirabile opera : https://webport.altervista.org/bots/telegram/lgbt/ignorance/",
 | 
			
		||||
            "timeDiffFormat" => "%a giorni, %h ore, %i minuti and %s secondi",
 | 
			
		||||
            "maintenance" => "Bot in manutenzione",
 | 
			
		||||
            "whatEdit" => "Cosa vuoi modificare?",
 | 
			
		||||
            "numberEdit" => "Scrivi il numero dell'opzione corrispondente",
 | 
			
		||||
            "finishText" => "Abbiamo finito. Ora su  @wearelgbtq, \"Lella Land\"  e @TransgenderCommunity tutti potranno consultare i tuoi dati. Per fare opt-out scrivi \"opt-out\", per correggere i tuoi dati scrivi \"edit\", per vederli scrivi \"me\" e per rifare la configurazione scrivi \"redo\"\n Ricordati di fare .lookup su un  utente prima di scrivergli per vedere se vuole!",
 | 
			
		||||
            "welcomeText" => "Ciao, ti farò alcune domande.\n Rispondi \"No\" se non vuoi rispondere alla domanda corrente.\nLe Informazioni saranno visibili a tutti sul gruppo LGBT e sul gruppo transgender (@wearelgbtq e @TransgenderCommunity, + il gruppo \"Lella Land\" ) con il comando .lookup finché non richiederai l'opt-out, ossia la cancellazione dei tuoi dati.\nProcedendo dichiari di aver preso visione di questo messaggio.",
 | 
			
		||||
            "nameAsk" => "Come ti chiami?",
 | 
			
		||||
            "groupHello" => "Ciao, mi puoi scrivere in privato? Gestisco l'archivio dei profili su questo gruppo e se carichi i tuoi dati potrai partecipare più attivamente!",
 | 
			
		||||
            "alreadyKnowYou" => "Ah, ma già ti conosco!, ecco :\n",
 | 
			
		||||
            "seenButEmptyRecord" => "Ti ho già visto in passato..\n Ma non so nulla di te.\nVuoi scrivermi?",
 | 
			
		||||
            "mustCite" => "Devi citare un messaggio o scriverlo dopo il comando",
 | 
			
		||||
            "eye" => "Keeping an eye",
 | 
			
		||||
            "freeBeg" => "Freedom for ",
 | 
			
		||||
            "allFree" => "In this land all are already free",
 | 
			
		||||
            "wrongOpinion" => "Ding Dong, Your opinion is  wrong",
 | 
			
		||||
            "cryPlaylist" => "https://youtu.be/s_NXt2ZPtzg",
 | 
			
		||||
            "statsDisclaimer" => "STATISTICHE\nDisclaimer: faccio del mio meglio per fare il parsing ma magari padellasessuale non lo capisco bene\nORIENTAMENTI\n",
 | 
			
		||||
            "noProblem" => "Nessun problema",
 | 
			
		||||
            "thanks" => "Grazie",
 | 
			
		||||
            "updatedData" => "Dati aggiornati",
 | 
			
		||||
            "birthAsk" => "Ma dimmi, quando sei nat* (scrivi la data nel formato gg/mm/aaaa)",
 | 
			
		||||
            "genderAsk" =>  "Qual è il tuo genere?",
 | 
			
		||||
            "orientAsk" => "Qual' è il tuo orientamento?",
 | 
			
		||||
            "whereFrom" => "Da dove vieni?",
 | 
			
		||||
            "invalidDate" => "Data invalida",
 | 
			
		||||
            "bioM"=>"Scrivi una breve bio ",
 | 
			
		||||
            "invalidChoice" => "Scelta non valida",
 | 
			
		||||
            "shortDescription" =>  "Lascia una breve nota per chi vuole mandarti messaggi privati: li vuoi? A che condizioni?",
 | 
			
		||||
            "isUnderObservation" => " é sotto osservazione.\nTutti i suoi messaggi verranno inoltrati qui!\n usare .unwatch per eliminarlo dalla lista degli osservati.",
 | 
			
		||||
            "done" => "Fatto",
 | 
			
		||||
            "cancelled" => "Annullato",
 | 
			
		||||
            "freedom" => "Freedom!",
 | 
			
		||||
            "notObservedAnymore" => "non é più osservato",
 | 
			
		||||
            "reroll" => "Reroll!\nIl re LGBT di oggi :\n",
 | 
			
		||||
            "newGroupMember" => ")\nNuovo membro entrato nel gruppo:\n",
 | 
			
		||||
            "theMarriage" => "Il matrimonio tra ",
 | 
			
		||||
            "isSet" => ") è ora ufficiale e irrevocabile.\nCosì è stato deciso\n[Musica di Forum]",
 | 
			
		||||
            "scheduledMaintenance" => "Bot in manutenzione programmata. Fine  : ",
 | 
			
		||||
            "wiiText" => " nel canale \"Vota Anche Tu\" della wii di Mat é apparso il seguente sondaggio ",
 | 
			
		||||
            "resultsWere" => "I risultati furono\n\n",
 | 
			
		||||
            "secret" => "Segreto:\n\n",
 | 
			
		||||
            "ok" => "OK",
 | 
			
		||||
            "writeYourSecret" => "Scrivi il tuo segreto (o \"q\" per annullare)",
 | 
			
		||||
            "willSend" => "Lo invierà sul gruppo che sceglierai, vai: (:q per annullare)",
 | 
			
		||||
            "dataErased" => "Dati eliminati",
 | 
			
		||||
            "happyBirthdayTo" => "Buon compleanno a ",
 | 
			
		||||
            "todaysKing" => "Il re LGBT di oggi :\n",
 | 
			
		||||
            "noLaLgbtplz" =>"Perfavore, non usare \"La lgbt\", non è una azienda (LGBT S.p.A., LGBT Inc.) o una associazione.\nTutte le volte che lo fai, @MtMsdns piange.\nEsempi alternativi: \n\"La community LGBT\", \"La community Queer\"\nThanks"
 | 
			
		||||
        ],
 | 
			
		||||
        "correlationMenu" => [
 | 
			
		||||
            ["Nome", "askDm"],
 | 
			
		||||
            ["Data di Nascita", "askName"],
 | 
			
		||||
            ["Genere", "askBirth"],
 | 
			
		||||
            ["Orientamento", "askGender"],
 | 
			
		||||
            ["Luogo di provenienza", "askOrient"],
 | 
			
		||||
            ["Nota per i messaggi privati", "askWhere"],
 | 
			
		||||
            ["Bio", "askPVT"],
 | 
			
		||||
            ["annulla", "end"]
 | 
			
		||||
        ],
 | 
			
		||||
        "groups" => [
 | 
			
		||||
            [
 | 
			
		||||
                "uid" => 1,
 | 
			
		||||
                "id" => (-11111111),
 | 
			
		||||
                "name" => "We are lgbtq",
 | 
			
		||||
                "on" => true,
 | 
			
		||||
                "maintenance" => false,
 | 
			
		||||
                "modules" => [
 | 
			
		||||
                    "king" => 0, //0-> all, 1 -> people who are in the group, 2-> none
 | 
			
		||||
                    "marriage" => 0,
 | 
			
		||||
                    "happyBirthday" => 0
 | 
			
		||||
                ]
 | 
			
		||||
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                "uid" => 2,
 | 
			
		||||
                "id" => (-11111111),
 | 
			
		||||
                "name" => "Transgender Community",
 | 
			
		||||
                "on" => true,
 | 
			
		||||
                "maintenance" => false,
 | 
			
		||||
                "modules" => [
 | 
			
		||||
                    "king" => 2,
 | 
			
		||||
                    "marriage" => 2,
 | 
			
		||||
                    "happyBirthday" => 2
 | 
			
		||||
                ]
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                "uid" => 3,
 | 
			
		||||
                "id" => (-11111111),
 | 
			
		||||
                "name" => "LellaLand",
 | 
			
		||||
                "on" => true,
 | 
			
		||||
                "maintenance" => false,
 | 
			
		||||
                "modules" => [
 | 
			
		||||
                    "king" => 2,
 | 
			
		||||
                    "marriage" => 2,
 | 
			
		||||
                    "happyBirthday" => 2
 | 
			
		||||
                ]
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                "uid" => 4,
 | 
			
		||||
                "id" => (-11111111),
 | 
			
		||||
                "name" => "We are LGBT+ but more horny",
 | 
			
		||||
                "on" => true,
 | 
			
		||||
                "maintenance" => false,
 | 
			
		||||
                "modules" => [
 | 
			
		||||
                    "king" => 2,
 | 
			
		||||
                    "marriage" => 2,
 | 
			
		||||
                    "happyBirthday" => 2
 | 
			
		||||
                ],
 | 
			
		||||
                "modulesEnabled" => [
 | 
			
		||||
                    ".lookup" => false,
 | 
			
		||||
                    ".card" => false,
 | 
			
		||||
                    ".marry" => false,
 | 
			
		||||
                    ".stats" => false,
 | 
			
		||||
                    ".debugUser" => false
 | 
			
		||||
                ]
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                "uid" => 5,
 | 
			
		||||
                "id" => (-111111111),
 | 
			
		||||
                "name" => "Gruppo Staff",
 | 
			
		||||
                "on" => true,
 | 
			
		||||
                "maintenance" => false,
 | 
			
		||||
                "modules" => [
 | 
			
		||||
                    "king" => 2,
 | 
			
		||||
                    "marriage" => 2,
 | 
			
		||||
                    "happyBirthday" => 2
 | 
			
		||||
                ],
 | 
			
		||||
                "modulesEnabled" => [
 | 
			
		||||
                    ".lookup" => false,
 | 
			
		||||
                    ".card" => false,
 | 
			
		||||
                    ".marry" => false,
 | 
			
		||||
                    ".stats" => false,
 | 
			
		||||
                    ".debugUser" => false
 | 
			
		||||
                ]
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                "uid" => 6,
 | 
			
		||||
                "id" => (-111111111),
 | 
			
		||||
                "name" => "Bot Test",
 | 
			
		||||
                "on" => true,
 | 
			
		||||
                "maintenance" => false,
 | 
			
		||||
                "modules" => [
 | 
			
		||||
                    "king" => 2,
 | 
			
		||||
                    "marriage" => 2,
 | 
			
		||||
                    "happyBirthday" => 2
 | 
			
		||||
                ],
 | 
			
		||||
                "modulesEnabled" => [
 | 
			
		||||
                    ".lookup" => false,
 | 
			
		||||
                    ".card" => false,
 | 
			
		||||
                    ".marry" => false,
 | 
			
		||||
                    ".stats" => false,
 | 
			
		||||
                    ".debugUser" => false
 | 
			
		||||
                ]
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                "uid" => 7,
 | 
			
		||||
                "id" => (-1111111111),
 | 
			
		||||
                "name" => "Canale Log",
 | 
			
		||||
                "on" => true,
 | 
			
		||||
                "maintenance" => false,
 | 
			
		||||
                "modules" => [
 | 
			
		||||
                    "king" => 2,
 | 
			
		||||
                    "marriage" => 2,
 | 
			
		||||
                    "happyBirthday" => 2
 | 
			
		||||
                ]
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                "uid" => 8,
 | 
			
		||||
                "id" => (-11111111),
 | 
			
		||||
                "name" => "Only Human",
 | 
			
		||||
                "on" => true,
 | 
			
		||||
                "maintenance" => false,
 | 
			
		||||
                "modules" => [
 | 
			
		||||
                    "king" => 2,
 | 
			
		||||
                    "marriage" => 2,
 | 
			
		||||
                    "happyBirthday" => 2
 | 
			
		||||
                ],
 | 
			
		||||
                "modulesEnabled" => [
 | 
			
		||||
                "log"=>false
 | 
			
		||||
                   
 | 
			
		||||
                ]
 | 
			
		||||
            ],
 | 
			
		||||
        ]
 | 
			
		||||
    ]
 | 
			
		||||
];
 | 
			
		||||
// censored
 | 
			
		||||
$GLOBALS["token"] = '';
 | 
			
		||||
$GLOBALS["baseurl"] = '';
 | 
			
		||||
$GLOBALS["urltoimagekey"] = '';
 | 
			
		||||
$GLOBALS["username"] = "";
 | 
			
		||||
$GLOBALS["masterId"] = 1;
 | 
			
		||||
$GLOBALS["logId"] = -1;
 | 
			
		||||
$GLOBALS["imageServer"] = "";
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										50
									
								
								database.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,50 @@
 | 
			
		||||
BEGIN TRANSACTION;
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "BotChatLog" (
 | 
			
		||||
	"id"	INTEGER NOT NULL,
 | 
			
		||||
	"personTelegramId"	INTEGER,
 | 
			
		||||
	"message"	TEXT,
 | 
			
		||||
	FOREIGN KEY("personTelegramId") REFERENCES "Users"("telegramId")
 | 
			
		||||
);
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "UserGroupLink" (
 | 
			
		||||
	"id"	INTEGER NOT NULL UNIQUE,
 | 
			
		||||
	"userId"	INTEGER NOT NULL,
 | 
			
		||||
	"groupId"	INTEGER NOT NULL,
 | 
			
		||||
	"firstSeen"	INTEGER NOT NULL,
 | 
			
		||||
	"lastSeen"	INTEGER NOT NULL,
 | 
			
		||||
	FOREIGN KEY("groupId") REFERENCES "Groups"("id"),
 | 
			
		||||
	FOREIGN KEY("userId") REFERENCES "Users"("id"),
 | 
			
		||||
	PRIMARY KEY("id" AUTOINCREMENT)
 | 
			
		||||
);
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "Groups" (
 | 
			
		||||
	"id"	INTEGER NOT NULL UNIQUE,
 | 
			
		||||
	"telegramId"	INTEGER NOT NULL UNIQUE,
 | 
			
		||||
	"name"	TEXT NOT NULL,
 | 
			
		||||
	"username"	TEXT,
 | 
			
		||||
	"lastUpdate"	INTEGER NOT NULL,
 | 
			
		||||
	"creation"	INTEGER NOT NULL,
 | 
			
		||||
	PRIMARY KEY("id" AUTOINCREMENT)
 | 
			
		||||
);
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "Users" (
 | 
			
		||||
	"id"	INTEGER NOT NULL UNIQUE,
 | 
			
		||||
	"telegramId"	INTEGER NOT NULL UNIQUE,
 | 
			
		||||
	"name"	TEXT NOT NULL,
 | 
			
		||||
	"username"	TEXT NOT NULL,
 | 
			
		||||
	"privateChatStatus"	TEXT NOT NULL,
 | 
			
		||||
	"editAction"	TEXT NOT NULL,
 | 
			
		||||
	"optedOut"	INTEGER NOT NULL DEFAULT 0,
 | 
			
		||||
	"policyAccepted"	INTEGER NOT NULL DEFAULT 0,
 | 
			
		||||
	"lastUpdate"	INTEGER NOT NULL,
 | 
			
		||||
	"lastAccess"	INTEGER,
 | 
			
		||||
	"lastPrivateMessage"	INTEGER NOT NULL DEFAULT 0,
 | 
			
		||||
	"creation"	INTEGER NOT NULL,
 | 
			
		||||
	"uName"	TEXT,
 | 
			
		||||
	"ubirthDate"	TEXT,
 | 
			
		||||
	"ugender"	TEXT,
 | 
			
		||||
	"uorient"	TEXT,
 | 
			
		||||
	"uplace"	TEXT,
 | 
			
		||||
	"upvtChoice"	TEXT,
 | 
			
		||||
	"uRelationships"	TEXT,
 | 
			
		||||
	"uBio"	TEXT,
 | 
			
		||||
	PRIMARY KEY("id" AUTOINCREMENT)
 | 
			
		||||
);
 | 
			
		||||
COMMIT;
 | 
			
		||||
							
								
								
									
										32
									
								
								database/Database.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,32 @@
 | 
			
		||||
<?php
 | 
			
		||||
/**
 | 
			
		||||
 * Holds a database instance
 | 
			
		||||
 */
 | 
			
		||||
class Database
 | 
			
		||||
{
 | 
			
		||||
    private PDO $pdo;
 | 
			
		||||
    public function __construct(PDO $pdo)
 | 
			
		||||
    {
 | 
			
		||||
        $this->pdo = $pdo;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the value of pdo
 | 
			
		||||
     */ 
 | 
			
		||||
    public function getPdo()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->pdo;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Set the value of pdo
 | 
			
		||||
     *
 | 
			
		||||
     * @return  self
 | 
			
		||||
     */ 
 | 
			
		||||
    public function setPdo($pdo)
 | 
			
		||||
    {
 | 
			
		||||
        $this->pdo = $pdo;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										734
									
								
								database/DatabaseUser.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,734 @@
 | 
			
		||||
<?php
 | 
			
		||||
require_once "common.php";
 | 
			
		||||
use TelegramBot\Api\Types\User;
 | 
			
		||||
/**
 | 
			
		||||
 * A user in the database
 | 
			
		||||
 */
 | 
			
		||||
class DatabaseUser
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    private int $id, $telegramId;
 | 
			
		||||
    private string $name, $username;
 | 
			
		||||
    private string $privateChatStatus;
 | 
			
		||||
    private string $editAction;
 | 
			
		||||
    private bool $policyAccepted, $optedOut;
 | 
			
		||||
    private int $lastUpdate, $lastAccess, $creation;
 | 
			
		||||
    private int $lastPrivateMessage;
 | 
			
		||||
    private Database $database;
 | 
			
		||||
    private ?string $uName, $uGender, $uOrient, $uPlace, $upvtChoice, $uRelationships, $uBio;
 | 
			
		||||
    private ?int $ubirthDate;
 | 
			
		||||
 | 
			
		||||
    public function __construct(Database $database)
 | 
			
		||||
    {
 | 
			
		||||
        $this->database = $database;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static function calcAge(int $unix): int
 | 
			
		||||
    {
 | 
			
		||||
        $tz  = new DateTimeZone('Europe/Brussels');
 | 
			
		||||
        return (int) DateTime::createFromFormat('U', $unix, $tz)
 | 
			
		||||
            ->diff(new DateTime('now', $tz))
 | 
			
		||||
            ->y;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getAge(): int
 | 
			
		||||
    {
 | 
			
		||||
        return self::calcAge($this->getUbirthDate());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Determines the appropriate flag
 | 
			
		||||
     */
 | 
			
		||||
    public function getFlags(): array
 | 
			
		||||
    {
 | 
			
		||||
        $re = [];
 | 
			
		||||
        $o = strtoupper($this->getUOrient() . " " . $this->getUGender() . " " . $this->getUPlace());
 | 
			
		||||
        if (contains("LESB", $o)) $re[] = "lesbian";
 | 
			
		||||
        if ("BI" == explode(" ", $o)[0]) $re[] = "bi";
 | 
			
		||||
        if (contains("FLUID", $o)) $re[] = "fluid";
 | 
			
		||||
        if (contains("ACE", $o)) $re[] = "asex";
 | 
			
		||||
        if (contains("GENDERQ", $o)) $re[] = "gqueer";
 | 
			
		||||
        if (contains("ARO", $o)) $re[] = "aro";
 | 
			
		||||
        if (contains("ASE", $o)) $re[] = "asex";
 | 
			
		||||
        if (contains("GAY", $o)) $re[] = "gay";
 | 
			
		||||
        if (contains("BIS", $o)) $re[] = "bi";
 | 
			
		||||
        if (contains("BSX", $o)) $re[] = "bi";
 | 
			
		||||
        if (contains("PAN", $o)) $re[] = "pan";
 | 
			
		||||
        if (contains("LELL", $o)) $re[] = "lesbian";
 | 
			
		||||
        if (contains("OMNI", $o)) $re[] = "omni";
 | 
			
		||||
        if (contains("QUESTIONING", $o)) $re[] = "questioning";
 | 
			
		||||
        if (contains("DEMIS", $o)) $re[] = "demi";
 | 
			
		||||
        if (contains("NB", $o) || contains("NON BINARY", $o)) $re[] = "nb";
 | 
			
		||||
        if (contains("ETERO", $o) || contains("HET", $o)) $re[] = "etero";
 | 
			
		||||
        if (contains("T4T", $o)) $re[] = "t4t";
 | 
			
		||||
        //orientation, romantic
 | 
			
		||||
        if (contains("BIROM", $o)) $re[] = "Biromantic";
 | 
			
		||||
        if (contains("DEMIG", $o)) $re[] = "demigirl";
 | 
			
		||||
        if (contains("MLM", $o)) $re[] = "mlm";
 | 
			
		||||
        //gender-related
 | 
			
		||||
        if (contains("MTF", $o) || contains("FTM", $o)  || contains("TRANS", $o)) $re[] = "trans";
 | 
			
		||||
        //miscellaneous
 | 
			
		||||
        if (contains("FEMB", $o)) $re[] = "femboy";
 | 
			
		||||
        if (contains("PIEMONTE", $o)) {
 | 
			
		||||
            $re[] = "piemonte";
 | 
			
		||||
            $re[] = "eu";
 | 
			
		||||
            $re[] = "it";
 | 
			
		||||
        }
 | 
			
		||||
        if (contains("LOMBARDIA", $o)) {
 | 
			
		||||
            $re[] = "lombardia";
 | 
			
		||||
            $re[] = "eu";
 | 
			
		||||
            $re[] = "it";
 | 
			
		||||
        }
 | 
			
		||||
        if (contains("VENETO", $o)) {
 | 
			
		||||
            $re[] = "veneto";
 | 
			
		||||
            $re[] = "eu";
 | 
			
		||||
            $re[] = "it";
 | 
			
		||||
        }
 | 
			
		||||
        if (contains("FRIULI", $o)) {
 | 
			
		||||
            $re[] = "friuli";
 | 
			
		||||
            $re[] = "eu";
 | 
			
		||||
            $re[] = "it";
 | 
			
		||||
        }
 | 
			
		||||
        if (contains("TRENTINO", $o)) {
 | 
			
		||||
            $re[] = "trentino";
 | 
			
		||||
            $re[] = "eu";
 | 
			
		||||
            $re[] = "it";
 | 
			
		||||
        }
 | 
			
		||||
        if (contains("LIGURIA", $o)) {
 | 
			
		||||
            $re[] = "liguria";
 | 
			
		||||
            $re[] = "eu";
 | 
			
		||||
            $re[] = "it";
 | 
			
		||||
        }
 | 
			
		||||
        if (contains("EMILIA", $o)) {
 | 
			
		||||
            $re[] = "emilia";
 | 
			
		||||
            $re[] = "eu";
 | 
			
		||||
            $re[] = "it";
 | 
			
		||||
        }
 | 
			
		||||
        if (contains("AOSTA", $o)) {
 | 
			
		||||
            $re[] = "valleAosta";
 | 
			
		||||
            $re[] = "eu";
 | 
			
		||||
            $re[] = "it";
 | 
			
		||||
        }
 | 
			
		||||
        if (contains("TOSCANIA", $o)) {
 | 
			
		||||
            $re[] = "toscania";
 | 
			
		||||
            $re[] = "eu";
 | 
			
		||||
            $re[] = "it";
 | 
			
		||||
        }
 | 
			
		||||
        if (contains("MARCHE", $o)) {
 | 
			
		||||
            $re[] = "marche";
 | 
			
		||||
            $re[] = "eu";
 | 
			
		||||
            $re[] = "it";
 | 
			
		||||
        }
 | 
			
		||||
        if (contains("ABRUZZO", $o)) {
 | 
			
		||||
            $re[] = "abruzzo";
 | 
			
		||||
            $re[] = "eu";
 | 
			
		||||
            $re[] = "it";
 | 
			
		||||
        }
 | 
			
		||||
        if (contains("MOLISE", $o)) {
 | 
			
		||||
            $re[] = "molise";
 | 
			
		||||
            $re[] = "eu";
 | 
			
		||||
            $re[] = "it";
 | 
			
		||||
        }
 | 
			
		||||
        if (contains("LAZIO", $o)) {
 | 
			
		||||
            $re[] = "lazio";
 | 
			
		||||
            $re[] = "eu";
 | 
			
		||||
            $re[] = "it";
 | 
			
		||||
        }
 | 
			
		||||
        if (contains("CAMPANIA", $o)) {
 | 
			
		||||
            $re[] = "campania";
 | 
			
		||||
            $re[] = "eu";
 | 
			
		||||
            $re[] = "it";
 | 
			
		||||
        }
 | 
			
		||||
        if (contains("BASILICATA", $o)) {
 | 
			
		||||
            $re[] = "basilicata";
 | 
			
		||||
            $re[] = "eu";
 | 
			
		||||
            $re[] = "it";
 | 
			
		||||
        }
 | 
			
		||||
        if (contains("CALABRIA", $o)) {
 | 
			
		||||
            $re[] = "calabria";
 | 
			
		||||
            $re[] = "eu";
 | 
			
		||||
            $re[] = "it";
 | 
			
		||||
        }
 | 
			
		||||
        if (contains("PUGLIA", $o)) {
 | 
			
		||||
            $re[] = "puglia";
 | 
			
		||||
            $re[] = "eu";
 | 
			
		||||
            $re[] = "it";
 | 
			
		||||
        }
 | 
			
		||||
        if (contains("SICILIA", $o)) {
 | 
			
		||||
            $re[] = "sicilia";
 | 
			
		||||
            $re[] = "eu";
 | 
			
		||||
            $re[] = "it";
 | 
			
		||||
        }
 | 
			
		||||
        if (contains("SARDEGNA", $o)) {
 | 
			
		||||
            $re[] = "sardegna";
 | 
			
		||||
            $re[] = "eu";
 | 
			
		||||
            $re[] = "it";
 | 
			
		||||
        }
 | 
			
		||||
        if (contains("UMBRIA", $o)) {
 | 
			
		||||
            $re[] = "umbria";
 | 
			
		||||
            $re[] = "eu";
 | 
			
		||||
            $re[] = "it";
 | 
			
		||||
        }
 | 
			
		||||
        if (contains("EU", $o)) $re[] = "eu";
 | 
			
		||||
        if (contains("ITALIA", $o)) $re[] = "it";
 | 
			
		||||
        if (contains("FRANCIA", $o)) $re[] = "fr";
 | 
			
		||||
        if (contains("GERMANIA", $o)) $re[] = "de";
 | 
			
		||||
        if (contains("SLOVENIA", $o)) $re[] = "slovenia";
 | 
			
		||||
        return array_unique($re);
 | 
			
		||||
    }
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the value of id
 | 
			
		||||
     */
 | 
			
		||||
    public function getId()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->id;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Set the value of id
 | 
			
		||||
     *
 | 
			
		||||
     * @return  self
 | 
			
		||||
     */
 | 
			
		||||
    public function setId($id)
 | 
			
		||||
    {
 | 
			
		||||
        $this->id = $id;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the value of telegramId
 | 
			
		||||
     */
 | 
			
		||||
    public function getTelegramId()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->telegramId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Set the value of telegramId
 | 
			
		||||
     *
 | 
			
		||||
     * @return  self
 | 
			
		||||
     */
 | 
			
		||||
    public function setTelegramId($telegramId)
 | 
			
		||||
    {
 | 
			
		||||
        $this->telegramId = $telegramId;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the value of name
 | 
			
		||||
     */
 | 
			
		||||
    public function getName()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->name;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Set the value of name
 | 
			
		||||
     *
 | 
			
		||||
     * @return  self
 | 
			
		||||
     */
 | 
			
		||||
    public function setName($name)
 | 
			
		||||
    {
 | 
			
		||||
        $this->name = $name;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the value of username
 | 
			
		||||
     */
 | 
			
		||||
    public function getUsername()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->username;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Set the value of username
 | 
			
		||||
     *
 | 
			
		||||
     * @return  self
 | 
			
		||||
     */
 | 
			
		||||
    public function setUsername($username)
 | 
			
		||||
    {
 | 
			
		||||
        $this->username = $username;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the value of privateChatStatus
 | 
			
		||||
     */
 | 
			
		||||
    public function getPrivateChatStatus()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->privateChatStatus;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Set the value of privateChatStatus
 | 
			
		||||
     *
 | 
			
		||||
     * @return  self
 | 
			
		||||
     */
 | 
			
		||||
    public function setPrivateChatStatus($privateChatStatus)
 | 
			
		||||
    {
 | 
			
		||||
        $this->privateChatStatus = $privateChatStatus;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the value of editAction
 | 
			
		||||
     */
 | 
			
		||||
    public function getEditAction()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->editAction;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Set the value of editAction
 | 
			
		||||
     *
 | 
			
		||||
     * @return  self
 | 
			
		||||
     */
 | 
			
		||||
    public function setEditAction($editAction)
 | 
			
		||||
    {
 | 
			
		||||
        $this->editAction = $editAction;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the value of policyAccepted
 | 
			
		||||
     */
 | 
			
		||||
    public function getPolicyAccepted()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->policyAccepted;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Set the value of policyAccepted
 | 
			
		||||
     *
 | 
			
		||||
     * @return  self
 | 
			
		||||
     */
 | 
			
		||||
    public function setPolicyAccepted($policyAccepted)
 | 
			
		||||
    {
 | 
			
		||||
        $this->policyAccepted = $policyAccepted;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the value of lastUpdate
 | 
			
		||||
     */
 | 
			
		||||
    public function getLastUpdate()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->lastUpdate;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Set the value of lastUpdate
 | 
			
		||||
     *
 | 
			
		||||
     * @return  self
 | 
			
		||||
     */
 | 
			
		||||
    public function setLastUpdate($lastUpdate)
 | 
			
		||||
    {
 | 
			
		||||
        $this->lastUpdate = $lastUpdate;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the value of creation
 | 
			
		||||
     */
 | 
			
		||||
    public function getCreation()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->creation;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Set the value of creation
 | 
			
		||||
     *
 | 
			
		||||
     * @return  self
 | 
			
		||||
     */
 | 
			
		||||
    public function setCreation($creation)
 | 
			
		||||
    {
 | 
			
		||||
        $this->creation = $creation;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the value of optedOut
 | 
			
		||||
     */
 | 
			
		||||
    public function getOptedOut()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->optedOut;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Set the value of optedOut
 | 
			
		||||
     *
 | 
			
		||||
     * @return  self
 | 
			
		||||
     */
 | 
			
		||||
    public function setOptedOut($optedOut)
 | 
			
		||||
    {
 | 
			
		||||
        $this->optedOut = $optedOut;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static function getByChat(Database $database, User $user): DatabaseUser
 | 
			
		||||
    {
 | 
			
		||||
        $q = $database->getPdo()->prepare("SELECT * FROM Users WHERE telegramId = :telegramId");
 | 
			
		||||
        +$q->execute([":telegramId" => $user->getId()]);
 | 
			
		||||
        $r = $q->fetch(PDO::FETCH_ASSOC);
 | 
			
		||||
        if ($r == null) throw new NotFoundException();
 | 
			
		||||
        $u = new DatabaseUser($database);
 | 
			
		||||
        $u->setId((int) $r["id"]);
 | 
			
		||||
        $u->setTelegramId((int) $r["telegramId"]);
 | 
			
		||||
        $u->setName($r["name"]);
 | 
			
		||||
        $u->setUsername($r["username"]);
 | 
			
		||||
        $u->setPrivateChatStatus($r["privateChatStatus"]);
 | 
			
		||||
        $u->setEditAction($r["editAction"]);
 | 
			
		||||
        $u->setOptedOut((bool) $r["optedOut"]);
 | 
			
		||||
        $u->setPolicyAccepted((bool) $r["policyAccepted"]);
 | 
			
		||||
        $u->setLastUpdate((int) $r["lastUpdate"]);
 | 
			
		||||
        $u->setCreation((int) $r["creation"]);
 | 
			
		||||
        $u->setLastPrivateMessage((int) $r["lastPrivateMessage"]);
 | 
			
		||||
        $u->setUName($r["uName"]);
 | 
			
		||||
        $u->setUbirthDate($r["ubirthDate"]);
 | 
			
		||||
        $u->setUGender($r["ugender"]);
 | 
			
		||||
        $u->setUOrient($r["uorient"]);
 | 
			
		||||
        $u->setUPlace($r["uplace"]);
 | 
			
		||||
        $u->setUpvtChoice($r["upvtChoice"]);
 | 
			
		||||
        $u->setURelationships($r["uRelationships"]);
 | 
			
		||||
        $u->setUBio($r["uBio"]);
 | 
			
		||||
        $u->poke($user);
 | 
			
		||||
        return $u;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static function create(Database $database, User $user): DatabaseUser
 | 
			
		||||
    {
 | 
			
		||||
        $u = new DatabaseUser($database); // TODO FINISH IMPLEMENTING
 | 
			
		||||
        $u->setTelegramId($user->getId());
 | 
			
		||||
        $u->setName($user->getFirstName() . " " . $user->getLastName());
 | 
			
		||||
        $u->setUsername($user->getUsername());
 | 
			
		||||
        $u->setPrivateChatStatus(PrivateChat::STATUS_ASK_DM);
 | 
			
		||||
        $u->setEditAction("");
 | 
			
		||||
        $u->setOptedOut(false);
 | 
			
		||||
        $u->setPolicyAccepted(false);
 | 
			
		||||
        $u->setLastUpdate(time());
 | 
			
		||||
        $u->setCreation(time());
 | 
			
		||||
        $u->setLastPrivateMessage(0);
 | 
			
		||||
        $u->setUName(null);
 | 
			
		||||
        $u->setUbirthDate(null);
 | 
			
		||||
        $u->setUGender(null);
 | 
			
		||||
        $u->setUOrient(null);
 | 
			
		||||
        $u->setUPlace(null);
 | 
			
		||||
        $u->setUpvtChoice(null);
 | 
			
		||||
        $u->setURelationships(null);
 | 
			
		||||
        $u->setUBio(null);
 | 
			
		||||
        $u->save(true);
 | 
			
		||||
        return $u;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function setNULL(string $step): void
 | 
			
		||||
    {
 | 
			
		||||
        if ($step == PrivateChat::STATUS_ASK_NAME) $this->setUName(null);
 | 
			
		||||
        if ($step == PrivateChat::STATUS_ASK_BIRTH) $this->setUbirthDate(null);
 | 
			
		||||
        if ($step == PrivateChat::STATUS_ASK_GENDER) $this->setUGender(null);
 | 
			
		||||
        if ($step == PrivateChat::STATUS_ASK_ORIENT)  $this->setUOrient(null);
 | 
			
		||||
        if ($step == PrivateChat::STATUS_ASK_WHERE) $this->setUPlace(null);
 | 
			
		||||
        if ($step == PrivateChat::STATUS_ASK_PVT) $this->setUpvtChoice(null);
 | 
			
		||||
        if ($step == PrivateChat::STATUS_ASK_REL)  $this->setURelationships(null);
 | 
			
		||||
        if ($step == PrivateChat::STATUS_ASK_BIO)  $this->setUBio(null);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function listUncompleted(): string
 | 
			
		||||
    {
 | 
			
		||||
        $list = "";
 | 
			
		||||
        if (!$this->getUName()) $list .= "\n➡ Nome";
 | 
			
		||||
        if (!$this->getUbirthDate()) $list .= "\n➡ Data di nascita";
 | 
			
		||||
        if (!$this->getUGender()) $list .= "\n➡ Genere";
 | 
			
		||||
        if (!$this->getUOrient()) $list .= "\n➡ Orientamento";
 | 
			
		||||
        if (!$this->getUPlace()) $list .= "\n➡ Provenienza";
 | 
			
		||||
        if (!$this->getUpvtChoice()) $list .= "\n➡ Messaggi privati";
 | 
			
		||||
        if (!$this->getURelationships()) $list .= "\n➡ Relazioni";
 | 
			
		||||
        if (!$this->getUBio()) $list .= "\n➡ Bio";
 | 
			
		||||
        return $list;
 | 
			
		||||
    }
 | 
			
		||||
    public function countCompleted(): int
 | 
			
		||||
    {
 | 
			
		||||
        $tot = 0;
 | 
			
		||||
        if ($this->getUName()) $tot++;
 | 
			
		||||
        if ($this->getUbirthDate()) $tot++;
 | 
			
		||||
        if ($this->getUGender()) $tot++;
 | 
			
		||||
        if ($this->getUOrient()) $tot++;
 | 
			
		||||
        if ($this->getUPlace()) $tot++;
 | 
			
		||||
        if ($this->getUpvtChoice()) $tot++;
 | 
			
		||||
        if ($this->getURelationships()) $tot++;
 | 
			
		||||
        if ($this->getUBio()) $tot++;
 | 
			
		||||
        return $tot;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function poke(User $user): void
 | 
			
		||||
    {
 | 
			
		||||
        $this->setTelegramId($user->getId());
 | 
			
		||||
        $this->setName($user->getFirstName() . " " . $user->getLastName());
 | 
			
		||||
        $this->setUsername($user->getUsername());
 | 
			
		||||
        $this->setLastAccess(time());
 | 
			
		||||
        $this->save(false);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function save(bool $isNew): void
 | 
			
		||||
    {
 | 
			
		||||
        $exec = [
 | 
			
		||||
            ":telegramId" => $this->getTelegramId(),
 | 
			
		||||
            ":name" => $this->getName(),
 | 
			
		||||
            ":username" => $this->getUsername(),
 | 
			
		||||
            ":privateChatStatus" => $this->getPrivateChatStatus(),
 | 
			
		||||
            ":editAction" => $this->getEditAction(),
 | 
			
		||||
            ":optedOut" => $this->getOptedOut(),
 | 
			
		||||
            ":policyAccepted" => $this->getPolicyAccepted(),
 | 
			
		||||
            ":lastUpdate" => time(),
 | 
			
		||||
            ":lastAccess" => time(),
 | 
			
		||||
            ":lastPrivateMessage" => $this->getLastPrivateMessage(),
 | 
			
		||||
            ":uName" => $this->getUName(),
 | 
			
		||||
            ":ubirthDate" => $this->getUbirthDate(),
 | 
			
		||||
            ":ugender" => $this->getuGender(),
 | 
			
		||||
            ":uorient" => $this->getUOrient(),
 | 
			
		||||
            ":uplace" => $this->getUPlace(),
 | 
			
		||||
            ":upvtChoice" => $this->getUpvtChoice(),
 | 
			
		||||
            ":uRelationships" => $this->getURelationships(),
 | 
			
		||||
            ":uBio" => $this->getUBio()
 | 
			
		||||
        ];
 | 
			
		||||
        if (!$isNew) {
 | 
			
		||||
            $q = $this->getDatabase()->getPdo()->prepare("UPDATE Users SET telegramId = :telegramId, name=:name, username=:username, privateChatStatus=:privateChatStatus, editAction=:editAction, optedOut=:optedOut, policyAccepted=:policyAccepted, lastUpdate=:lastUpdate, lastAccess=:lastAccess, lastPrivateMessage=:lastPrivateMessage, uName=:uName, ubirthDate=:ubirthDate, ugender=:ugender, uorient=:uorient, uplace=:uplace, upvtChoice=:upvtChoice, uRelationships=:uRelationships, uBio=:uBio WHERE telegramId=:telegramId");
 | 
			
		||||
            $exec[":telegramId"] = $this->getTelegramId();
 | 
			
		||||
        } else {
 | 
			
		||||
            $q = $this->getDatabase()->getPdo()->prepare("INSERT INTO Users(telegramId, name, username, privateChatStatus, editAction, optedOut, policyAccepted, lastUpdate, lastAccess, lastPrivateMessage, creation, uName, ubirthDate, ugender, uorient, uplace, upvtChoice, uRelationships, uBio) VALUES(:telegramId, :name, :username, :privateChatStatus, :editAction, :optedOut, :policyAccepted, :lastUpdate, :lastAccess, :lastPrivateMessage, :creation, :uName, :ubirthDate, :ugender, :uorient, :uplace, :upvtChoice, :uRelationships, :uBio)");
 | 
			
		||||
            $exec[":creation"] = time();
 | 
			
		||||
        }
 | 
			
		||||
        $q->execute($exec);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the value of lastAccess
 | 
			
		||||
     */
 | 
			
		||||
    public function getLastAccess()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->lastAccess;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Set the value of lastAccess
 | 
			
		||||
     *
 | 
			
		||||
     * @return  self
 | 
			
		||||
     */
 | 
			
		||||
    public function setLastAccess($lastAccess)
 | 
			
		||||
    {
 | 
			
		||||
        $this->lastAccess = $lastAccess;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the value of database
 | 
			
		||||
     */
 | 
			
		||||
    public function getDatabase()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->database;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Set the value of database
 | 
			
		||||
     *
 | 
			
		||||
     * @return  self
 | 
			
		||||
     */
 | 
			
		||||
    public function setDatabase($database)
 | 
			
		||||
    {
 | 
			
		||||
        $this->database = $database;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the value of lastPrivateMessage
 | 
			
		||||
     */
 | 
			
		||||
    public function getLastPrivateMessage()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->lastPrivateMessage;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Set the value of lastPrivateMessage
 | 
			
		||||
     *
 | 
			
		||||
     * @return  self
 | 
			
		||||
     */
 | 
			
		||||
    public function setLastPrivateMessage($lastPrivateMessage)
 | 
			
		||||
    {
 | 
			
		||||
        $this->lastPrivateMessage = $lastPrivateMessage;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the value of uName
 | 
			
		||||
     */
 | 
			
		||||
    public function getUName()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->uName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Set the value of uName
 | 
			
		||||
     *
 | 
			
		||||
     * @return  self
 | 
			
		||||
     */
 | 
			
		||||
    public function setUName($uName)
 | 
			
		||||
    {
 | 
			
		||||
        $this->uName = $uName;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the value of ubirthDate
 | 
			
		||||
     */
 | 
			
		||||
    public function getUbirthDate()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->ubirthDate;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Set the value of ubirthDate
 | 
			
		||||
     *
 | 
			
		||||
     * @return  self
 | 
			
		||||
     */
 | 
			
		||||
    public function setUbirthDate($ubirthDate)
 | 
			
		||||
    {
 | 
			
		||||
        $this->ubirthDate = $ubirthDate;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the value of uGender
 | 
			
		||||
     */
 | 
			
		||||
    public function getUGender()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->uGender;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Set the value of uGender
 | 
			
		||||
     *
 | 
			
		||||
     * @return  self
 | 
			
		||||
     */
 | 
			
		||||
    public function setUGender($uGender)
 | 
			
		||||
    {
 | 
			
		||||
        $this->uGender = $uGender;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the value of uOrient
 | 
			
		||||
     */
 | 
			
		||||
    public function getUOrient()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->uOrient;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Set the value of uOrient
 | 
			
		||||
     *
 | 
			
		||||
     * @return  self
 | 
			
		||||
     */
 | 
			
		||||
    public function setUOrient($uOrient)
 | 
			
		||||
    {
 | 
			
		||||
        $this->uOrient = $uOrient;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the value of uPlace
 | 
			
		||||
     */
 | 
			
		||||
    public function getUPlace()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->uPlace;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Set the value of uPlace
 | 
			
		||||
     *
 | 
			
		||||
     * @return  self
 | 
			
		||||
     */
 | 
			
		||||
    public function setUPlace($uPlace)
 | 
			
		||||
    {
 | 
			
		||||
        $this->uPlace = $uPlace;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the value of upvtChoice
 | 
			
		||||
     */
 | 
			
		||||
    public function getUpvtChoice()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->upvtChoice;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Set the value of upvtChoice
 | 
			
		||||
     *
 | 
			
		||||
     * @return  self
 | 
			
		||||
     */
 | 
			
		||||
    public function setUpvtChoice($upvtChoice)
 | 
			
		||||
    {
 | 
			
		||||
        $this->upvtChoice = $upvtChoice;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the value of uRelationships
 | 
			
		||||
     */
 | 
			
		||||
    public function getURelationships()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->uRelationships;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Set the value of uRelationships
 | 
			
		||||
     *
 | 
			
		||||
     * @return  self
 | 
			
		||||
     */
 | 
			
		||||
    public function setURelationships($uRelationships)
 | 
			
		||||
    {
 | 
			
		||||
        $this->uRelationships = $uRelationships;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the value of uBio
 | 
			
		||||
     */
 | 
			
		||||
    public function getUBio()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->uBio;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Set the value of uBio
 | 
			
		||||
     *
 | 
			
		||||
     * @return  self
 | 
			
		||||
     */
 | 
			
		||||
    public function setUBio($uBio)
 | 
			
		||||
    {
 | 
			
		||||
        $this->uBio = $uBio;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										207
									
								
								database/Group.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,207 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
use TelegramBot\Api\Types\Message;
 | 
			
		||||
use \TelegramBot\Api\Client;
 | 
			
		||||
 | 
			
		||||
class Group
 | 
			
		||||
{
 | 
			
		||||
    private int $id;
 | 
			
		||||
    private int $telegramId;
 | 
			
		||||
    private string $name, $username;
 | 
			
		||||
    private int $lastUpdate, $creation;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    public static function listAll(Database $database): array
 | 
			
		||||
    {
 | 
			
		||||
        $list = [];
 | 
			
		||||
        $q = $database->getPdo()->prepare("SELECT * FROM Groups");
 | 
			
		||||
        $q->execute();
 | 
			
		||||
        while ($r = $q->fetch(PDO::FETCH_ASSOC)) {
 | 
			
		||||
            $g = new Group();
 | 
			
		||||
            $g->setId((int) $r["id"]);
 | 
			
		||||
            $g->setTelegramId((int) $r["telegramId"]);
 | 
			
		||||
            $g->setName((string) $r["name"]);
 | 
			
		||||
            $g->setUsername((string) $r["username"]);
 | 
			
		||||
            $g->setLastUpdate((int) $r["lastUpdate"]);
 | 
			
		||||
            $g->setCreation((int) $r["creation"]);
 | 
			
		||||
            $list[] = $g;
 | 
			
		||||
        }
 | 
			
		||||
        return $list;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static function poke(Database $database, Message $message, DatabaseUser $du): array
 | 
			
		||||
    {
 | 
			
		||||
        $res = [];
 | 
			
		||||
        $group = $message->getChat();
 | 
			
		||||
        $q = $database->getPdo()->prepare("SELECT id FROM Groups WHERE telegramId=:telegramId");
 | 
			
		||||
        $q->execute([":telegramId" => $group->getId()]);
 | 
			
		||||
        $r = $q->fetch(PDO::FETCH_ASSOC);
 | 
			
		||||
        if ($r) {
 | 
			
		||||
            $q = $database->getPdo()->prepare("UPDATE Groups SET telegramId=:telegramId, name=:name, username=:username, lastUpdate=:lastUpdate WHERE id=:id");
 | 
			
		||||
            $q->execute([
 | 
			
		||||
                ":telegramId" => $group->getId(),
 | 
			
		||||
                ":name" => $group->getTitle(),
 | 
			
		||||
                ":username" => $group->getUsername(),
 | 
			
		||||
                ":lastUpdate" => time(),
 | 
			
		||||
                ":id" => $r["id"]
 | 
			
		||||
            ]);
 | 
			
		||||
            $res[] = false;
 | 
			
		||||
        } else {
 | 
			
		||||
            $q = $database->getPdo()->prepare("INSERT INTO Groups(telegramId, name, username, lastUpdate, creation) VALUES(:telegramId, :name, :username, :lastUpdate, :creation)");
 | 
			
		||||
            $q->execute([
 | 
			
		||||
                ":telegramId" => $group->getId(),
 | 
			
		||||
                ":name" => $group->getTitle(),
 | 
			
		||||
                ":username" => $group->getUsername(),
 | 
			
		||||
                ":lastUpdate" => time(),
 | 
			
		||||
                ":creation" => time()
 | 
			
		||||
            ]);
 | 
			
		||||
            $res[] = true;
 | 
			
		||||
        }
 | 
			
		||||
        $q = $database->getPdo()->prepare("SELECT * FROM UserGroupLink WHERE groupId=:groupId AND userId=:userId");
 | 
			
		||||
        $q->execute([":groupId" => $group->getId(), ":userId" => $message->getFrom()->getId()]);
 | 
			
		||||
        $r = $q->fetch(PDO::FETCH_ASSOC);
 | 
			
		||||
        if ($r) {
 | 
			
		||||
            $q = $database->getPdo()->prepare("UPDATE UserGroupLink SET userId=:userId, groupId=:groupId, lastSeen=:lastSeen WHERE id=:id");
 | 
			
		||||
            $q->execute([
 | 
			
		||||
                ":userId" => $message->getFrom()->getId(),
 | 
			
		||||
                ":groupId" => $group->getId(),
 | 
			
		||||
                ":lastSeen" => time(),
 | 
			
		||||
                ":id" => $r["id"]
 | 
			
		||||
            ]);
 | 
			
		||||
 | 
			
		||||
            $res[] = false;
 | 
			
		||||
        } else {
 | 
			
		||||
            $q = $database->getPdo()->prepare("INSERT INTO UserGroupLink(userId, groupId, firstSeen, lastSeen) VALUES(:userId, :groupId, :firstSeen, :lastSeen)");
 | 
			
		||||
            $q->execute([
 | 
			
		||||
                ":userId" => $message->getFrom()->getId(),
 | 
			
		||||
                ":groupId" => $group->getId(),
 | 
			
		||||
                ":firstSeen" => time(),
 | 
			
		||||
                ":lastSeen" => time()
 | 
			
		||||
            ]);
 | 
			
		||||
            if ($du->getPrivateChatStatus() == PrivateChat::STATUS_EXCLUDED) $res[] = false;
 | 
			
		||||
            else $res[] = true;
 | 
			
		||||
        }
 | 
			
		||||
        return $res;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the value of id
 | 
			
		||||
     */
 | 
			
		||||
    public function getId()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->id;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Set the value of id
 | 
			
		||||
     *
 | 
			
		||||
     * @return  self
 | 
			
		||||
     */
 | 
			
		||||
    public function setId($id)
 | 
			
		||||
    {
 | 
			
		||||
        $this->id = $id;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the value of telegramId
 | 
			
		||||
     */
 | 
			
		||||
    public function getTelegramId()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->telegramId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Set the value of telegramId
 | 
			
		||||
     *
 | 
			
		||||
     * @return  self
 | 
			
		||||
     */
 | 
			
		||||
    public function setTelegramId($telegramId)
 | 
			
		||||
    {
 | 
			
		||||
        $this->telegramId = $telegramId;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the value of name
 | 
			
		||||
     */
 | 
			
		||||
    public function getName()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->name;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Set the value of name
 | 
			
		||||
     *
 | 
			
		||||
     * @return  self
 | 
			
		||||
     */
 | 
			
		||||
    public function setName($name)
 | 
			
		||||
    {
 | 
			
		||||
        $this->name = $name;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the value of username
 | 
			
		||||
     */
 | 
			
		||||
    public function getUsername()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->username;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Set the value of username
 | 
			
		||||
     *
 | 
			
		||||
     * @return  self
 | 
			
		||||
     */
 | 
			
		||||
    public function setUsername($username)
 | 
			
		||||
    {
 | 
			
		||||
        $this->username = $username;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the value of lastUpdate
 | 
			
		||||
     */
 | 
			
		||||
    public function getLastUpdate()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->lastUpdate;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Set the value of lastUpdate
 | 
			
		||||
     *
 | 
			
		||||
     * @return  self
 | 
			
		||||
     */
 | 
			
		||||
    public function setLastUpdate($lastUpdate)
 | 
			
		||||
    {
 | 
			
		||||
        $this->lastUpdate = $lastUpdate;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the value of creation
 | 
			
		||||
     */
 | 
			
		||||
    public function getCreation()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->creation;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Set the value of creation
 | 
			
		||||
     *
 | 
			
		||||
     * @return  self
 | 
			
		||||
     */
 | 
			
		||||
    public function setCreation($creation)
 | 
			
		||||
    {
 | 
			
		||||
        $this->creation = $creation;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										2
									
								
								database/NotFoundException.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,2 @@
 | 
			
		||||
<?php
 | 
			
		||||
class NotFoundException extends Exception{}
 | 
			
		||||
							
								
								
									
										87
									
								
								eva.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,87 @@
 | 
			
		||||
<?php
 | 
			
		||||
function evaSplit($text)
 | 
			
		||||
{
 | 
			
		||||
    $text = chunk_split($text, 38, "\n");
 | 
			
		||||
    $list = explode("\n", $text);
 | 
			
		||||
    array_filter($list);
 | 
			
		||||
    $f = "";
 | 
			
		||||
    foreach ($list as $el) {
 | 
			
		||||
        $f .= htmlentities(trim($el)) . "<br />";
 | 
			
		||||
    }
 | 
			
		||||
    return $f;
 | 
			
		||||
}
 | 
			
		||||
$data = json_decode($_GET["data"]);
 | 
			
		||||
if ($data == null) {
 | 
			
		||||
?>
 | 
			
		||||
    <header class="eva-heading">
 | 
			
		||||
        <h2 class="eva-heading__title">NEON</h2>
 | 
			
		||||
        <h2 class="eva-heading__title">GENESIS</h2>
 | 
			
		||||
        <h1 class="eva-heading__title">EVANGELION</h1>
 | 
			
		||||
        <h3 class="eva-heading__episode-number">EPISODE: YES</h3>
 | 
			
		||||
        <h4 class="eva-heading__episode-title">
 | 
			
		||||
            Application Error, call NERV
 | 
			
		||||
        </h4>
 | 
			
		||||
    </header>
 | 
			
		||||
<?php
 | 
			
		||||
} else {
 | 
			
		||||
?>
 | 
			
		||||
    <header class="eva-heading">
 | 
			
		||||
        <h2 class="eva-heading__title"><?php echo htmlentities($data[0]); ?></h2>
 | 
			
		||||
        <h2 class="eva-heading__title"><?php echo htmlentities($data[1]); ?></h2>
 | 
			
		||||
        <h1 class="eva-heading__title"><?php echo htmlentities($data[2]); ?></h1>
 | 
			
		||||
        <h3 class="eva-heading__episode-number"><?php echo htmlentities($data[3]); ?></h3>
 | 
			
		||||
        <h4 class="eva-heading__episode-title">
 | 
			
		||||
            <?php echo evaSplit($data[4]); ?>
 | 
			
		||||
        </h4>
 | 
			
		||||
    </header>
 | 
			
		||||
<?php
 | 
			
		||||
}
 | 
			
		||||
?>
 | 
			
		||||
<style>
 | 
			
		||||
    * {
 | 
			
		||||
        margin: 0;
 | 
			
		||||
        padding: 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    body {
 | 
			
		||||
        background-color: black;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .eva-heading {
 | 
			
		||||
        padding: 32px;
 | 
			
		||||
        align-self: baseline;
 | 
			
		||||
        font-family: serif;
 | 
			
		||||
        color: white;
 | 
			
		||||
        text-shadow: 0 0 2px #e19a86, 0 0 1.5px #854535, 0 0 1.5px #5c150c;
 | 
			
		||||
        width: 600px;
 | 
			
		||||
        height: 478px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .eva-heading>h1 {
 | 
			
		||||
        font-size: 500%;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .eva-heading>h2 {
 | 
			
		||||
        font-size: 300%;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .eva-heading__title {
 | 
			
		||||
        transform: scale(1, 1.5);
 | 
			
		||||
        line-height: 1.2em;
 | 
			
		||||
        letter-spacing: -.03em;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .eva-heading__episode-number {
 | 
			
		||||
        font-family: sans-serif;
 | 
			
		||||
        font-size: 180%;
 | 
			
		||||
        transform: scale(1, 1.5);
 | 
			
		||||
        letter-spacing: -.06em;
 | 
			
		||||
        margin: 10px 0 26px 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .eva-heading__episode-title {
 | 
			
		||||
        transform: scale(1, 1.3);
 | 
			
		||||
        font-size: 170%;
 | 
			
		||||
        line-height: 1em;
 | 
			
		||||
    }
 | 
			
		||||
</style>
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 5.0 KiB  | 
| 
		 Before Width: | Height: | Size: 686 KiB After Width: | Height: | Size: 686 KiB  | 
| 
		 Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 58 KiB  | 
| 
		 Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB  | 
| 
		 Before Width: | Height: | Size: 431 B After Width: | Height: | Size: 431 B  | 
| 
		 Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 76 KiB  | 
| 
		 Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB  | 
| 
		 Before Width: | Height: | Size: 84 KiB After Width: | Height: | Size: 84 KiB  | 
| 
		 Before Width: | Height: | Size: 55 KiB After Width: | Height: | Size: 55 KiB  | 
| 
		 Before Width: | Height: | Size: 989 B After Width: | Height: | Size: 989 B  | 
| 
		 Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB  | 
| 
		 Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 73 KiB  | 
| 
		 Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB  | 
| 
		 Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB  | 
| 
		 Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB  | 
| 
		 Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB  | 
| 
		 Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB  | 
| 
		 Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB  | 
| 
		 Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB  | 
| 
		 Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB  | 
| 
		 Before Width: | Height: | Size: 735 B After Width: | Height: | Size: 735 B  | 
| 
		 Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB  | 
| 
		 Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB  | 
| 
		 Before Width: | Height: | Size: 237 KiB After Width: | Height: | Size: 237 KiB  | 
| 
		 Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB  | 
| 
		 Before Width: | Height: | Size: 87 KiB After Width: | Height: | Size: 87 KiB  | 
| 
		 Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB  | 
| 
		 Before Width: | Height: | Size: 83 KiB After Width: | Height: | Size: 83 KiB  | 
| 
		 Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB  | 
| 
		 Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 70 KiB  | 
| 
		 Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 3.8 KiB  | 
| 
		 Before Width: | Height: | Size: 402 B After Width: | Height: | Size: 402 B  | 
| 
		 Before Width: | Height: | Size: 404 B After Width: | Height: | Size: 404 B  | 
| 
		 Before Width: | Height: | Size: 7.6 KiB After Width: | Height: | Size: 7.6 KiB  | 
| 
		 Before Width: | Height: | Size: 280 KiB After Width: | Height: | Size: 280 KiB  | 
| 
		 Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 6.6 KiB  | 
| 
		 Before Width: | Height: | Size: 351 KiB After Width: | Height: | Size: 351 KiB  | 
| 
		 Before Width: | Height: | Size: 205 KiB After Width: | Height: | Size: 205 KiB  | 
| 
		 Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB  | 
| 
		 Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 42 KiB  | 
| 
		 Before Width: | Height: | Size: 512 KiB After Width: | Height: | Size: 512 KiB  | 
| 
		 Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB  | 
| 
		 Before Width: | Height: | Size: 515 KiB After Width: | Height: | Size: 515 KiB  | 
| 
		 Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 72 KiB  | 
| 
		 Before Width: | Height: | Size: 390 KiB After Width: | Height: | Size: 390 KiB  | 
| 
		 Before Width: | Height: | Size: 189 KiB After Width: | Height: | Size: 189 KiB  | 
							
								
								
									
										97
									
								
								handlers/Card.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,97 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
use \TelegramBot\Api\Types\Message;
 | 
			
		||||
use \TelegramBot\Api\Types\User;
 | 
			
		||||
use \TelegramBot\Api\Client;
 | 
			
		||||
use  \TelegramBot\Api\Types\Inline\InlineKeyboardMarkup;
 | 
			
		||||
 | 
			
		||||
class Card extends Command
 | 
			
		||||
{
 | 
			
		||||
    private Database $database;
 | 
			
		||||
    private ?User $user;
 | 
			
		||||
    public static function exposedCommands(): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
    public function __construct(Message $message, Client $bot, Database $database, ?User $user = null)
 | 
			
		||||
    {
 | 
			
		||||
        parent::__construct($message, $bot);
 | 
			
		||||
        $this->database = $database;
 | 
			
		||||
        $this->user = $user;
 | 
			
		||||
    }
 | 
			
		||||
    public function execute(): void
 | 
			
		||||
    {
 | 
			
		||||
        if (!$this->replyUser) $this->replyUser = $this->message->getFrom();
 | 
			
		||||
        $m = $this->message->getReplyToMessage();
 | 
			
		||||
        if (!$m) {
 | 
			
		||||
            $this->sendCard($this->message->getFrom(), $this->message->getChat()->getId(), $this->message->getMessageId());
 | 
			
		||||
        } else {
 | 
			
		||||
            $this->sendCard($m->getFrom(), $m->getChat()->getId(), $m->getMessageId());
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    public function viewPVC(DatabaseUser $du)
 | 
			
		||||
    {
 | 
			
		||||
        if ($du->getLastPrivateMessage() != 0) $this->bot->deleteMessage(
 | 
			
		||||
            $this->user->getId(),
 | 
			
		||||
            $du->getLastPrivateMessage()
 | 
			
		||||
        );
 | 
			
		||||
        $keyboard = new InlineKeyboardMarkup([
 | 
			
		||||
            [
 | 
			
		||||
                ['text' => "✅ Ok", 'callback_data' => 'endSet#save']
 | 
			
		||||
            ]
 | 
			
		||||
        ]);
 | 
			
		||||
        $m = $this->sendCard($this->user, $this->user->getId(), null, $keyboard);
 | 
			
		||||
        $du->setLastPrivateMessage($m->getMessageId());
 | 
			
		||||
        $du->setPrivateChatStatus(PrivateChat::STATUS_VIEWING_CARD);
 | 
			
		||||
        $du->save(false);
 | 
			
		||||
    }
 | 
			
		||||
    public function sendCard(User $u, int $chatId, ?int $replyTo = null, $keyboard = null)
 | 
			
		||||
    {
 | 
			
		||||
        $du = DatabaseUser::getByChat($this->database, $u);
 | 
			
		||||
        if ($du->getPrivateChatStatus() != PrivateChat::STATUS_ENDED && $du->getPrivateChatStatus() != PrivateChat::STATUS_VIEWING_CARD) {
 | 
			
		||||
            $message = $this->bot->sendMessage($chatId, "L'utente non ha ancora impostato i suoi dati o li sta modificando.", "HTML", false, $replyTo, $keyboard);
 | 
			
		||||
            $du->setPrivateChatStatus(PrivateChat::STATUS_ENDED);
 | 
			
		||||
            return $message;
 | 
			
		||||
        }
 | 
			
		||||
        if ($du->countCompleted() == 0) {
 | 
			
		||||
            $message = $this->bot->sendMessage($chatId, "Non ci sono dati", "HTML", false, $replyTo, $keyboard);
 | 
			
		||||
            $du->setPrivateChatStatus(PrivateChat::STATUS_ENDED);
 | 
			
		||||
            return $message;
 | 
			
		||||
        }
 | 
			
		||||
        $ps = $this->bot->getUserProfilePhotos($u->getId())->getPhotos();
 | 
			
		||||
        $firstPhoto = $ps[0];
 | 
			
		||||
        $biggest = $firstPhoto[count($firstPhoto) - 1];
 | 
			
		||||
        $path = $this->bot->getFile($biggest->getFileId())->getFilePath();
 | 
			
		||||
        $url = "https://api.telegram.org/file/bot" . $GLOBALS["token"] . "/" . $path;
 | 
			
		||||
        $data = [
 | 
			
		||||
            "name" => $du->getUName(),
 | 
			
		||||
            "birth" => $du->getUbirthDate(),
 | 
			
		||||
            "gender" => $du->getUGender(),
 | 
			
		||||
            "orientation" => $du->getUOrient(),
 | 
			
		||||
            "where" => $du->getUPlace(),
 | 
			
		||||
            "pvt" => $du->getUpvtChoice(),
 | 
			
		||||
            "rel" => $du->getURelationships(),
 | 
			
		||||
            "flags" => $du->getFlags(),
 | 
			
		||||
            "isDev" => $du->getTelegramId() == $GLOBALS["masterId"],
 | 
			
		||||
            "img" => $url,
 | 
			
		||||
            "nonce" => bin2hex(random_bytes(16))
 | 
			
		||||
        ];
 | 
			
		||||
        $height = 480 + floor(count($du->getFlags()) / 5) * 100;
 | 
			
		||||
        $url =  $GLOBALS["imageServer"] . "?access_key=" . $GLOBALS["urltoimagekey"] . "&url=" . $GLOBALS["baseurl"] . "/card.php%3Fdata%3D" . urlencode(json_encode($data)) . "&height=$height&width=600";
 | 
			
		||||
        $this->bot->sendChatAction($this->message->getChat()->getId(), "upload_photo");
 | 
			
		||||
        try {
 | 
			
		||||
            $message = $this->bot->sendPhoto(
 | 
			
		||||
                $chatId,
 | 
			
		||||
                $url,
 | 
			
		||||
                "",
 | 
			
		||||
                $replyTo,
 | 
			
		||||
                $keyboard,
 | 
			
		||||
                null,
 | 
			
		||||
                "HTML"
 | 
			
		||||
            );
 | 
			
		||||
        } catch (\TelegramBot\Api\Exception $e) {
 | 
			
		||||
            $message = $this->bot->sendMessage($chatId, "Non è stato possibile generare l'immagine", "HTML", false, $replyTo, $keyboard);
 | 
			
		||||
        }
 | 
			
		||||
        return $message;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										33
									
								
								handlers/Command.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,33 @@
 | 
			
		||||
<?php
 | 
			
		||||
use \TelegramBot\Api\Types\Message;
 | 
			
		||||
use \TelegramBot\Api\Client;
 | 
			
		||||
class Command
 | 
			
		||||
{
 | 
			
		||||
    protected $message; // Message
 | 
			
		||||
    protected $bot; // Client
 | 
			
		||||
    public function __construct(Message $message, Client $bot)
 | 
			
		||||
    {
 | 
			
		||||
        $this->message = $message;
 | 
			
		||||
        $this->bot = $bot;
 | 
			
		||||
    }
 | 
			
		||||
    protected function multiExplode(string $string, array $delimiters, int $max = -1): array
 | 
			
		||||
    {
 | 
			
		||||
        $l = [];
 | 
			
		||||
        $temp = "";
 | 
			
		||||
        $found = 0;
 | 
			
		||||
        foreach (str_split($string) as $char) {
 | 
			
		||||
            if (in_array($char, $delimiters)) {
 | 
			
		||||
                if ($max != -1 && $found == $max) break;
 | 
			
		||||
                $l[] = $temp;
 | 
			
		||||
                $temp = "";
 | 
			
		||||
                $found++;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return $l;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function execute(): void{
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										42
									
								
								handlers/Eva.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,42 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
use \TelegramBot\Api\Types\Message;
 | 
			
		||||
use \TelegramBot\Api\Client;
 | 
			
		||||
 | 
			
		||||
class Eva extends Command
 | 
			
		||||
{
 | 
			
		||||
    public static function exposedCommands(): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
    public function __construct(Message $message, Client $bot)
 | 
			
		||||
    {
 | 
			
		||||
        parent::__construct($message, $bot);
 | 
			
		||||
    }
 | 
			
		||||
    public function execute(): void
 | 
			
		||||
    {
 | 
			
		||||
        $remaining = PictureAPIRateLimitHandler::countAdd();
 | 
			
		||||
        if ($remaining->getFinished() == CountAddResult::FINISHED_TODAY) {
 | 
			
		||||
            $message = $this->bot->sendMessage($this->message->getChat()->getId(), "È stato raggiunto il numero massimo di immagini giornaliero (" . $remaining->getDailyLimit() . ")", "HTML", false);
 | 
			
		||||
        } elseif ($remaining->getFinished() == CountAddResult::FINISHED_UNTIL_RENEW) {
 | 
			
		||||
            $message = $this->bot->sendMessage($this->message->getChat()->getId(), "È stato raggiunto il numero massimo di immagini ( stop fino a " . date("d/m/Y H:i:s", $remaining->getReset()) . ")", "HTML", false);
 | 
			
		||||
        } else {
 | 
			
		||||
            $m = $this->message->getReplyToMessage();
 | 
			
		||||
            if (!$m) {
 | 
			
		||||
                $this->bot->sendMessage($this->message->getChat()->getId(), "Cita un messaggio di testo", null, false, $this->message->getMessageId());
 | 
			
		||||
            } else {
 | 
			
		||||
                $url =  "https://api.apiflash.com/v1/urltoimage?access_key=" . $GLOBALS["urltoimagekey"] . "&url=" . $GLOBALS["baseurl"] . "/eva.php%3Fdata%3D" . urlencode(json_encode(explode("\n", $m->getText()))) . "&height=478&width=600";
 | 
			
		||||
                $this->bot->sendChatAction($this->message->getChat()->getId(), "upload_photo");
 | 
			
		||||
                $this->bot->sendPhoto(
 | 
			
		||||
                    $this->message->getChat()->getId(),
 | 
			
		||||
                    $url,
 | 
			
		||||
                    $remaining->getRemainingToday() . " immagini rimanenti oggi",
 | 
			
		||||
                    $this->message->getMessageId(),
 | 
			
		||||
                    null,
 | 
			
		||||
                    null,
 | 
			
		||||
                    "HTML"
 | 
			
		||||
                );
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										87
									
								
								handlers/Explain.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,87 @@
 | 
			
		||||
<?php
 | 
			
		||||
require_once "common.php";
 | 
			
		||||
 | 
			
		||||
use \TelegramBot\Api\Types\Message;
 | 
			
		||||
use \TelegramBot\Api\Types\User;
 | 
			
		||||
use \TelegramBot\Api\Client;
 | 
			
		||||
use  \TelegramBot\Api\Types\Inline\InlineKeyboardMarkup;
 | 
			
		||||
 | 
			
		||||
class Explain extends Command
 | 
			
		||||
{
 | 
			
		||||
    private Database $database;
 | 
			
		||||
    private ?User $user;
 | 
			
		||||
    public static function exposedCommands(): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
    public function __construct(Message $message, Client $bot, Database $database, ?User $user = null)
 | 
			
		||||
    {
 | 
			
		||||
        parent::__construct($message, $bot);
 | 
			
		||||
        $this->database = $database;
 | 
			
		||||
        $this->user = $user;
 | 
			
		||||
    }
 | 
			
		||||
    public static function toText(DatabaseUser $du): string
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        if ($du->getPrivateChatStatus() != PrivateChat::STATUS_ENDED && $du->getPrivateChatStatus() != PrivateChat::STATUS_VIEWING_CARD) {
 | 
			
		||||
            return  "L'utente non ha ancora impostato i suoi dati o li sta modificando.";
 | 
			
		||||
        }
 | 
			
		||||
        $text = "Provo a spiegare:\n";
 | 
			
		||||
        $name = $du->getUName() ?: $du->getName();
 | 
			
		||||
        $g = strtoupper($du->getUGender());
 | 
			
		||||
        $o = strtoupper($du->getUOrient());
 | 
			
		||||
        if (contains("TRANS", $g) || contains("MTF", $g) || contains("FTM", $g)) $text .= "\n$name è transgender, questo significa che la sua identità di genere (autopercezione del genere) diverge dal suo sesso biologico.";
 | 
			
		||||
        if (contains("FTM", $g)) $text .= "\nNello specifico il genere percepito da $name è Maschile.";
 | 
			
		||||
        if (contains("MTF", $g)) $text .= "\nNello specifico il genere percepito da $name è Femmnile.";
 | 
			
		||||
        if (contains("UOMO", $g)) $text .= "\n$name si percepisce come uomo.";
 | 
			
		||||
        if (contains("DONNA", $g)) $text .= "\n$name si percepisce come donna.";
 | 
			
		||||
        if (contains("NON-BINARY", $g)) $text .= "\n$name si percepisce come non-binary (non-binario).\nLa sua identità di genere (genere autopercepito) è al di fuori del cosiddetto binarismo di genere, ovvero non strettamente e/o completamente maschile o femminile.";
 | 
			
		||||
        if (contains("DEMIBOY", $g)) $text .= "\n$name si percepisce come parzialmente come uomo (demiboy).";
 | 
			
		||||
        if (contains("DEMIGIRL", $g)) $text .= "\n$name si percepisce come parzialmente come donna (demigirl).";
 | 
			
		||||
        if (contains("GENDERQUEER", $g)) $text .= "\n$name si percepisce come genderqueer, ovvero in una relazione non-normata rispetto al proprio genere.";
 | 
			
		||||
 | 
			
		||||
        if (contains("ETERO", $o)) $text .= "\n$name è eterosessuale, ovvero sperimenta attrazione verso persone del genere opposto.";
 | 
			
		||||
        if (contains("GAY", $o)) $text .= "\n$name è gay, ovvero sperimenta attrazione verso persone dello stesso genere.";
 | 
			
		||||
        if (contains("LESBICA", $o)) $text .= "\n$name è lesbica, ovvero sperimenta attrazione verso persone dello stesso genere.";
 | 
			
		||||
        if (contains("ASESSUALE", $o)) $text .= "\n$name è asessuale, ovvero non sperimenta attrazione.";
 | 
			
		||||
        if (contains("PANSESSUALE", $o)) $text .= "\n$name è pansessuale, ovvero sperimenta attrazione verso persone di tutti i generi.";
 | 
			
		||||
        if (contains("BISESSUALE", $o)) $text .= "\n$name è bisessuale, ovvero sperimenta attrazione verso persone di tutti i generi.";
 | 
			
		||||
        if (contains("DEMISESSUALE", $o)) $text .= "\n$name è demisessuale, ovvero sperimenta attrazione solo verso persone con cui ha un forte legame emotivo.";
 | 
			
		||||
        if (contains("QUESTIONING", $o)) $text .= "\n$name è questioning, ovvero sta comprendendo e/o esplorando la propria sessualità.";
 | 
			
		||||
        if ($text == "Provo a spiegare:\n") $text = "Non ho dati sufficienti o conformi al mio database per spiegare";
 | 
			
		||||
        return $text;
 | 
			
		||||
    }
 | 
			
		||||
    public function execute(): void
 | 
			
		||||
    {
 | 
			
		||||
        if (!$this->replyUser) $this->replyUser = $this->message->getFrom();
 | 
			
		||||
        $m = $this->message->getReplyToMessage();
 | 
			
		||||
        if (!$m) {
 | 
			
		||||
            $du = DatabaseUser::getByChat($this->database, $this->message->getFrom());
 | 
			
		||||
            $this->bot->sendMessage($this->message->getChat()->getId(), self::toText($du), "HTML", false, $this->message->getMessageId());
 | 
			
		||||
        } else {
 | 
			
		||||
            $du = DatabaseUser::getByChat($this->database, $m->getFrom());
 | 
			
		||||
            $this->bot->sendMessage($m->getChat()->getId(), self::toText($du), "HTML", false, $m->getMessageId());
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    public function pvtLookup(DatabaseUser $du)
 | 
			
		||||
    {
 | 
			
		||||
        if ($du->getLastPrivateMessage() != 0) {
 | 
			
		||||
            try {
 | 
			
		||||
                $this->bot->deleteMessage(
 | 
			
		||||
                    $this->user->getId(),
 | 
			
		||||
                    $du->getLastPrivateMessage()
 | 
			
		||||
                );
 | 
			
		||||
            } catch (\TelegramBot\Api\Exception $e) {
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        $keyboard = new InlineKeyboardMarkup([
 | 
			
		||||
            [
 | 
			
		||||
                ['text' => "✅ Ok", 'callback_data' => 'endSet#save']
 | 
			
		||||
            ]
 | 
			
		||||
        ]);
 | 
			
		||||
        $message = $this->bot->sendMessage($this->user->getId(), self::toText($du), "HTML", false, null, $keyboard);
 | 
			
		||||
        $du->setLastPrivateMessage($message->getMessageId());
 | 
			
		||||
        $du->setPrivateChatStatus(PrivateChat::STATUS_VIEWING_CARD);
 | 
			
		||||
        $du->save(false);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										65
									
								
								handlers/Flip.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,65 @@
 | 
			
		||||
<?php
 | 
			
		||||
use \TelegramBot\Api\Types\Message;
 | 
			
		||||
use \TelegramBot\Api\Client;
 | 
			
		||||
class Flip extends Command
 | 
			
		||||
{
 | 
			
		||||
    const VERTICAL = 0;
 | 
			
		||||
    const HORIZONTAL = 1;
 | 
			
		||||
    const BOTH = 2;
 | 
			
		||||
 | 
			
		||||
    public static function exposedCommands(): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
    private int $mode;
 | 
			
		||||
    public function __construct(Message $message, Client $bot, int $mode)
 | 
			
		||||
    {
 | 
			
		||||
        parent::__construct($message, $bot);
 | 
			
		||||
        $this->mode = $mode;
 | 
			
		||||
    }
 | 
			
		||||
    public function execute(): void
 | 
			
		||||
    {
 | 
			
		||||
        $m = $this->message->getReplyToMessage();
 | 
			
		||||
        if (!$m) {
 | 
			
		||||
            $this->bot->sendMessage($this->message->getChat()->getId(), "Cita una foto (nessun messaggio citato)", null, false, $this->message->getMessageId());
 | 
			
		||||
        } else {
 | 
			
		||||
            $p = $m->getPhoto();
 | 
			
		||||
            if (!$p) {
 | 
			
		||||
                $this->bot->sendMessage($this->message->getChat()->getId(), "Cita una foto (non hai citato una foto)", null, false, $this->message->getMessageId());
 | 
			
		||||
            } else {
 | 
			
		||||
                $biggest = $p[count($p) - 1];
 | 
			
		||||
                $path = $this->bot->getFile($biggest->getFileId())->getFilePath();
 | 
			
		||||
                $url = "https://api.telegram.org/file/bot" . $GLOBALS["token"] . "/" . $path;
 | 
			
		||||
                if (!file_exists('tempImageProcessing')) {
 | 
			
		||||
                    mkdir('tempImageProcessing');
 | 
			
		||||
                }
 | 
			
		||||
                $io = bin2hex(random_bytes(10));
 | 
			
		||||
                $filename = "tempImageProcessing/" . $io . ".jpg";
 | 
			
		||||
                $ch = curl_init($url);
 | 
			
		||||
                $fp = fopen($filename, 'wb+');
 | 
			
		||||
                curl_setopt($ch, CURLOPT_FILE, $fp);
 | 
			
		||||
                curl_setopt($ch, CURLOPT_HEADER, 0);
 | 
			
		||||
                curl_exec($ch);
 | 
			
		||||
                curl_close($ch);
 | 
			
		||||
                fclose($fp);
 | 
			
		||||
                $im = imagecreatefromjpeg($filename);
 | 
			
		||||
                if ($this->mode == self::VERTICAL || $this->mode == self::BOTH) imageflip($im, IMG_FLIP_VERTICAL);
 | 
			
		||||
                if ($this->mode == self::HORIZONTAL || $this->mode == self::BOTH) imageflip($im, IMG_FLIP_HORIZONTAL);
 | 
			
		||||
                if ($this->mode == self::VERTICAL) $text = "Rovesciato in <b>Verticale</b>";
 | 
			
		||||
                if ($this->mode == self::HORIZONTAL) $text = "Rovesciato in <b>Orizzontale</b>";
 | 
			
		||||
                if ($this->mode == self::BOTH) $text = "Rovesciato in <b>Orizzontale e Verticale</b>";
 | 
			
		||||
                imagejpeg($im, $filename);
 | 
			
		||||
                $this->bot->sendChatAction($this->message->getChat()->getId(), "upload_photo");
 | 
			
		||||
                $this->bot->sendPhoto(
 | 
			
		||||
                    $this->message->getChat()->getId(),
 | 
			
		||||
                    $GLOBALS["baseurl"] . "/tempImageProcessing/getter.php?photo=" . $io,
 | 
			
		||||
                    $text,
 | 
			
		||||
                    $this->message->getMessageId(),
 | 
			
		||||
                    null,
 | 
			
		||||
                    null,
 | 
			
		||||
                    "HTML"
 | 
			
		||||
                );
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										56
									
								
								handlers/GroupWatcher.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,56 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
use TelegramBot\Api\Types\Message;
 | 
			
		||||
use \TelegramBot\Api\Client;
 | 
			
		||||
use \TelegramBot\Api\Types\Inline\InlineKeyboardMarkup;
 | 
			
		||||
 | 
			
		||||
class GroupWatcher
 | 
			
		||||
{
 | 
			
		||||
    public static function watch(Database $database, Message $message, Client $bot): void
 | 
			
		||||
    {
 | 
			
		||||
        $isNew = false;
 | 
			
		||||
        try {
 | 
			
		||||
            $du = DatabaseUser::getByChat($database, $message->getFrom());
 | 
			
		||||
            if ($du->getPrivateChatStatus() == PrivateChat::STATUS_STRAY_USER) {
 | 
			
		||||
                self::createMessageStray($database, $message, $bot);
 | 
			
		||||
                $du->setPrivateChatStatus(PrivateChat::STATUS_ASK_DM);
 | 
			
		||||
            }
 | 
			
		||||
            $du->save(false);
 | 
			
		||||
        } catch (NotFoundException $e) {
 | 
			
		||||
            $isNew = true;
 | 
			
		||||
            self::createMessageNormal($database, $message, $bot);
 | 
			
		||||
            $du = DatabaseUser::create($database, $message->getFrom());
 | 
			
		||||
            $du->setPrivateChatStatus(PrivateChat::STATUS_ASK_DM);
 | 
			
		||||
            $du->poke($message->getFrom());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $r = Group::poke($database, $message, $du);
 | 
			
		||||
        $shouldSendSeen = $r[1];
 | 
			
		||||
        $shouldSendNewGroup = $r[0];
 | 
			
		||||
        if ($shouldSendSeen && !$isNew) $bot->sendMessage($message->getChat()->getId(), "Benvenutə, ti ho già visto in precedenza.\n" . Lookup::toText($du), "HTML", false, $message->getMessageId());
 | 
			
		||||
        if ($shouldSendNewGroup) $bot->sendMessage($message->getChat()->getId(), "Sono in un nuovo gruppo! yay. Ricordatevi di darmi accesso ai messaggi per accogliere i nuovi arrivati.", "HTML", false, $message->getMessageId());
 | 
			
		||||
        if ($shouldSendNewGroup) $bot->sendMessage($GLOBALS["logId"], "Sono in un nuovo gruppo! " . $message->getChat()->getTitle() . "(@" . $message->getChat()->getUsername() . ")", "HTML", false);
 | 
			
		||||
    }
 | 
			
		||||
    public static function getCommonKeyboard(): InlineKeyboardMarkup
 | 
			
		||||
    {
 | 
			
		||||
        return $keyboard = new InlineKeyboardMarkup([
 | 
			
		||||
            [
 | 
			
		||||
                ['text' => "✏️ Compila", 'url' => 'https://t.me/' . $GLOBALS["username"]],
 | 
			
		||||
                ['text' => "❓ Cosa fa questo bot?", 'callback_data' => 'whatIsThis'],
 | 
			
		||||
                ['text' => "🚫 Escludimi dal bot", 'url' => 'https://t.me/' . $GLOBALS["username"]]
 | 
			
		||||
            ]
 | 
			
		||||
        ]);
 | 
			
		||||
    }
 | 
			
		||||
    public static function createMessageNormal(Database $database, Message $message, Client $bot): void
 | 
			
		||||
    {
 | 
			
		||||
        $keyboard = self::getCommonKeyboard();
 | 
			
		||||
 | 
			
		||||
        $bot->sendMessage($message->getChat()->getId(), "Benvenutə, questo bot gestisce un sistema di profili su questo ed altri gruppi!", null, false, $message->getMessageId(), $keyboard);
 | 
			
		||||
    }
 | 
			
		||||
    public static function createMessageStray(Database $database, Message $message, Client $bot): void
 | 
			
		||||
    {
 | 
			
		||||
        $keyboard = self::getCommonKeyboard();
 | 
			
		||||
 | 
			
		||||
        $bot->sendMessage($message->getChat()->getId(), "Benvenutə!\n Mi avevi scritto prima di entrare in un gruppo in cui c'ero e non potevo creare il profilo, ma ora posso.\n Questo bot gestisce un sistema di profili su questo ed altri gruppi!", null, false, $message->getMessageId(), $keyboard);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										31
									
								
								handlers/Inspire.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,31 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
use \TelegramBot\Api\Types\Message;
 | 
			
		||||
use \TelegramBot\Api\Client;
 | 
			
		||||
 | 
			
		||||
class Inspire extends Command
 | 
			
		||||
{
 | 
			
		||||
    public static function exposedCommands(): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
    public function __construct(Message $message, Client $bot)
 | 
			
		||||
    {
 | 
			
		||||
        parent::__construct($message, $bot);
 | 
			
		||||
    }
 | 
			
		||||
    public function execute(): void
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        $url = file_get_contents("https://inspirobot.me/api?generate=true");
 | 
			
		||||
        $this->bot->sendChatAction($this->message->getChat()->getId(), "upload_photo");
 | 
			
		||||
        $this->bot->sendPhoto(
 | 
			
		||||
            $this->message->getChat()->getId(),
 | 
			
		||||
            $url,
 | 
			
		||||
            null,
 | 
			
		||||
            $this->message->getMessageId(),
 | 
			
		||||
            null,
 | 
			
		||||
            null,
 | 
			
		||||
            "HTML"
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										73
									
								
								handlers/Lookup.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,73 @@
 | 
			
		||||
<?php
 | 
			
		||||
require_once "common.php";
 | 
			
		||||
 | 
			
		||||
use \TelegramBot\Api\Types\Message;
 | 
			
		||||
use \TelegramBot\Api\Types\User;
 | 
			
		||||
use \TelegramBot\Api\Client;
 | 
			
		||||
use  \TelegramBot\Api\Types\Inline\InlineKeyboardMarkup;
 | 
			
		||||
 | 
			
		||||
class Lookup extends Command
 | 
			
		||||
{
 | 
			
		||||
    private Database $database;
 | 
			
		||||
    private ?User $user;
 | 
			
		||||
    public static function exposedCommands(): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
    public function __construct(Message $message, Client $bot, Database $database, ?User $user = null)
 | 
			
		||||
    {
 | 
			
		||||
        parent::__construct($message, $bot);
 | 
			
		||||
        $this->database = $database;
 | 
			
		||||
        $this->user = $user;
 | 
			
		||||
    }
 | 
			
		||||
    public static function toText(DatabaseUser $du): string
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        if ($du->getPrivateChatStatus() != PrivateChat::STATUS_ENDED && $du->getPrivateChatStatus() != PrivateChat::STATUS_VIEWING_CARD) {
 | 
			
		||||
            return  "L'utente non ha ancora impostato i suoi dati o li sta modificando.";
 | 
			
		||||
        }
 | 
			
		||||
        $text = "";
 | 
			
		||||
        if ($du->getUName()) $text .= "\n\n<b>Nome</b>: \n" . $du->getUName();
 | 
			
		||||
        if ($du->getUbirthDate()) $text .= "\n\n<b>Data di Nascita</b>: \n" . itdate($du->getUbirthDate()) . " (" . DatabaseUser::calcAge($du->getUbirthDate()) . " anni)";
 | 
			
		||||
        if ($du->getUGender()) $text .= "\n\n<b>Genere</b>: \n" . $du->getUGender();
 | 
			
		||||
        if ($du->getUOrient()) $text .= "\n\n<b>Orientamento</b>: \n" . $du->getUOrient();
 | 
			
		||||
        if ($du->getUPlace()) $text .= "\n\n<b>Provenienza</b>: \n" . $du->getUPlace();
 | 
			
		||||
        if ($du->getURelationships()) $text .= "\n\n<b>Relazioni</b>: \n" . $du->getURelationships();
 | 
			
		||||
        if ($du->getUBio()) $text .= "\n\n<b>Bio</b>: \n" . $du->getUBio();
 | 
			
		||||
        if (strlen($text) == 0) $text = "Non ci sono dati";
 | 
			
		||||
        return $text;
 | 
			
		||||
    }
 | 
			
		||||
    public function execute(): void
 | 
			
		||||
    {
 | 
			
		||||
        if (!$this->replyUser) $this->replyUser = $this->message->getFrom();
 | 
			
		||||
        $m = $this->message->getReplyToMessage();
 | 
			
		||||
        if (!$m) {
 | 
			
		||||
            $du = DatabaseUser::getByChat($this->database, $this->message->getFrom());
 | 
			
		||||
            $this->bot->sendMessage($this->message->getChat()->getId(), self::toText($du), "HTML", false, $this->message->getMessageId());
 | 
			
		||||
        } else {
 | 
			
		||||
            $du = DatabaseUser::getByChat($this->database, $m->getFrom());
 | 
			
		||||
            $this->bot->sendMessage($m->getChat()->getId(), self::toText($du), "HTML", false, $m->getMessageId());
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    public function pvtLookup(DatabaseUser $du)
 | 
			
		||||
    {
 | 
			
		||||
        if ($du->getLastPrivateMessage() != 0) {
 | 
			
		||||
            try {
 | 
			
		||||
                $this->bot->deleteMessage(
 | 
			
		||||
                    $this->user->getId(),
 | 
			
		||||
                    $du->getLastPrivateMessage()
 | 
			
		||||
                );
 | 
			
		||||
            } catch (\TelegramBot\Api\Exception $e) {
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        $keyboard = new InlineKeyboardMarkup([
 | 
			
		||||
            [
 | 
			
		||||
                ['text' => "✅ Ok", 'callback_data' => 'endSet#save']
 | 
			
		||||
            ]
 | 
			
		||||
        ]);
 | 
			
		||||
        $message = $this->bot->sendMessage($this->user->getId(), self::toText($du), "HTML", false, null, $keyboard);
 | 
			
		||||
        $du->setLastPrivateMessage($message->getMessageId());
 | 
			
		||||
        $du->setPrivateChatStatus(PrivateChat::STATUS_VIEWING_CARD);
 | 
			
		||||
        $du->save(false);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										788
									
								
								handlers/PrivateChat.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,788 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
use \TelegramBot\Api\Types\Message;
 | 
			
		||||
use \TelegramBot\Api\Client;
 | 
			
		||||
use  \TelegramBot\Api\Types\Inline\InlineKeyboardMarkup;
 | 
			
		||||
use \TelegramBot\Api\Types\User;
 | 
			
		||||
//Change Users Class and fb to store all user data in one table
 | 
			
		||||
class PrivateChat extends Command
 | 
			
		||||
{
 | 
			
		||||
    const STATUS_ASK_DM = "askDm";
 | 
			
		||||
    const STATUS_CONSENT = "consent";
 | 
			
		||||
    const STATUS_ASK_NAME = "askName";
 | 
			
		||||
    const STATUS_ASK_BIRTH = "askBirth";
 | 
			
		||||
    const STATUS_ASK_GENDER = "askGender";
 | 
			
		||||
    const STATUS_ASK_ORIENT = "askOrient";
 | 
			
		||||
    const STATUS_ASK_WHERE = "askWhere";
 | 
			
		||||
    const STATUS_ASK_PVT = "askPVT";
 | 
			
		||||
    const STATUS_ASK_REL = "askrel";
 | 
			
		||||
    const STATUS_ASK_BIO = "askBio";
 | 
			
		||||
    const STATUS_EDITING = "edit";
 | 
			
		||||
    const STATUS_STRAY_USER = "stray";
 | 
			
		||||
    const STATUS_EXCLUDED = "exclude";
 | 
			
		||||
    const STATUS_NOT_CONSENT = "notConsent";
 | 
			
		||||
    const STATUS_ENDED = "ended";
 | 
			
		||||
    const STATUS_VIEWING_CARD = "card";
 | 
			
		||||
    const STATUS_MESSAGE_SEND = "msgsend";
 | 
			
		||||
    private Database $database;
 | 
			
		||||
 | 
			
		||||
    public static function exposedCommands(): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private ?User $replyUser;
 | 
			
		||||
    public function __construct(Message $message, Client $bot, Database $database, User $replyUser = null)
 | 
			
		||||
    {
 | 
			
		||||
        parent::__construct($message, $bot);
 | 
			
		||||
        $this->database = $database;
 | 
			
		||||
        $this->replyUser = $replyUser;
 | 
			
		||||
    }
 | 
			
		||||
    public function execute(bool $mustSet = true): void
 | 
			
		||||
    {
 | 
			
		||||
        if (!$this->replyUser) $this->replyUser = $this->message->getFrom();
 | 
			
		||||
        try {
 | 
			
		||||
            $du = DatabaseUser::getByChat($this->database, $this->replyUser);
 | 
			
		||||
            switch ($du->getPrivateChatStatus()) {
 | 
			
		||||
                case self::STATUS_ASK_DM:
 | 
			
		||||
                    $keyboard = new InlineKeyboardMarkup([
 | 
			
		||||
                        [
 | 
			
		||||
                            ['text' => "✅ Acconsento", 'callback_data' => 'yesPolicy'],
 | 
			
		||||
                            ['text' => "❌ Non Acconsento", 'callback_data' => 'noPolicy']
 | 
			
		||||
                        ],
 | 
			
		||||
                        [
 | 
			
		||||
                            ['text' => "🚫 Escludimi dal bot", 'callback_data' => "excludeMe"]
 | 
			
		||||
                        ]
 | 
			
		||||
                    ]);
 | 
			
		||||
                    $message = $this->bot->sendMessage($this->replyUser->getId(), "Per procedere, occorre acconsentire alla <a href=\"https://telegra.ph/Rainbow-Bot----Privacy-policy-08-04\">Privacy Policy</a>", "HTML", false, null, $keyboard);
 | 
			
		||||
                    if ($du->getLastPrivateMessage() != 0) $this->bot->deleteMessage(
 | 
			
		||||
                        $this->replyUser->getId(),
 | 
			
		||||
                        $du->getLastPrivateMessage()
 | 
			
		||||
                    );
 | 
			
		||||
                    $du->setOptedOut(false);
 | 
			
		||||
                    $du->setLastPrivateMessage($message->getMessageId());
 | 
			
		||||
                    $du->poke($this->replyUser);
 | 
			
		||||
                    break;
 | 
			
		||||
                case self::STATUS_STRAY_USER:
 | 
			
		||||
                    throw new NotFoundException(); // trigger stray user message
 | 
			
		||||
                    break;
 | 
			
		||||
                case self::STATUS_ASK_NAME:
 | 
			
		||||
                    if ($mustSet) $du->setUName(ellipses($this->message->getText()));
 | 
			
		||||
                    $du->save(false);
 | 
			
		||||
                    $this->askName($du);
 | 
			
		||||
                    try {
 | 
			
		||||
                        if ($mustSet) $this->bot->deleteMessage(
 | 
			
		||||
                            $this->replyUser->getId(),
 | 
			
		||||
                            $this->message->getMessageId()
 | 
			
		||||
                        );
 | 
			
		||||
                    } catch (\TelegramBot\Api\Exception $e) {
 | 
			
		||||
                    }
 | 
			
		||||
                    break;
 | 
			
		||||
                case self::STATUS_ASK_BIRTH:
 | 
			
		||||
                    $text = $this->message->getText();
 | 
			
		||||
                    $text = str_replace("-", "/", $text);
 | 
			
		||||
                    $text = str_replace(".", "/", $text);
 | 
			
		||||
                    $e = explode("/", $text);
 | 
			
		||||
                    $builtDate = strtotime($e[2] . "-" . $e[1] . "-" . $e[0]);
 | 
			
		||||
                    if ($mustSet) {
 | 
			
		||||
                        if (!ctype_digit($e[0])) $invalid = true;
 | 
			
		||||
                        elseif (!ctype_digit($e[1])) $invalid = true;
 | 
			
		||||
                        elseif (!ctype_digit($e[2])) $invalid = true;
 | 
			
		||||
                        else $invalid = !checkdate((int) $e[1], (int) $e[0], (int) $e[2]);
 | 
			
		||||
                        if (!$invalid) $du->setUbirthDate($builtDate);
 | 
			
		||||
                    } else {
 | 
			
		||||
                        $invalid = false;
 | 
			
		||||
                    }
 | 
			
		||||
                    $du->save(false);
 | 
			
		||||
                    $this->askBirthDate($du, $invalid);
 | 
			
		||||
                    try {
 | 
			
		||||
                        if ($mustSet) $this->bot->deleteMessage(
 | 
			
		||||
                            $this->replyUser->getId(),
 | 
			
		||||
                            $this->message->getMessageId()
 | 
			
		||||
                        );
 | 
			
		||||
                    } catch (\TelegramBot\Api\Exception $e) {
 | 
			
		||||
                    }
 | 
			
		||||
                    break;
 | 
			
		||||
                case self::STATUS_ASK_GENDER:
 | 
			
		||||
                    if ($mustSet) $du->setUGender(ellipses($this->message->getText()));
 | 
			
		||||
                    $du->save(false);
 | 
			
		||||
                    $this->askGender($du);
 | 
			
		||||
                    try {
 | 
			
		||||
                        if ($mustSet) $this->bot->deleteMessage(
 | 
			
		||||
                            $this->replyUser->getId(),
 | 
			
		||||
                            $this->message->getMessageId()
 | 
			
		||||
                        );
 | 
			
		||||
                    } catch (\TelegramBot\Api\Exception $e) {
 | 
			
		||||
                    }
 | 
			
		||||
                    break;
 | 
			
		||||
                case self::STATUS_ASK_ORIENT:
 | 
			
		||||
                    if ($mustSet) $du->setUOrient(ellipses($this->message->getText()));
 | 
			
		||||
                    $du->save(false);
 | 
			
		||||
                    $this->askOrient($du);
 | 
			
		||||
                    try {
 | 
			
		||||
                        if ($mustSet) $this->bot->deleteMessage(
 | 
			
		||||
                            $this->replyUser->getId(),
 | 
			
		||||
                            $this->message->getMessageId()
 | 
			
		||||
                        );
 | 
			
		||||
                    } catch (\TelegramBot\Api\Exception $e) {
 | 
			
		||||
                    }
 | 
			
		||||
                    break;
 | 
			
		||||
                case self::STATUS_ASK_WHERE:
 | 
			
		||||
                    if ($mustSet) $du->setUPlace(ellipses($this->message->getText()));
 | 
			
		||||
                    $du->save(false);
 | 
			
		||||
                    $this->askWhere($du);
 | 
			
		||||
                    try {
 | 
			
		||||
                        if ($mustSet) $this->bot->deleteMessage(
 | 
			
		||||
                            $this->replyUser->getId(),
 | 
			
		||||
                            $this->message->getMessageId()
 | 
			
		||||
                        );
 | 
			
		||||
                    } catch (\TelegramBot\Api\Exception $e) {
 | 
			
		||||
                    }
 | 
			
		||||
                    break;
 | 
			
		||||
                case self::STATUS_ASK_PVT:
 | 
			
		||||
                    if ($mustSet) $du->setUpvtChoice(ellipses($this->message->getText()));
 | 
			
		||||
                    $du->save(false);
 | 
			
		||||
                    $this->askPVT($du);
 | 
			
		||||
 | 
			
		||||
                    try {
 | 
			
		||||
                        if ($mustSet) $this->bot->deleteMessage(
 | 
			
		||||
                            $this->replyUser->getId(),
 | 
			
		||||
                            $this->message->getMessageId()
 | 
			
		||||
                        );
 | 
			
		||||
                    } catch (\TelegramBot\Api\Exception $e) {
 | 
			
		||||
                    }
 | 
			
		||||
                    break;
 | 
			
		||||
 | 
			
		||||
                case self::STATUS_ASK_REL:
 | 
			
		||||
                    if ($mustSet) $du->setURelationships(ellipses($this->message->getText()));
 | 
			
		||||
                    $du->save(false);
 | 
			
		||||
                    $this->askRel($du);
 | 
			
		||||
                    try {
 | 
			
		||||
                        if ($mustSet) $this->bot->deleteMessage(
 | 
			
		||||
                            $this->replyUser->getId(),
 | 
			
		||||
                            $this->message->getMessageId()
 | 
			
		||||
                        );
 | 
			
		||||
                    } catch (\TelegramBot\Api\Exception $e) {
 | 
			
		||||
                    }
 | 
			
		||||
                    break;
 | 
			
		||||
                case self::STATUS_ASK_BIO:
 | 
			
		||||
                    if ($mustSet) $du->setUBio(ellipses($this->message->getText(), 500));
 | 
			
		||||
                    $du->save(false);
 | 
			
		||||
                    $this->askBio($du);
 | 
			
		||||
                    try {
 | 
			
		||||
                        if ($mustSet) $this->bot->deleteMessage(
 | 
			
		||||
                            $this->replyUser->getId(),
 | 
			
		||||
                            $this->message->getMessageId()
 | 
			
		||||
                        );
 | 
			
		||||
                    } catch (\TelegramBot\Api\Exception $e) {
 | 
			
		||||
                    }
 | 
			
		||||
                    break;
 | 
			
		||||
                case self::STATUS_ENDED:
 | 
			
		||||
                    $this->completedMenu();
 | 
			
		||||
                    /*$this->bot->deleteMessage(
 | 
			
		||||
                        $this->replyUser->getId(),
 | 
			
		||||
                        $this->message->getMessageId()
 | 
			
		||||
                    );*/
 | 
			
		||||
                    break;
 | 
			
		||||
                case self::STATUS_EXCLUDED:
 | 
			
		||||
                    $this->excludeYes();
 | 
			
		||||
                    break;
 | 
			
		||||
                case self::STATUS_NOT_CONSENT:
 | 
			
		||||
                    $this->noPolicy();
 | 
			
		||||
                case self::STATUS_MESSAGE_SEND:
 | 
			
		||||
                    $this->sendMessageToGroups($this->message->getText());
 | 
			
		||||
                    break;
 | 
			
		||||
            }
 | 
			
		||||
        } catch (NotFoundException $e) {
 | 
			
		||||
            $message = $this->bot->sendMessage($this->replyUser->getId(), "Per usare questo bot devi avere prima partecipato ad un gruppo a cui appartiene.",  "HTML", false);
 | 
			
		||||
            $du = DatabaseUser::create($this->database, $this->replyUser);
 | 
			
		||||
            $du->setPrivateChatStatus(self::STATUS_STRAY_USER);
 | 
			
		||||
            $du->setLastPrivateMessage($message->getMessageId());
 | 
			
		||||
            $du->poke($this->replyUser);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    public static function isPrivateChatContextChecker($update): bool
 | 
			
		||||
    {
 | 
			
		||||
        if ($update instanceof Message) return $update->getChat()->getType() == "private";
 | 
			
		||||
        else return $update->getMessage()->getChat()->getType() == "private";
 | 
			
		||||
    }
 | 
			
		||||
    public static function isPublicChatContextChecker($update): bool
 | 
			
		||||
    {
 | 
			
		||||
        return !PrivateChat::isPrivateChatContextChecker($update);
 | 
			
		||||
    }
 | 
			
		||||
    public function sendMessageToGroups(string $data): void
 | 
			
		||||
    {
 | 
			
		||||
        $du = DatabaseUser::getByChat($this->database, $this->replyUser);
 | 
			
		||||
        $list = Group::listAll($this->database);
 | 
			
		||||
        $text = "Inviando a...\n\n";
 | 
			
		||||
        foreach ($list as $group) {
 | 
			
		||||
            $text .= "➡️ " . $group->getName();
 | 
			
		||||
            if ($group->getUsername()) $text .= " (" . $group->getUsername() . ")";
 | 
			
		||||
            $text .= "\n";
 | 
			
		||||
            try {
 | 
			
		||||
                $this->bot->sendMessage($group->getTelegramId(), $data, "HTML", false, null);
 | 
			
		||||
                $text .= ": ✅ OK\n";
 | 
			
		||||
            } catch (Exception $e) {
 | 
			
		||||
                $text .= ": ❌ Errore\n";
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        $text .= "\n\n ... fatto";
 | 
			
		||||
        $keyboard = new InlineKeyboardMarkup([
 | 
			
		||||
            [
 | 
			
		||||
                ['text' => "✅Ok", 'callback_data' => 'endSet#save']
 | 
			
		||||
            ]
 | 
			
		||||
        ]);
 | 
			
		||||
        $message = $this->bot->sendMessage($this->replyUser->getId(), $text, "HTML", false, null, $keyboard);
 | 
			
		||||
        $du->setPrivateChatStatus(self::STATUS_ENDED);
 | 
			
		||||
        $du->setLastPrivateMessage($message->getMessageId());
 | 
			
		||||
        $du->save(false);
 | 
			
		||||
    }
 | 
			
		||||
    public function writeMessage(): void
 | 
			
		||||
    {
 | 
			
		||||
        $du = DatabaseUser::getByChat($this->database, $this->replyUser);
 | 
			
		||||
        $keyboard = new InlineKeyboardMarkup([
 | 
			
		||||
            [
 | 
			
		||||
                ['text' => "❌ Annulla", 'callback_data' => 'endSet#save']
 | 
			
		||||
            ]
 | 
			
		||||
        ]);
 | 
			
		||||
        $message = $this->bot->sendMessage($this->replyUser->getId(), "Scrivi un messaggio in formato HTML da inviare a <b>tutti i gruppi</b>", "HTML", false, null, $keyboard);
 | 
			
		||||
        if ($du->getLastPrivateMessage() != 0) $this->bot->deleteMessage(
 | 
			
		||||
            $this->replyUser->getId(),
 | 
			
		||||
            $du->getLastPrivateMessage()
 | 
			
		||||
        );
 | 
			
		||||
        $du->setPrivateChatStatus(self::STATUS_MESSAGE_SEND);
 | 
			
		||||
        $du->setLastPrivateMessage($message->getMessageId());
 | 
			
		||||
        $du->save(false);
 | 
			
		||||
    }
 | 
			
		||||
    public function exclude(): void
 | 
			
		||||
    {
 | 
			
		||||
        $du = DatabaseUser::getByChat($this->database, $this->replyUser);
 | 
			
		||||
        $keyboard = new InlineKeyboardMarkup([
 | 
			
		||||
            [
 | 
			
		||||
                ['text' => "✅ Escludimi", 'callback_data' => 'yesExclude'],
 | 
			
		||||
                ['text' => "❌ Annulla", 'callback_data' => 'noExclude']
 | 
			
		||||
            ]
 | 
			
		||||
        ]);
 | 
			
		||||
        $message = $this->bot->sendMessage($this->replyUser->getId(), "Con questa scelta il bot eliminetà i tuoi dati, non ti disturberà più e non salverà tuoi dati finchè tu non lo richiederai\n<b>Non sei sicurə?</b> Puoi sempre cambiare idea più tardi!", "HTML", false, null, $keyboard);
 | 
			
		||||
        if ($du->getLastPrivateMessage() != 0) $this->bot->deleteMessage(
 | 
			
		||||
            $this->replyUser->getId(),
 | 
			
		||||
            $du->getLastPrivateMessage()
 | 
			
		||||
        );
 | 
			
		||||
        $du->setLastPrivateMessage($message->getMessageId());
 | 
			
		||||
        $du->save(false);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    private function getStateVal(DatabaseUser $u, string $c): ?string
 | 
			
		||||
    {
 | 
			
		||||
        if ($c == PrivateChat::STATUS_ASK_NAME) return $u->getUName();
 | 
			
		||||
        if ($c == PrivateChat::STATUS_ASK_BIRTH) return $u->getUbirthDate();
 | 
			
		||||
        if ($c == PrivateChat::STATUS_ASK_GENDER) return $u->getUGender();
 | 
			
		||||
        if ($c == PrivateChat::STATUS_ASK_ORIENT) return $u->getUOrient();
 | 
			
		||||
        if ($c == PrivateChat::STATUS_ASK_WHERE) return $u->getUPlace();
 | 
			
		||||
        if ($c == PrivateChat::STATUS_ASK_PVT) return $u->getUpvtChoice();
 | 
			
		||||
        if ($c == PrivateChat::STATUS_ASK_REL) return $u->getURelationships();
 | 
			
		||||
        if ($c == PrivateChat::STATUS_ASK_BIO) return $u->getUBio();
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static array $order = [
 | 
			
		||||
        self::STATUS_ASK_NAME,
 | 
			
		||||
        self::STATUS_ASK_BIRTH,
 | 
			
		||||
        self::STATUS_ASK_GENDER,
 | 
			
		||||
        self::STATUS_ASK_ORIENT,
 | 
			
		||||
        self::STATUS_ASK_WHERE,
 | 
			
		||||
        self::STATUS_ASK_PVT,
 | 
			
		||||
        self::STATUS_ASK_REL,
 | 
			
		||||
        self::STATUS_ASK_BIO
 | 
			
		||||
    ];
 | 
			
		||||
 | 
			
		||||
    private function getPrevState(string $state): ?string
 | 
			
		||||
    {
 | 
			
		||||
        $index = array_search($state, self::$order);
 | 
			
		||||
        if ($index === false) throw new NotFoundException();
 | 
			
		||||
        if ($index === 0) return null;
 | 
			
		||||
        return self::$order[$index - 1];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static function getNextState(string $state): ?string
 | 
			
		||||
    {
 | 
			
		||||
        $index = array_search($state, self::$order);
 | 
			
		||||
        if ($index === false) throw new NotFoundException();
 | 
			
		||||
        if ($index === count(self::$order) - 1) return null;
 | 
			
		||||
        return self::$order[$index + 1];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static function getRemaining(string $state): int
 | 
			
		||||
    {
 | 
			
		||||
        $index = array_search($state, self::$order);
 | 
			
		||||
        return count(self::$order) - $index - 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private function getKeyboard(DatabaseUser $du, string $state, array $nextRows)
 | 
			
		||||
    {
 | 
			
		||||
        $list = [];
 | 
			
		||||
        $prev = $this->getPrevState($state);
 | 
			
		||||
        $next = $this->getNextState($state);
 | 
			
		||||
        if ($prev) {
 | 
			
		||||
            if ($this->getStateVal($du, $prev)) {
 | 
			
		||||
                $list[] = [['text' => "⏮️✏️ Indietro", 'callback_data' => 'go#' . $prev]];
 | 
			
		||||
            } else {
 | 
			
		||||
                $list[] = [['text' => "⏮️🆕 Indietro", 'callback_data' => 'go#' . $prev]];
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        if ($this->getStateVal($du, $state))  $list[] = [['text' => "🔄 Reimposta", 'callback_data' => 'go#' . $state . "#reset"]];
 | 
			
		||||
        if ($next) {
 | 
			
		||||
            if ($this->getStateVal($du, $next)) {
 | 
			
		||||
                if (!$this->getStateVal($du, $state)) $list[] = [['text' => "⏭✏️ Avanti (salta questa)", 'callback_data' => 'go#' . $next]];
 | 
			
		||||
                else $list[] = [['text' => "⏭✏️ Avanti", 'callback_data' => 'go#' . $next]];
 | 
			
		||||
            } else {
 | 
			
		||||
                if (!$this->getStateVal($du, $state)) $list[] = [['text' => "⏭🆕 Avanti (salta questa)", 'callback_data' => 'go#' . $next]];
 | 
			
		||||
                else $list[] = [['text' => "⏭🆕 Avanti", 'callback_data' => 'go#' . $next]];
 | 
			
		||||
            }
 | 
			
		||||
            if ($du->countCompleted() == count(self::$order)) $list[] = [['text' => "✅ Fine", 'callback_data' => 'endSet']];
 | 
			
		||||
            else $list[] = [['text' => "✅ Fine (" . $du->countCompleted() . "/" . count(self::$order) . " domande completate)", 'callback_data' => 'endSet']];
 | 
			
		||||
        } else {
 | 
			
		||||
            $list[] = [['text' => "✅ Fine", 'callback_data' => 'endSet']];
 | 
			
		||||
        }
 | 
			
		||||
        $list = array_merge($list, $nextRows); // concat arrays
 | 
			
		||||
        return $list;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function excludeYes()
 | 
			
		||||
    {
 | 
			
		||||
        $du = DatabaseUser::getByChat($this->database, $this->replyUser);
 | 
			
		||||
        if ($du->getLastPrivateMessage() != 0) $this->bot->deleteMessage(
 | 
			
		||||
            $this->replyUser->getId(),
 | 
			
		||||
            $du->getLastPrivateMessage()
 | 
			
		||||
        );
 | 
			
		||||
        $du = DatabaseUser::getByChat($this->database, $this->replyUser);
 | 
			
		||||
        $du->setPrivateChatStatus(self::STATUS_EXCLUDED);
 | 
			
		||||
        $du->setUName(null);
 | 
			
		||||
        $du->setUbirthDate(null);
 | 
			
		||||
        $du->setUGender(null);
 | 
			
		||||
        $du->setUOrient(null);
 | 
			
		||||
        $du->setUPlace(null);
 | 
			
		||||
        $du->setUpvtChoice(null);
 | 
			
		||||
        $du->setURelationships(null);
 | 
			
		||||
        $du->setUBio(null);
 | 
			
		||||
        $keyboard = new InlineKeyboardMarkup([
 | 
			
		||||
            [
 | 
			
		||||
                ['text' => "✅ Riabilitami", 'callback_data' => 'noExclude']
 | 
			
		||||
            ]
 | 
			
		||||
        ]);
 | 
			
		||||
        $message = $this->bot->sendMessage($this->replyUser->getId(), "La tua scelta è stata confermata. Io rimango qui se cambi idea.",  "HTML", false, null, $keyboard);
 | 
			
		||||
        $du->setLastPrivateMessage($message->getMessageId());
 | 
			
		||||
        $du->setOptedOut(true);
 | 
			
		||||
        $du->save(false);
 | 
			
		||||
    }
 | 
			
		||||
    public function completedMenu(): void
 | 
			
		||||
    {
 | 
			
		||||
        $du = DatabaseUser::getByChat($this->database, $this->replyUser);
 | 
			
		||||
        $keys = [
 | 
			
		||||
            [
 | 
			
		||||
                ['text' => "✏️" . ($du->getUName() ? "" : "🆕") . "Modifica Nome", 'callback_data' => 'go#' . self::STATUS_ASK_NAME],
 | 
			
		||||
                ['text' => "✏️" . ($du->getUbirthDate() ? "" : "🆕") . "Modifica Data di Nascita", 'callback_data' => 'go#' . self::STATUS_ASK_BIRTH]
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                ['text' => "✏️" . ($du->getUGender() ? "" : "🆕") . "Modifica Genere", 'callback_data' => 'go#' . self::STATUS_ASK_GENDER],
 | 
			
		||||
                ['text' => "✏️" . ($du->getUOrient() ? "" : "🆕") . "Modifica Orientamento", 'callback_data' => 'go#' . self::STATUS_ASK_ORIENT]
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                ['text' => "✏️" . ($du->getUPlace() ? "" : "🆕") . "Modifica Provenienza", 'callback_data' => 'go#' . self::STATUS_ASK_WHERE],
 | 
			
		||||
                ['text' => "✏️" . ($du->getUpvtChoice() ? "" : "🆕") . "Modifica Messaggi privati", 'callback_data' => 'go#' . self::STATUS_ASK_PVT]
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                ['text' => "✏️" . ($du->getURelationships() ? "" : "🆕") . "Modifica Relazioni", 'callback_data' => 'go#' . self::STATUS_ASK_REL],
 | 
			
		||||
                ['text' => "✏️" . ($du->getUBio() ? "" : "🆕") . "Modifica Bio", 'callback_data' => 'go#' . self::STATUS_ASK_BIO]
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                ['text' => "💳Visualizza Card", 'callback_data' => 'viewCard']
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                ['text' => "📄Visualizza Info", 'callback_data' => 'viewInfo']
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                ['text' => "🔍Visualizza Spiegazione", 'callback_data' => 'viewExp']
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                ['text' => "🚫 Rimuovi consenso", 'callback_data' => "excludeMe"]
 | 
			
		||||
            ]
 | 
			
		||||
        ];
 | 
			
		||||
        if ($this->replyUser->getId() == $GLOBALS["masterId"]) {
 | 
			
		||||
            $keys[] = [
 | 
			
		||||
                ['text' => "✏️ Scrivi messaggio", 'callback_data' => "writeMessage"]
 | 
			
		||||
            ];
 | 
			
		||||
        }
 | 
			
		||||
        $keyboard = new InlineKeyboardMarkup($keys);
 | 
			
		||||
        $message =  $this->bot->sendMessage(
 | 
			
		||||
            $this->replyUser->getId(),
 | 
			
		||||
            "<b>Menu</b>",
 | 
			
		||||
            "HTML",
 | 
			
		||||
            false,
 | 
			
		||||
            null,
 | 
			
		||||
            $keyboard
 | 
			
		||||
        );
 | 
			
		||||
        if ($du->getLastPrivateMessage() != 0) $this->bot->deleteMessage(
 | 
			
		||||
            $this->replyUser->getId(),
 | 
			
		||||
            $du->getLastPrivateMessage()
 | 
			
		||||
        );
 | 
			
		||||
        $du->setLastPrivateMessage($message->getMessageId());
 | 
			
		||||
        $du->save(false);
 | 
			
		||||
    }
 | 
			
		||||
    public function end($ask = false)
 | 
			
		||||
    {
 | 
			
		||||
        $du = DatabaseUser::getByChat($this->database, $this->replyUser);
 | 
			
		||||
        if (!$ask) {
 | 
			
		||||
            $du->setPrivateChatStatus(self::STATUS_ENDED);
 | 
			
		||||
            $add = "";
 | 
			
		||||
            /*$message =  $this->bot->sendMessage(
 | 
			
		||||
                $this->replyUser->getId(),
 | 
			
		||||
                "Abbiamo Finito!" . $add,
 | 
			
		||||
                "HTML",
 | 
			
		||||
                false,
 | 
			
		||||
                null
 | 
			
		||||
            );*/
 | 
			
		||||
            $du->save(false);
 | 
			
		||||
            $this->completedMenu();
 | 
			
		||||
        } else {
 | 
			
		||||
            $keyboard = new InlineKeyboardMarkup([
 | 
			
		||||
                [
 | 
			
		||||
                    ['text' => "✅Salva comunque", 'callback_data' => 'endSet#save']
 | 
			
		||||
                ],
 | 
			
		||||
                [
 | 
			
		||||
                    ['text' => "⏭✏️Torna alla modifica", 'callback_data' => 'go#' . $du->getPrivateChatStatus()]
 | 
			
		||||
                ],
 | 
			
		||||
                [
 | 
			
		||||
                    ['text' => "✏️Rivedi le domande", 'callback_data' => 'go#' . self::STATUS_ASK_NAME],
 | 
			
		||||
                ]
 | 
			
		||||
            ]);
 | 
			
		||||
            if ($du->getLastPrivateMessage() != 0) $this->bot->deleteMessage(
 | 
			
		||||
                $this->replyUser->getId(),
 | 
			
		||||
                $du->getLastPrivateMessage()
 | 
			
		||||
            );
 | 
			
		||||
            $add = $du->listUncompleted();
 | 
			
		||||
            $message =  $this->bot->sendMessage(
 | 
			
		||||
                $this->replyUser->getId(),
 | 
			
		||||
                "<b>Alcune domande non hanno risposta</b>:" . $add,
 | 
			
		||||
                "HTML",
 | 
			
		||||
                false,
 | 
			
		||||
                null,
 | 
			
		||||
                $keyboard
 | 
			
		||||
            );
 | 
			
		||||
            $du->setLastPrivateMessage($message->getMessageId());
 | 
			
		||||
            $du->save(false);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    public function yesPolicy()
 | 
			
		||||
    {
 | 
			
		||||
        $du = DatabaseUser::getByChat($this->database, $this->replyUser);
 | 
			
		||||
        if ($du->getLastPrivateMessage() != 0) $this->bot->deleteMessage(
 | 
			
		||||
            $this->replyUser->getId(),
 | 
			
		||||
            $du->getLastPrivateMessage()
 | 
			
		||||
        );
 | 
			
		||||
        $message =  $this->bot->sendMessage(
 | 
			
		||||
            $this->replyUser->getId(),
 | 
			
		||||
            "Grazie! Ora possiamo procedere a costruire il tuo profilo\nTi farò una serie di domande.\nRicordati che <b>puoi sempre saltare domande specifiche</b>\n Le risposte saranno visibili in tutti i gruppi che adottano questo bot.",
 | 
			
		||||
            "HTML"
 | 
			
		||||
        );
 | 
			
		||||
        $du->setLastPrivateMessage($message->getMessageId());
 | 
			
		||||
        $du->setPolicyAccepted(true);
 | 
			
		||||
        $du->save(false);
 | 
			
		||||
        $this->askName($du);
 | 
			
		||||
    }
 | 
			
		||||
    public function askName(DatabaseUser $du)
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        $du->setPrivateChatStatus(self::STATUS_ASK_NAME);
 | 
			
		||||
        $keyboard = new InlineKeyboardMarkup($this->getKeyboard($du, self::STATUS_ASK_NAME, []));
 | 
			
		||||
        if ($du->getLastPrivateMessage() != 0) $this->bot->deleteMessage(
 | 
			
		||||
            $this->replyUser->getId(),
 | 
			
		||||
            $du->getLastPrivateMessage()
 | 
			
		||||
        );
 | 
			
		||||
        $add = "";
 | 
			
		||||
        if ($du->getUName()) $add = "\nRisposta corrente: <i>" . $du->getUName() . "</i>";
 | 
			
		||||
        $message =  $this->bot->sendMessage(
 | 
			
		||||
            $this->replyUser->getId(),
 | 
			
		||||
            "<b>Come ti Chiami?</b> (massimo <b>40</b> caratteri) " . $add,
 | 
			
		||||
            "HTML",
 | 
			
		||||
            false,
 | 
			
		||||
            null,
 | 
			
		||||
            $keyboard
 | 
			
		||||
        );
 | 
			
		||||
        $du->setLastPrivateMessage($message->getMessageId());
 | 
			
		||||
        $du->save(false);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function askBio(DatabaseUser $du)
 | 
			
		||||
    {
 | 
			
		||||
        $du->setPrivateChatStatus(self::STATUS_ASK_BIO);
 | 
			
		||||
        $keyboard = new InlineKeyboardMarkup($this->getKeyboard($du, self::STATUS_ASK_BIO, []));
 | 
			
		||||
        if ($du->getLastPrivateMessage() != 0) $this->bot->deleteMessage(
 | 
			
		||||
            $this->replyUser->getId(),
 | 
			
		||||
            $du->getLastPrivateMessage()
 | 
			
		||||
        );
 | 
			
		||||
        $add = "";
 | 
			
		||||
        if ($du->getUBio()) $add = "\nRisposta corrente: <i>" . $du->getUBio() . "</i>";
 | 
			
		||||
        $message =  $this->bot->sendMessage(
 | 
			
		||||
            $this->replyUser->getId(),
 | 
			
		||||
            "<b>Scrivi una breve descrizione di te stessə (bio)</b> (massimo <b>500</b> caratteri) " . $add,
 | 
			
		||||
            "HTML",
 | 
			
		||||
            false,
 | 
			
		||||
            null,
 | 
			
		||||
            $keyboard
 | 
			
		||||
        );
 | 
			
		||||
        $du->setLastPrivateMessage($message->getMessageId());
 | 
			
		||||
        $du->save(false);
 | 
			
		||||
    }
 | 
			
		||||
    public function askGender(DatabaseUser $du)
 | 
			
		||||
    {
 | 
			
		||||
        $du->setPrivateChatStatus(self::STATUS_ASK_GENDER);
 | 
			
		||||
        $keyboard = new InlineKeyboardMarkup($this->getKeyboard($du, self::STATUS_ASK_GENDER, [
 | 
			
		||||
            [
 | 
			
		||||
                ['text' => "Uomo", 'callback_data' => 'setGender#Uomo'],
 | 
			
		||||
                ['text' => "Donna", 'callback_data' => 'setGender#Donna'],
 | 
			
		||||
                ['text' => "Non-Binary", 'callback_data' => 'setGender#Non-Binary']
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                ['text' => "Donna Transgender (MtF)", 'callback_data' => 'setGender#Donna Transgender (MtF)'],
 | 
			
		||||
                ['text' => "Uomo Transgender (FtM)", 'callback_data' => 'setGender#Uomo Transgender (FtM)']
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                ['text' => "Non-Binary Transgender", 'callback_data' => 'setGender#Non-Binary Transgender'],
 | 
			
		||||
                ['text' => "Genderqueer", 'callback_data' => 'setGender#Genderqueer']
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                ['text' => "Demiboy", 'callback_data' => 'setGender#Demiboy'],
 | 
			
		||||
                ['text' => "Demigirl", 'callback_data' => 'setGender#Demigirl']
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                ['text' => "👉Imposta Personalizzato", 'callback_data' => 'setGender#custom']
 | 
			
		||||
            ]
 | 
			
		||||
        ]));
 | 
			
		||||
        if ($du->getLastPrivateMessage() != 0) $this->bot->deleteMessage(
 | 
			
		||||
            $this->replyUser->getId(),
 | 
			
		||||
            $du->getLastPrivateMessage()
 | 
			
		||||
        );
 | 
			
		||||
        $add = "";
 | 
			
		||||
        if ($du->getUGender()) $add = "\nRisposta corrente: <i>" . $du->getUGender() . "</i>";
 | 
			
		||||
        $message =  $this->bot->sendMessage(
 | 
			
		||||
            $this->replyUser->getId(),
 | 
			
		||||
            "<b>Quel'è il tuo genere?</b> (massimo <b>40</b> caratteri) " . $add,
 | 
			
		||||
            "HTML",
 | 
			
		||||
            false,
 | 
			
		||||
            null,
 | 
			
		||||
            $keyboard
 | 
			
		||||
        );
 | 
			
		||||
        $du->setLastPrivateMessage($message->getMessageId());
 | 
			
		||||
        $du->save(false);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function askRel(DatabaseUser $du)
 | 
			
		||||
    {
 | 
			
		||||
        $du->setPrivateChatStatus(self::STATUS_ASK_REL);
 | 
			
		||||
        $keyboard = new InlineKeyboardMarkup($this->getKeyboard($du, self::STATUS_ASK_REL, [
 | 
			
		||||
            [
 | 
			
		||||
                ['text' => "Fidanzatə", 'callback_data' => 'setRel#Fidanzatə'],
 | 
			
		||||
                ['text' => "Single", 'callback_data' => 'setRel#Single'],
 | 
			
		||||
                ['text' => "Aiutatemi vi prego", 'callback_data' => 'setRel#Aiutatemi vi prego']
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                ['text' => "👉Imposta Personalizzato", 'callback_data' => 'setRel#custom']
 | 
			
		||||
            ]
 | 
			
		||||
        ]));
 | 
			
		||||
        if ($du->getLastPrivateMessage() != 0) $this->bot->deleteMessage(
 | 
			
		||||
            $this->replyUser->getId(),
 | 
			
		||||
            $du->getLastPrivateMessage()
 | 
			
		||||
        );
 | 
			
		||||
        $add = "";
 | 
			
		||||
        if ($du->getURelationships()) $add = "\nRisposta corrente: <i>" . $du->getURelationships() . "</i>";
 | 
			
		||||
        $message =  $this->bot->sendMessage(
 | 
			
		||||
            $this->replyUser->getId(),
 | 
			
		||||
            "<b>Relazioni?</b> (massimo <b>40</b> caratteri) " . $add,
 | 
			
		||||
            "HTML",
 | 
			
		||||
            false,
 | 
			
		||||
            null,
 | 
			
		||||
            $keyboard
 | 
			
		||||
        );
 | 
			
		||||
        $du->setLastPrivateMessage($message->getMessageId());
 | 
			
		||||
        $du->save(false);
 | 
			
		||||
    }
 | 
			
		||||
    public function askPVT(DatabaseUser $du)
 | 
			
		||||
    {
 | 
			
		||||
        $du->setPrivateChatStatus(self::STATUS_ASK_PVT);
 | 
			
		||||
        $keyboard = new InlineKeyboardMarkup($this->getKeyboard($du, self::STATUS_ASK_PVT, [
 | 
			
		||||
            [
 | 
			
		||||
                ['text' => "Sì", 'callback_data' => 'setPVT#Sì'],
 | 
			
		||||
                ['text' => "No", 'callback_data' => 'setPVT#No'],
 | 
			
		||||
                ['text' => "Solo se mi chiedono prima", 'callback_data' => 'setPVT#Solo se mi chiedono prima']
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                ['text' => "👉Imposta Personalizzato", 'callback_data' => 'setPVT#custom']
 | 
			
		||||
            ]
 | 
			
		||||
        ]));
 | 
			
		||||
        if ($du->getLastPrivateMessage() != 0) $this->bot->deleteMessage(
 | 
			
		||||
            $this->replyUser->getId(),
 | 
			
		||||
            $du->getLastPrivateMessage()
 | 
			
		||||
        );
 | 
			
		||||
        $add = "";
 | 
			
		||||
        if ($du->getUpvtChoice()) $add = "\nRisposta corrente: <i>" . $du->getUpvtChoice() . "</i>";
 | 
			
		||||
        $message =  $this->bot->sendMessage(
 | 
			
		||||
            $this->replyUser->getId(),
 | 
			
		||||
            "<b>Vuoi poter essere contattatə dagli altri utenti?</b> (massimo <b>40</b> caratteri) " . $add,
 | 
			
		||||
            "HTML",
 | 
			
		||||
            false,
 | 
			
		||||
            null,
 | 
			
		||||
            $keyboard
 | 
			
		||||
        );
 | 
			
		||||
        $du->setLastPrivateMessage($message->getMessageId());
 | 
			
		||||
        $du->save(false);
 | 
			
		||||
    }
 | 
			
		||||
    public function askWhere(DatabaseUser $du)
 | 
			
		||||
    {
 | 
			
		||||
        $du->setPrivateChatStatus(self::STATUS_ASK_WHERE);
 | 
			
		||||
        $keyboard = new InlineKeyboardMarkup($this->getKeyboard($du, self::STATUS_ASK_WHERE, [
 | 
			
		||||
            [
 | 
			
		||||
                ['text' => "Abruzzo", 'callback_data' => 'setWhere#Abruzzo'],
 | 
			
		||||
                ['text' => "Basilicata", 'callback_data' => 'setWhere#Basilicata'],
 | 
			
		||||
                ['text' => "Calabria", 'callback_data' => 'setWhere#Calabria']
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                ['text' => "Campania", 'callback_data' => 'setWhere#Campania'],
 | 
			
		||||
                ['text' => "Emilia-Romagna", 'callback_data' => 'setWhere#Emilia-Romagna'],
 | 
			
		||||
                ['text' => "Friuli-Venezia Giulia", 'callback_data' => 'setWhere#Friuli-Venezia Giulia']
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                ['text' => "Lazio", 'callback_data' => 'setWhere#Lazio'],
 | 
			
		||||
                ['text' => "Liguria", 'callback_data' => 'setWhere#Liguria'],
 | 
			
		||||
                ['text' => "Lombardia", 'callback_data' => 'setWhere#Lombardia']
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                ['text' => "Marche", 'callback_data' => 'setWhere#Marche'],
 | 
			
		||||
                ['text' => "Molise", 'callback_data' => 'setWhere#Molise'],
 | 
			
		||||
                ['text' => "Piemonte", 'callback_data' => 'setWhere#Piemonte']
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                ['text' => "Puglia", 'callback_data' => 'setWhere#Puglia'],
 | 
			
		||||
                ['text' => "Sardegna", 'callback_data' => 'setWhere#Sardegna'],
 | 
			
		||||
                ['text' => "Sicilia", 'callback_data' => 'setWhere#Sicilia']
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                ['text' => "Toscana", 'callback_data' => 'setWhere#Toscana'],
 | 
			
		||||
                ['text' => "Trentino-Alto Adige", 'callback_data' => 'setWhere#Trentino-Alto Adige'],
 | 
			
		||||
                ['text' => "Umbria", 'callback_data' => 'setWhere#Umbria']
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                ['text' => "Valle d'Aosta", 'callback_data' => 'setWhere#Valle d\'Aosta'],
 | 
			
		||||
                ['text' => "Veneto", 'callback_data' => 'setWhere#Veneto']
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                ['text' => "👉Imposta Personalizzato", 'callback_data' => 'setWhere#custom']
 | 
			
		||||
            ]
 | 
			
		||||
        ]));
 | 
			
		||||
        if ($du->getLastPrivateMessage() != 0) $this->bot->deleteMessage(
 | 
			
		||||
            $this->replyUser->getId(),
 | 
			
		||||
            $du->getLastPrivateMessage()
 | 
			
		||||
        );
 | 
			
		||||
        $add = "";
 | 
			
		||||
        if ($du->getUPlace()) $add = "\nRisposta corrente: <i>" . $du->getUPlace() . "</i>";
 | 
			
		||||
        $message =  $this->bot->sendMessage(
 | 
			
		||||
            $this->replyUser->getId(),
 | 
			
		||||
            "<b>Da dove vieni?</b> (massimo <b>40</b> caratteri) " . $add,
 | 
			
		||||
            "HTML",
 | 
			
		||||
            false,
 | 
			
		||||
            null,
 | 
			
		||||
            $keyboard
 | 
			
		||||
        );
 | 
			
		||||
        $du->setLastPrivateMessage($message->getMessageId());
 | 
			
		||||
        $du->save(false);
 | 
			
		||||
    }
 | 
			
		||||
    public function askOrient(DatabaseUser $du)
 | 
			
		||||
    {
 | 
			
		||||
        $du->setPrivateChatStatus(self::STATUS_ASK_ORIENT);
 | 
			
		||||
        $keyboard = new InlineKeyboardMarkup($this->getKeyboard($du, self::STATUS_ASK_ORIENT, [
 | 
			
		||||
            [
 | 
			
		||||
                ['text' => "Etero", 'callback_data' => 'setOrient#Etero'],
 | 
			
		||||
                ['text' => "Gay", 'callback_data' => 'setOrient#Gay'],
 | 
			
		||||
                ['text' => "Bisessuale", 'callback_data' => 'setOrient#Bisessuale']
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                ['text' => "Lesbica", 'callback_data' => 'setOrient#Lesbica'],
 | 
			
		||||
                ['text' => "Pansessuale", 'callback_data' => 'setOrient#Pansessuale'],
 | 
			
		||||
                ['text' => "Asessuale", 'callback_data' => 'setOrient#Asessuale']
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
 | 
			
		||||
                ['text' => "Demisessuale", 'callback_data' => 'setOrient#Demisessuale'],
 | 
			
		||||
                ['text' => "Questioning", 'callback_data' => 'setOrient#Questioning'],
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                ['text' => "👉Imposta Personalizzato", 'callback_data' => 'setOrient#custom']
 | 
			
		||||
            ]
 | 
			
		||||
        ]));
 | 
			
		||||
        if ($du->getLastPrivateMessage() != 0) $this->bot->deleteMessage(
 | 
			
		||||
            $this->replyUser->getId(),
 | 
			
		||||
            $du->getLastPrivateMessage()
 | 
			
		||||
        );
 | 
			
		||||
        $add = "";
 | 
			
		||||
        if ($du->getUOrient()) $add = "\nRisposta corrente: <i>" . $du->getUOrient() . "</i>";
 | 
			
		||||
        $message =  $this->bot->sendMessage(
 | 
			
		||||
            $this->replyUser->getId(),
 | 
			
		||||
            "<b>Quel'è il tuo orientamento?</b>  (massimo <b>40</b> caratteri) " . $add,
 | 
			
		||||
            "HTML",
 | 
			
		||||
            false,
 | 
			
		||||
            null,
 | 
			
		||||
            $keyboard
 | 
			
		||||
        );
 | 
			
		||||
        $du->setLastPrivateMessage($message->getMessageId());
 | 
			
		||||
        $du->save(false);
 | 
			
		||||
    }
 | 
			
		||||
    public function askBirthDate(DatabaseUser $du, bool $invalid = false)
 | 
			
		||||
    {
 | 
			
		||||
        $du->setPrivateChatStatus(self::STATUS_ASK_BIRTH);
 | 
			
		||||
 | 
			
		||||
        $keyboard = new InlineKeyboardMarkup($this->getKeyboard($du, self::STATUS_ASK_BIRTH, []));
 | 
			
		||||
        if ($du->getLastPrivateMessage() != 0) $this->bot->deleteMessage(
 | 
			
		||||
            $this->replyUser->getId(),
 | 
			
		||||
            $du->getLastPrivateMessage()
 | 
			
		||||
        );
 | 
			
		||||
        $add = "";
 | 
			
		||||
        if ($invalid) $add .= "\n<b>Data invalida</b>";
 | 
			
		||||
        if ($du->getUbirthDate()) $add .= "\nRisposta corrente: <i>" . date("d/m/Y", $du->getUbirthDate()) . " (" . $du->getAge() . " anni)</i>";
 | 
			
		||||
        $message =  $this->bot->sendMessage(
 | 
			
		||||
            $this->replyUser->getId(),
 | 
			
		||||
            "Quando Sei Natə?\n<b>Formato data: giorno/mese/anno</b>" . $add,
 | 
			
		||||
            "HTML",
 | 
			
		||||
            false,
 | 
			
		||||
            null,
 | 
			
		||||
            $keyboard
 | 
			
		||||
        );
 | 
			
		||||
        $du->setLastPrivateMessage($message->getMessageId());
 | 
			
		||||
        $du->save(false);
 | 
			
		||||
    }
 | 
			
		||||
    public function noPolicy()
 | 
			
		||||
    {
 | 
			
		||||
        $du = DatabaseUser::getByChat($this->database, $this->replyUser);
 | 
			
		||||
        $du->setPrivateChatStatus(self::STATUS_NOT_CONSENT);
 | 
			
		||||
        if ($du->getLastPrivateMessage() != 0) $this->bot->deleteMessage(
 | 
			
		||||
            $this->replyUser->getId(),
 | 
			
		||||
            $du->getLastPrivateMessage()
 | 
			
		||||
        );
 | 
			
		||||
        $keyboard = new InlineKeyboardMarkup([
 | 
			
		||||
            [
 | 
			
		||||
                ['text' => "✅ Ho cambiato idea", 'callback_data' => 'changedIdea']
 | 
			
		||||
            ]
 | 
			
		||||
        ]);
 | 
			
		||||
        $message = $this->bot->sendMessage(
 | 
			
		||||
            $this->replyUser->getId(),
 | 
			
		||||
            "<b>Nessun Problema</b>, torna se hai cambiato idea. \nTi lascio la mia  <a href=\"https://telegra.ph/Rainbow-Bot----Privacy-policy-08-04\">privacy policy</a> da consultare",
 | 
			
		||||
            "HTML",
 | 
			
		||||
            false,
 | 
			
		||||
            null,
 | 
			
		||||
            $keyboard
 | 
			
		||||
        );
 | 
			
		||||
        $du->setLastPrivateMessage($message->getMessageId());
 | 
			
		||||
        $du->save(false);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										42
									
								
								handlers/Rave.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,42 @@
 | 
			
		||||
<?php
 | 
			
		||||
use \TelegramBot\Api\Types\Message;
 | 
			
		||||
use \TelegramBot\Api\Client;
 | 
			
		||||
class Rave extends Command
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    public static function exposedCommands(): array
 | 
			
		||||
    {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const CLASSIC = "classic";
 | 
			
		||||
    const GARFIELD = "garfield";
 | 
			
		||||
    const MEGALOVANIA = "megalovania";
 | 
			
		||||
    const OTAMATONE = "otamatone";
 | 
			
		||||
 | 
			
		||||
    private string $mode;
 | 
			
		||||
    public function __construct(Message $message, Client $bot, string $mode)
 | 
			
		||||
    {
 | 
			
		||||
        parent::__construct($message, $bot);
 | 
			
		||||
        $this->mode = $mode;
 | 
			
		||||
    }
 | 
			
		||||
    public function execute(): void
 | 
			
		||||
    {
 | 
			
		||||
        $m = $this->message->getReplyToMessage();
 | 
			
		||||
        if (!$m) {
 | 
			
		||||
            $this->bot->sendMessage($this->message->getChat()->getId(), "Cita un messaggio di testo", null, false, $this->message->getMessageId());
 | 
			
		||||
        } else {
 | 
			
		||||
            $this->bot->sendChatAction($this->message->getChat()->getId(), "upload_video");
 | 
			
		||||
            $this->bot->sendVideo(
 | 
			
		||||
                $this->message->getChat()->getId(),
 | 
			
		||||
                "https://crabrave.boringcactus.com/render?text=" . urlencode($m->getText()) . "&ext=mp4&style=" . $this->mode,
 | 
			
		||||
                null,
 | 
			
		||||
                null,
 | 
			
		||||
                $this->message->getMessageId(),
 | 
			
		||||
                null,
 | 
			
		||||
                null,
 | 
			
		||||
                "HTML"
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										26
									
								
								handlers/Tpdne.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,26 @@
 | 
			
		||||
<?php
 | 
			
		||||
class Tpdne extends Command
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    public static function exposedCommands(): array{
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function __construct(\TelegramBot\Api\Types\Message $message, \TelegramBot\Api\Client $bot)
 | 
			
		||||
    {
 | 
			
		||||
        parent::__construct($message, $bot);
 | 
			
		||||
    }
 | 
			
		||||
    public function execute(): void
 | 
			
		||||
    {
 | 
			
		||||
        $this->bot->sendChatAction($this->message->getChat()->getId(), "upload_photo");
 | 
			
		||||
        $this->bot->sendPhoto(
 | 
			
		||||
            $this->message->getChat()->getId(),
 | 
			
		||||
            "https://thispersondoesnotexist.com/image?v=" . bin2hex(random_bytes(10)) . time(),
 | 
			
		||||
            null,
 | 
			
		||||
            $this->message->getMessageId(),
 | 
			
		||||
            null,
 | 
			
		||||
            null,
 | 
			
		||||
            "HTML"
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										350
									
								
								index.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,350 @@
 | 
			
		||||
<?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());
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										16
									
								
								src/API.php
									
									
									
									
									
								
							
							
						
						@@ -1,16 +0,0 @@
 | 
			
		||||
<?php
 | 
			
		||||
function API($method, $data)
 | 
			
		||||
{
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
    $ch = curl_init();
 | 
			
		||||
 | 
			
		||||
    curl_setopt($ch, CURLOPT_URL, "https://api.telegram.org/".$GLOBALS["config"]["lgbt"]["TOKEN"]."/" . $method);
 | 
			
		||||
    curl_setopt($ch, CURLOPT_POST, 1);
 | 
			
		||||
 | 
			
		||||
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
 | 
			
		||||
 | 
			
		||||
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 | 
			
		||||
 | 
			
		||||
    return json_decode(curl_exec($ch) , true);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										19567
									
								
								src/DC.txt
									
									
									
									
									
								
							
							
						
						
							
								
								
									
										100
									
								
								src/aalist
									
									
									
									
									
								
							
							
						
						@@ -1,100 +0,0 @@
 | 
			
		||||
https://youtube.com/watch?v=cpCdm7ZGrfA
 | 
			
		||||
https://youtube.com/watch?v=h29zK6_VstU
 | 
			
		||||
https://youtube.com/watch?v=UEGVxLs6Sr0
 | 
			
		||||
https://youtube.com/watch?v=GDP4ds-ozOI
 | 
			
		||||
https://youtube.com/watch?v=9_sAzyTCZzQ
 | 
			
		||||
https://youtube.com/watch?v=ANcuqk7x33o
 | 
			
		||||
https://youtube.com/watch?v=HK2VLhbSaoc
 | 
			
		||||
https://youtube.com/watch?v=UxnvGDK0WGM
 | 
			
		||||
https://youtube.com/watch?v=0nPfjHuKtw8
 | 
			
		||||
https://youtube.com/watch?v=YmYPxdQpwpQ
 | 
			
		||||
https://youtube.com/watch?v=lAWdWk6a2gg
 | 
			
		||||
https://youtube.com/watch?v=SPOFjeHS_hc
 | 
			
		||||
https://youtube.com/watch?v=upOhRRYVGkA
 | 
			
		||||
https://youtube.com/watch?v=_ItfF7ZGDgE
 | 
			
		||||
https://youtube.com/watch?v=B8eTxPdU4sQ
 | 
			
		||||
https://youtube.com/watch?v=pLtzOZe1vZI
 | 
			
		||||
https://youtube.com/watch?v=KbFlZQfXFjc
 | 
			
		||||
https://youtube.com/watch?v=dr4fdf8F3Yk
 | 
			
		||||
https://youtube.com/watch?v=oVbFMCFl9xE
 | 
			
		||||
https://youtube.com/watch?v=d1JT6ZDqIE0
 | 
			
		||||
https://youtube.com/watch?v=UPdY_f1ybn8
 | 
			
		||||
https://youtube.com/watch?v=V32y9gHJP0E
 | 
			
		||||
https://youtube.com/watch?v=e_FwZ6E5adA
 | 
			
		||||
https://youtube.com/watch?v=EtMfvQc-Rh8
 | 
			
		||||
https://youtube.com/watch?v=Sz-m7l_QoEo
 | 
			
		||||
https://youtube.com/watch?v=en8l-_-rBgw
 | 
			
		||||
https://youtube.com/watch?v=CvqIHkfXlM8
 | 
			
		||||
https://youtube.com/watch?v=3MRIi0ac8hc
 | 
			
		||||
https://youtube.com/watch?v=JMg6N9PuOi8
 | 
			
		||||
https://youtube.com/watch?v=2FXO-QVjh9g
 | 
			
		||||
https://youtube.com/watch?v=5_tPakMnuyI
 | 
			
		||||
https://youtube.com/watch?v=obVQPIEPdRU
 | 
			
		||||
https://youtube.com/watch?v=HNBhziViepg
 | 
			
		||||
https://youtube.com/watch?v=ANcWZHFIcIM
 | 
			
		||||
https://youtube.com/watch?v=yQpyHftAF5U
 | 
			
		||||
https://youtube.com/watch?v=C_mNhW9PfS4
 | 
			
		||||
https://youtube.com/watch?v=C_Bv1wF40JI
 | 
			
		||||
https://youtube.com/watch?v=3tgDWKlJsSM
 | 
			
		||||
https://youtube.com/watch?v=_HaMSS7-lwQ
 | 
			
		||||
https://youtube.com/watch?v=-i5tt2-V2SE
 | 
			
		||||
https://youtube.com/watch?v=lP06Gve7VWg
 | 
			
		||||
https://youtube.com/watch?v=36pwF_fh5b0
 | 
			
		||||
https://youtube.com/watch?v=gBfFRGY-vto
 | 
			
		||||
https://youtube.com/watch?v=7Cl98sQPDhU
 | 
			
		||||
https://youtube.com/watch?v=wVkyy04CkTk
 | 
			
		||||
https://youtube.com/watch?v=YB5MFl3aH2Q
 | 
			
		||||
https://youtube.com/watch?v=02oEoK84490
 | 
			
		||||
https://youtube.com/watch?v=-Q2X1uoWEdI
 | 
			
		||||
https://youtube.com/watch?v=GjmCbOFI1bk
 | 
			
		||||
https://youtube.com/watch?v=f54XlAqBDug
 | 
			
		||||
https://youtube.com/watch?v=z6kKqU-FkRc
 | 
			
		||||
https://youtube.com/watch?v=9yA3qrxxues
 | 
			
		||||
https://youtube.com/watch?v=VXS56M5wLJE
 | 
			
		||||
https://youtube.com/watch?v=72LiIZ3M8jM
 | 
			
		||||
https://youtube.com/watch?v=vYPL7ZN4E_o
 | 
			
		||||
https://youtube.com/watch?v=pYfV_OzdYPk
 | 
			
		||||
https://youtube.com/watch?v=UjvOaYK7SgM
 | 
			
		||||
https://youtube.com/watch?v=HtlWpGcCl5k
 | 
			
		||||
https://youtube.com/watch?v=sAqnzsnw1m0
 | 
			
		||||
https://youtube.com/watch?v=Gr4ELHLTV-A
 | 
			
		||||
https://youtube.com/watch?v=sAM-XMc8OAc
 | 
			
		||||
https://youtube.com/watch?v=dcuK7tHFg6M
 | 
			
		||||
https://youtube.com/watch?v=QI55FRv28Kw
 | 
			
		||||
https://youtube.com/watch?v=jNPkCfUHgtI
 | 
			
		||||
https://youtube.com/watch?v=aC_-WxlTMVQ
 | 
			
		||||
https://youtube.com/watch?v=VzW7ou4UaZg
 | 
			
		||||
https://youtube.com/watch?v=kkfX4Y-WkDs
 | 
			
		||||
https://youtube.com/watch?v=4GeSY3Kkbgc
 | 
			
		||||
https://youtube.com/watch?v=hNMXmNUKH4s
 | 
			
		||||
https://youtube.com/watch?v=KepUb2l6K3E
 | 
			
		||||
https://youtube.com/watch?v=Zg_2xTUwyZA
 | 
			
		||||
https://youtube.com/watch?v=QI_0ECz59ug
 | 
			
		||||
https://youtube.com/watch?v=_TePxy7Hc3M
 | 
			
		||||
https://youtube.com/watch?v=9IoF2nhr1Jk
 | 
			
		||||
https://youtube.com/watch?v=lpSpJqFVMtc
 | 
			
		||||
https://youtube.com/watch?v=b6pvnwwbNFA
 | 
			
		||||
https://youtube.com/watch?v=wP1DJ_D4chA
 | 
			
		||||
https://youtube.com/watch?v=UtXiYk1WUwQ
 | 
			
		||||
https://youtube.com/watch?v=DCm4mlQi4Rc
 | 
			
		||||
https://youtube.com/watch?v=Hy-qT6qfZSA
 | 
			
		||||
https://youtube.com/watch?v=vru3V9XcNDc
 | 
			
		||||
https://youtube.com/watch?v=V-DUwGZiN_E
 | 
			
		||||
https://youtube.com/watch?v=_6nkTj26ghk
 | 
			
		||||
https://youtube.com/watch?v=xBk1GIy3m4I
 | 
			
		||||
https://youtube.com/watch?v=JKXJSVafDag
 | 
			
		||||
https://youtube.com/watch?v=t1rjTDfLhLM
 | 
			
		||||
https://youtube.com/watch?v=QJa9u_5_zK4
 | 
			
		||||
https://youtube.com/watch?v=Ry87VcpXwjo
 | 
			
		||||
https://youtube.com/watch?v=2DTjNriHboA
 | 
			
		||||
https://youtube.com/watch?v=Bag1lm8CA4M
 | 
			
		||||
https://youtube.com/watch?v=ZI0JFEHElUA
 | 
			
		||||
https://youtube.com/watch?v=MIQXomPzm2I
 | 
			
		||||
https://youtube.com/watch?v=iFQ8wVjTPiE
 | 
			
		||||
https://youtube.com/watch?v=maqy9IuJjCo
 | 
			
		||||
https://youtube.com/watch?v=o7GMQvoJmQQ
 | 
			
		||||
https://youtube.com/watch?v=76RcshkmOYk
 | 
			
		||||
https://youtube.com/watch?v=yDHWjWSxj2s
 | 
			
		||||
https://youtube.com/watch?v=i_t_dhE1zIE
 | 
			
		||||
https://youtube.com/watch?v=6TjCzeXciV0
 | 
			
		||||
https://youtube.com/watch?v=5quxFte-97o
 | 
			
		||||
							
								
								
									
										42414
									
								
								src/bibbia.txt
									
									
									
									
									
								
							
							
						
						
							
								
								
									
										106
									
								
								src/chart.php
									
									
									
									
									
								
							
							
						
						@@ -1,106 +0,0 @@
 | 
			
		||||
<?php
 | 
			
		||||
function orientChart($orients,$filename){
 | 
			
		||||
    /*************Configuration Starts******************/
 | 
			
		||||
 | 
			
		||||
// Heading
 | 
			
		||||
$chartTitle = "Orientamenti";
 | 
			
		||||
 | 
			
		||||
// Branding / extra label (optional)
 | 
			
		||||
$logo = "Dati del ".date("d/m/Y").", ".date("H:i:s");
 | 
			
		||||
 
 | 
			
		||||
// Data
 | 
			
		||||
$arrData=$orients;
 | 
			
		||||
 | 
			
		||||
/*************************End****************************/
 | 
			
		||||
 | 
			
		||||
/*****************For Programmers************************/
 | 
			
		||||
$scale=2;
 | 
			
		||||
$imageWidth = 300*$scale;                             //image width 
 | 
			
		||||
$imageHeight = 200*$scale;                            //image height
 | 
			
		||||
$diameter = 150*$scale-50;                               //pie diameter 
 | 
			
		||||
$centerX = 100*$scale;                                //pie center pixels x
 | 
			
		||||
$centerY = 100*$scale;                                //pie center pixels y
 | 
			
		||||
$labelWidth = 10*$scale;                              //label width, no need to change 
 | 
			
		||||
/*************************End****************************/
 | 
			
		||||
 | 
			
		||||
createPieChart($arrData, $chartTitle, $logo, $imageWidth, $imageHeight, $diameter, $centerX, $centerY, $labelWidth,$filename);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function createPieChart($arrData, $chartTitle, $logo, $imageWidth, $imageHeight, $diameter, $centerX, $centerY, $labelWidth,$filename) {
 | 
			
		||||
	
 | 
			
		||||
	$item = array_keys($arrData);
 | 
			
		||||
	$data = array_values($arrData);
 | 
			
		||||
	
 | 
			
		||||
	for( $i = 0; $i < count( $data ); $i++ ) {
 | 
			
		||||
		$dataTotal += $data[ $i ];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	$im = ImageCreate( $imageWidth, $imageHeight );
 | 
			
		||||
 | 
			
		||||
	$color[] = ImageColorAllocate( $im, 255, 0, 0 ); //red
 | 
			
		||||
	$color[] = ImageColorAllocate( $im, 255, 204, 0 );//yellow
 | 
			
		||||
	$color[] = ImageColorAllocate( $im, 153, 204, 0 );//green
 | 
			
		||||
	$color[] = ImageColorAllocate( $im, 153, 51, 255 );//purple
 | 
			
		||||
	$color[] = ImageColorAllocate( $im, 0, 128, 255 );//blue
 | 
			
		||||
	$color[] = ImageColorAllocate( $im, 255, 0, 128 );//pink
 | 
			
		||||
	$color[] = ImageColorAllocate( $im, 192, 192, 192 );//grey
 | 
			
		||||
	$color[] = ImageColorAllocate( $im, 204, 204, 0 );
 | 
			
		||||
	$color[] = ImageColorAllocate( $im, 64, 128, 128 );
 | 
			
		||||
	$color[] = ImageColorAllocate( $im, 204, 102, 153 );
 | 
			
		||||
	$white = ImageColorAllocate( $im, 255, 255, 255 );
 | 
			
		||||
	$black = ImageColorAllocate( $im, 0, 0, 0 );
 | 
			
		||||
	$grey = ImageColorAllocate( $im, 215, 215, 215 );
 | 
			
		||||
 | 
			
		||||
	ImageFill( $im, 0, 0, $white );
 | 
			
		||||
 | 
			
		||||
	$degree = 0;
 | 
			
		||||
	for( $i = 0; $i < count( $data ); $i++ ) {
 | 
			
		||||
		$startDegree = round( $degree );
 | 
			
		||||
		$degree += ( $data[ $i ] / $dataTotal ) * 360;
 | 
			
		||||
		$endDegree = round( $degree );
 | 
			
		||||
 | 
			
		||||
		$currentColor = $color[ $i % ( count( $color ) ) ];
 | 
			
		||||
 | 
			
		||||
		ImageArc( $im, $centerX, $centerY, $diameter, $diameter, $startDegree, $endDegree, $currentColor );
 | 
			
		||||
 | 
			
		||||
		list( $arcX, $arcY ) = circlePoint( $startDegree, $diameter );
 | 
			
		||||
		ImageLine( $im, $centerX, $centerY, floor( $centerX + $arcX ), floor( $centerY + $arcY ), $currentColor );
 | 
			
		||||
 | 
			
		||||
		list( $arcX, $arcY ) = circlePoint( $endDegree, $diameter );
 | 
			
		||||
		ImageLine( $im, $centerX, $centerY, ceil( $centerX + $arcX ), ceil( $centerY + $arcY ), $currentColor );
 | 
			
		||||
 | 
			
		||||
		$midPoint = round( ( ( $endDegree - $startDegree ) / 2 ) + $startDegree );
 | 
			
		||||
		list( $arcX, $arcY ) = circlePoint( $midPoint, $diameter / 1.5 );
 | 
			
		||||
		ImageFillToBorder( $im, floor( $centerX + $arcX ), floor( $centerY + $arcY ), $currentColor, $currentColor );
 | 
			
		||||
		ImageString( $im, 2, floor( $centerX + $arcX ), floor( $centerY + $arcY ), intval( round( $data[ $i ] / $dataTotal * 100 ) ) . "%", $black );
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	$labelX = $centerX + $diameter / 2 + 10;
 | 
			
		||||
	$labelY = $centerY - $diameter / 4;
 | 
			
		||||
	$titleX = $labelX - $diameter / 4;
 | 
			
		||||
	$titleY = $centerY - $diameter / 2;
 | 
			
		||||
	ImageString( $im, 3, $titleX + 1, $titleY + 1, $chartTitle, $grey );
 | 
			
		||||
	ImageString( $im, 3, $titleX, $titleY, $chartTitle, $black );
 | 
			
		||||
 | 
			
		||||
	for( $i = 0; $i < count( $item ); $i++ ) {
 | 
			
		||||
		$currentColor = $color[ $i % ( count( $color ) ) ];
 | 
			
		||||
		ImageRectangle( $im, $labelX, $labelY, $labelX + $labelWidth, $labelY + $labelWidth, $black );
 | 
			
		||||
		ImageFilledRectangle( $im, $labelX + 1, $labelY + 1, $labelX + $labelWidth, $labelY + $labelWidth, $currentColor );
 | 
			
		||||
		ImageString( $im, 2, $labelX + $labelWidth + 5, $labelY, $item[ $i ], $black );
 | 
			
		||||
		ImageString( $im, 2, $labelX + $labelWidth + 90, $labelY, $data[ $i ]." %", $black );
 | 
			
		||||
		$labelY += $labelWidth + 2;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	//ImageString( $im, 3, $labelX, $labelY, "Total:", $black );
 | 
			
		||||
	ImageString( $im, 3, $labelX + $labelWidth + 60, $labelY, $dataTotal, $black );
 | 
			
		||||
	ImageString( $im, 2, $labelX, $labelY + 15, $logo, $black );
 | 
			
		||||
	ImagePNG( $im ,$filename);
 | 
			
		||||
	ImageDestroy( $im );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function circlePoint( $deg, $dia ) {
 | 
			
		||||
	$x = cos( deg2rad( $deg ) ) * ( $dia / 2 );
 | 
			
		||||
	$y = sin( deg2rad( $deg ) ) * ( $dia / 2 );	
 | 
			
		||||
	return array( $x, $y );
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										86
									
								
								src/eva.php
									
									
									
									
									
								
							
							
						
						@@ -1,86 +0,0 @@
 | 
			
		||||
<?php
 | 
			
		||||
function evaSplit($text){
 | 
			
		||||
    $text=chunk_split($text,38,"\n");
 | 
			
		||||
    $list=explode("\n",$text);
 | 
			
		||||
    array_filter($list);
 | 
			
		||||
    $f="";
 | 
			
		||||
    foreach($list as $el){
 | 
			
		||||
        $f.=htmlentities(trim($el))."<br />";
 | 
			
		||||
    }
 | 
			
		||||
    return $f;
 | 
			
		||||
}
 | 
			
		||||
$data=json_decode($_GET["data"]);
 | 
			
		||||
if($data==null){
 | 
			
		||||
?>
 | 
			
		||||
<header class="eva-heading">
 | 
			
		||||
    <h2 class="eva-heading__title">NEON</h2>
 | 
			
		||||
    <h2 class="eva-heading__title">GENESIS</h2>
 | 
			
		||||
    <h1 class="eva-heading__title">EVANGELION</h1>
 | 
			
		||||
    <h3 class="eva-heading__episode-number">EPISODE: 4</h3>
 | 
			
		||||
    <h4 class="eva-heading__episode-title">
 | 
			
		||||
      Those woman longed for the touch of <br>others' lips, and thus invited their kisses
 | 
			
		||||
    </h4>
 | 
			
		||||
  </header>
 | 
			
		||||
<?php
 | 
			
		||||
}
 | 
			
		||||
else{
 | 
			
		||||
    ?>
 | 
			
		||||
    <header class="eva-heading">
 | 
			
		||||
        <h2 class="eva-heading__title"><?php echo htmlentities($data[0]); ?></h2>
 | 
			
		||||
        <h2 class="eva-heading__title"><?php echo htmlentities($data[1]); ?></h2>
 | 
			
		||||
        <h1 class="eva-heading__title"><?php echo htmlentities($data[2]); ?></h1>
 | 
			
		||||
        <h3 class="eva-heading__episode-number"><?php echo htmlentities($data[3]); ?></h3>
 | 
			
		||||
        <h4 class="eva-heading__episode-title">
 | 
			
		||||
         <?php echo evaSplit($data[4]); ?>
 | 
			
		||||
        </h4>
 | 
			
		||||
      </header>
 | 
			
		||||
    <?php
 | 
			
		||||
}
 | 
			
		||||
?>
 | 
			
		||||
<style>* {
 | 
			
		||||
  margin: 0;
 | 
			
		||||
  padding: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
body {
 | 
			
		||||
  background-color: black;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.eva-heading {
 | 
			
		||||
  padding: 32px;
 | 
			
		||||
  align-self: baseline;
 | 
			
		||||
  font-family: serif;
 | 
			
		||||
  color: white;
 | 
			
		||||
  text-shadow: 0 0 2px #e19a86, 0 0 1.5px #854535, 0 0 1.5px #5c150c;
 | 
			
		||||
  width:600px;
 | 
			
		||||
  height:478px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.eva-heading > h1 {
 | 
			
		||||
  font-size: 500%;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.eva-heading > h2 {
 | 
			
		||||
  font-size: 300%;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.eva-heading__title {
 | 
			
		||||
  transform: scale(1, 1.5);
 | 
			
		||||
  line-height: 1.2em;
 | 
			
		||||
  letter-spacing: -.03em;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.eva-heading__episode-number {
 | 
			
		||||
  font-family: sans-serif;
 | 
			
		||||
  font-size: 180%;
 | 
			
		||||
  transform: scale(1, 1.5);
 | 
			
		||||
  letter-spacing: -.06em;
 | 
			
		||||
  margin: 10px 0 26px 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.eva-heading__episode-title {
 | 
			
		||||
  transform: scale(1, 1.3);
 | 
			
		||||
  font-size: 170%;
 | 
			
		||||
  line-height: 1em;
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 22 KiB  | 
| 
		 Before Width: | Height: | Size: 19 KiB  | 
| 
		 Before Width: | Height: | Size: 19 KiB  | 
| 
		 Before Width: | Height: | Size: 22 KiB  | 
| 
		 Before Width: | Height: | Size: 18 KiB  | 
| 
		 Before Width: | Height: | Size: 18 KiB  | 
| 
		 Before Width: | Height: | Size: 21 KiB  | 
| 
		 Before Width: | Height: | Size: 21 KiB  | 
| 
		 Before Width: | Height: | Size: 25 KiB  | 
| 
		 Before Width: | Height: | Size: 21 KiB  | 
| 
		 Before Width: | Height: | Size: 23 KiB  | 
| 
		 Before Width: | Height: | Size: 26 KiB  | 
| 
		 Before Width: | Height: | Size: 21 KiB  | 
| 
		 Before Width: | Height: | Size: 21 KiB  | 
| 
		 Before Width: | Height: | Size: 27 KiB  | 
| 
		 Before Width: | Height: | Size: 22 KiB  | 
| 
		 Before Width: | Height: | Size: 21 KiB  | 
| 
		 Before Width: | Height: | Size: 20 KiB  | 
| 
		 Before Width: | Height: | Size: 20 KiB  | 
| 
		 Before Width: | Height: | Size: 23 KiB  |