Gioco 1: clicca il più possibile
Informazioni sul Tutorial (autore, data di revisione, ...)
Ultima data di revisione:
Autore Tutorial King Kaito Kid, membro del Team Invisibile
Tutorial di Telegram Bot PHP
Come creare il primo gioco su Telegram, capire le dinamiche di Telegram e come integrare il gioco in Telegram con memorizzazione dei punteggi.
Leggi il Tutorial
Introduzione
Questo gioco è davvero semplice da realizzare perché richiede solo la conoscenza basilare del JavaScript perché il nostro obiettivo sarà capire come salvare il punteggio su Telegram e capire piccole implicazioni.
Problemi da affrontare
Come prima cosa vediamo le problematiche:
- Come è stato richiamato il gioco (se con la modalità inline o con un comando normale)
- Vogliamo tenere il punteggio più alto oppure considerare ogni partita come nuovo punteggio e memorizzarlo come record personale
- Quando vogliamo salvare il punteggio
Telegram nelle sue API recita questo
New score, must be non-negative
Quindi tutti i punteggi negativi saranno ignorati.
Ma ora affrontiamo le problematiche in ordine.
1. Come richiamare il gioco
Per rendere le cose molto comode per l'utente dobbiamo essere scomodi noi (inteso come sviluppatore del bot) perché in base a come viene richiamato il gioco ci sono dei parametri che ci sono ed altri che non ci sono.
Per esempio con la modalità inline non possiamo avere il
message_id
e chi ha eseguito tale comando, abbiamo solo la chat_id
dell'utente ma non della chat stessa (che se è privata coincidono ma in gruppi e canali non coincidono).Per risolvere questo problema la tastiera inline (che ricordo che passa tutti i suoi dati mediante input chiamato
callback_query
che è diverso da inline_query
che è legato alla modalità inline) ha anche un dato che viene passato in caso di modalità inline ovvero inline_message_id
, questo è sufficiente per dare tutte le informazioni che Telegram vuole per eseguire il metodo setGameScore
.
2. Parametro force
di setGameScore
(decrementare il proprio record)
Telegram salva i punteggi dei giochi in modo locale alla chat, come detto anche nel Tutorial precedente.
Se voi avete giocato nella chat con il Bot e fate, ad esempio, 30 punti e poi giocate nella chat di gruppo e fate 25 punti (ad esempio) i due punteggi sono autonomi ovvero il punteggio fatto nella chat del Bot rimane sempre 30, non importa se altrove è stato fatto un punteggio inferiore o superiore.
Con questa premessa siete liberi di rendere i punteggi più globali e non locali alle singole chat ma a questo punto siete voi che dovete fare tutto il processo di memorizzazione e una serie di controlli.
Ora dovete solo rispondere ad una domanda se lasciare l'opzione di default del parametro
force
del metodo setGameScore
oppure metterlo a True
.Secondo le API questo parametro, se impostato a
True
, permette di decrementare (oltre ad aumentare) il record di un utente, questo in parole povere significa che ogni partita che l'utente gioca viene considerata come nuovo record personale e questo implica che se fa due partite e stabilisce i suguenti punteggi: 903928, 20 per Telegram varrà l'ultima partita ovvero l'utente ha il record di 20 punti, ovviamente se omettete tale parametro dite a Telegram di prendere sempre il punteggio massimo e di memorizzare solo quando viene superato.
3. Quando salvare il punteggio
Ultima questione è più "individuale" dello svilupatore ovvero quando si vuole inviare il punteggio a Telegram per essere memorizzato (e aggiornato il punteggio in base alla scelta vista nel punto precedente).
Di norma il punteggio viene salvato quando la partita finisce o perché il tempo scade o perché l'utente ha perso/vinto e solo in quel caso viene inviato il punteggio fatto fino a quel momento.
L'alternativa è che il punteggio viene salvato mentre l'utente gioca.
Fare questa scelta è determinante perché risponde alla vostra esigenza specifica, se per qualche motivo l'utente interrompe la partita volete che il punteggio venga memorizzato o perso?
Facendo un salvataggio continuo il punteggio sarà sempre memorizzato mentre se salvate solo in quei 3 casi (o quello che volete voi) in caso di uscita anticipata (e.g. utente chiude Telegram/browser) allora nessun punteggio è stato slavato.
Inoltre fare questa scelta (salvare continuamente) ha lievi ripercussioni sulle prestazioni del gioco stesso perché se l'utente dovesse avere una connessione con un PING abbastanza alto allora il salvataggio sarà tutto rallentato e tutto ne risenteperché il vostro codice è sequenziale e non parallelo (ovvero se avete le istruzioni XYZ e X rappresenta il salvataggio e impiega 10 secondi Y deve aspettare che X abbia finito, quindi Y deve aspettare 10 secondi prima di essere eseguito), cosa che non vale in caso di codice parallelo in cui XYZ vanno in parallelo e quindi nessuno rallenta nessuno.
Integrare il metodo setGameScore
nel gioco
Ora che i veri problemi con Telegram sono stati risolti e affrontati, possiamo conentrarci sui problemi su come integrare tale metodo nel nostro gioco fatto con solo JavaScript e in particolar modo la libreria jQuery.
Questo gioco è volutamente semplicissimo perché la vera problematica è capire come integrare tale metodo Telegram in jQuery, per proseguire è necessario avere nozioni di base del JavaScript e in particolar modo del jQuery che potete leggere anche sul nostro sito Basi del jQuery.
Nei file troverete tutto il codice HTML e jQuery commentato e spiegato in inglese perché vorrei soffermarmi su una funzione del jQuery che ci permette di fare quello che vogliamo, tutto il resto è intuibile e non rilevante in questo Tutorial (data la sua semplicità).
Chi ci segue e ha visto i Tutorial HTML ricorderà il Tutorial Aggiornare contenuto senza aggiornare la pagina.
Qui non si tratta di una cosa del genere, qui si tratta di eseguire una pagina e non mostrare a video il suo possibile output, per fare questo però il jQuery usa una libreria chiamata AJAX che ha
.get
integrato che ci permette di eseguire quello che vogliamo.Mostra / Nascondi il codice
$.get("https://intelligenteva.altervista.org/Tutorial%20Bot%20Telegram/GameSaveScore.php?id=" + <?php echo $_GET["user"];?> + "&score=" + x + "&cid=" + cid + "&mid=" + mid + "&inmid=" + inmid, function(data)
{
$('#json').text(data);
});
Il codice di sopra è preso dal codice finale quindi tralasciando il link e i suoi parametri la funzione
.get()
esegue la funzione in qualsiasi esito della pagina (in caso di errori del tipo 4xx, 5xx, 3xx) e quello che facciamo è mettere dentro il risultato in un elemento HTML che ha ID json
(nome arbitrario ma consigliato di usare per rappresentare le cose).Detto questo la nostra integrazione con Telegram è fatta perché tale pagina PHP (indicata nel link della funzione
.get()
, per esserechiari che si chiama GameSaveScore.php
) si preoccupa di eseguire il metodo Telegram passando i parametri necessari che abbiamo fornito.Il sistema può essere migliorato ed è anche semplice ma lascio la vostra libertà farlo.
Per non dilungare troppo il Tutorial non mi soffermo su come si esegue il metodo Telegram perché questa conoscenza deve essere stata acquisita con i Tutorial precedenti dedicati proprio nell'eseguire metodi Telegram.
Però la nostra soluzione non efficiente ha dei parametri che per Telegram hanno valori illegali e Telegram si arrabbia molto e si rifiuta di eseguire tale metodo, quindi abbiamo adottato la soluzione secondo questa logica:
Il gioco quando viene avviato al link che avete impostato (anche con i parametri GET, solo GET) quindi passiamo tutte le informazioni che sono
chat_id, message_id, inline_message_id
e qualcuno dovesse essere vuoto il suo valore sarà sonoVuoto
in questo modo possiamo capire se il gioco è stato avviato con la modalità inline oppure con un comando normale perché ci basterà devedere se inmid == "sonoVuoto"
se è così allora il gioco è stato avviato senza usare la modalità inline altrimenti è stato avviato con la modalità inline.Ripeto che il processo può essere migliorato e di molto anche, ad esempio con l'uso di tabelle del vostro DataBase e quindi passare solo l'informazione necessaria per recuperare tutte le informazioni.
Download codici | Tutti i file
È in corso la revisione generale di tutti i codici presenti sul sito in seguito a numerose segnalazioni di codici sbagliati, assenti o incompleti.
📥 config.php – 🗓 codice rivisto il giorno 13 December 2018
📥 index.php – 🗓 codice rivisto il giorno 15 December 2018
📥 Channel.php – 🗓 codice rivisto il giorno 15 December 2018
📥 GameSaveScore.php – 🗓 codice rivisto il giorno 15 December 2018
📥 SuperGroup.php – 🗓 codice rivisto il giorno 15 December 2018
📥 Token.php – 🗓 codice rivisto il giorno 15 December 2018
📥 BasicFunctions.php – 🗓 codice rivisto il giorno 15 December 2018
📥 DifferentChat.php – 🗓 codice rivisto il giorno 15 December 2018
📥 Game.php – 🗓 codice rivisto il giorno 15 December 2018
📥 NormalUser.php – 🗓 codice rivisto il giorno 15 December 2018
📥 SpecialCommands.php – 🗓 codice rivisto il giorno 15 December 2018
📥 Admin.php – 🗓 codice rivisto il giorno 15 December 2018
Altri Tutorial di questo linguaggio
Qui vengono mostrati tutti i Tutorial riguardo Telegram Bot PHP, la pagia viene aggiornata.
Se vuoi cambiare linguaggio puoi farlo da questa pagina: Elenco dei Tutorial
FAQ | Curiosità
Se hai delle domande da fare usa la sezione dedicata e se la domanda viene posta tante volte o è importante apparirà in questa sezione dedicata alle domande.
Hai una domanda? | Contattaci
Scrivici la domanda e come vuoi essere ricontattato
Puoi comunicare con noi in modo diretto ma RICORDA che se vuoi essere contattato devi indicarci come farlo perché tutte le domande che ci arrivano sono tutte anonime.