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:

  1. Come è stato richiamato il gioco (se con la modalità inline o con un comando normale)

  2. Vogliamo tenere il punteggio più alto oppure considerare ogni partita come nuovo punteggio e memorizzarlo come record personale

  3. 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à
Non sono state poste domande su questo Tutorial al momento.
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.