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
|
||||
|
||||
[![Linting](https://github.com/MatMasIt/rainbowBot/actions/workflows/syntax.yml/badge.svg)](https://github.com/MatMasIt/rainbowBot/actions/workflows/syntax.yml)
|
||||
![GitHub](https://img.shields.io/github/license/MatMasIt/rainbowBot)
|
||||
![Website](https://img.shields.io/website?down_color=red&down_message=Offline&label=server&up_color=green&up_message=Online&url=https%3A%2F%2Fcrow.altervista.org)
|
||||
|
||||
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 |