2015-08-07 16:15:27 +00:00
# -*- coding: utf-8 -*-
2015-08-07 13:49:13 +00:00
import requests #Modulo per fare richieste su HTTP
import time #Modulo per mettere in pausa il programma
2015-08-07 14:23:26 +00:00
#Ultimo messaggio mandato dal bot.
lastmsg = " "
2015-08-10 18:51:17 +00:00
#Inizializzazione keys
token = " "
steamtoken = " "
osutoken = " "
2015-08-10 18:36:00 +00:00
#Elenco degli steamid e degli username di telegram.
steamids = {
' @Steffo ' : 76561198034314260 ,
' @EvilBaluIsEvilT_T ' : 76561198071012695 ,
' @Fultz ' : 76561198035547490 ,
' @IlGattopardo ' : 76561198111021344 ,
' @FrankFrankFrank ' : 76561198071099951 ,
' @fedYal ' : 76561198109189938 ,
' @ActerRYG ' : 76561198146704979 ,
' @YouTouchMyTralala ' : 76561198121094516 ,
2015-08-12 13:01:48 +00:00
' @HeisenDex_TheMadDoctor ' : 76561198080377213 ,
2015-08-10 18:36:00 +00:00
' @SuperMattemb ' : 76561198115852550 ,
' @Peraemela99 ' : 76561198161867082 ,
' @thevagginadestroyer ' : 76561198128738388 ,
' Fillo ' : 76561198103292029 ,
' @Cosimo03 ' : 76561198062778224 ,
' Alby ' : 76561198071383448 ,
' @Voltaggio ' : 76561198147601821 ,
' Alle2002 ' : 76561198052996311 ,
' Jummi ' : 76561198169975999 ,
' @Tauei ' : 76561198104305298 ,
' @Saitorlock ' : 76561198089120441 ,
' @iEmax ' : 76561198149695151 ,
' @Alleanderl ' : 76561198154175301 ,
' @Boni3099 ' : 76561198131868211 ,
}
2015-08-07 13:49:13 +00:00
#Leggi un file e rispondi con il contenuto
def readFile ( name ) :
file = open ( name , ' r ' )
content = file . read ( )
file . close ( )
return content
#Scrivi qualcosa su un file
def writeFile ( name , content ) :
file = open ( name , ' w ' )
file . write ( content )
file . close ( )
#Ricevi gli ultimi messaggi
def getUpdates ( ) :
#Parametri della richiesta da fare
parametri = {
' offset ' : readFile ( " lastid.txt " ) , #Update ID del messaggio da leggere
' limit ' : 1 , #Numero di messaggi da ricevere alla volta, lasciare 1
' timeout ' : 300 , #Secondi da mantenere attiva la richiesta se non c'e' nessun messaggio
}
#Manda la richiesta ai server di Telegram e convertila in un dizionario
r = requests . get ( " https://api.telegram.org/bot " + token + " /getUpdates " , params = parametri ) . json ( )
return r
#Manda un messaggio
2015-08-08 11:32:14 +00:00
def sendMessage ( content , to , da ) :
2015-08-07 13:49:13 +00:00
#Parametri del messaggio
parametri = {
' chat_id ' : to , #L'ID della chat a cui mandare il messaggio, Royal Games: -2141322
2015-08-07 14:52:42 +00:00
' text ' : content , #Il messaggio da mandare
2015-08-07 13:49:13 +00:00
}
2015-08-07 14:23:26 +00:00
#Antispam: manda il messaggio solo se l'ultimo messaggio è diverso da quello che deve mandare ora.
2015-08-07 14:28:37 +00:00
global lastmsg
2015-08-07 14:23:26 +00:00
if ( lastmsg != content ) :
#Manda il messaggio
r = requests . get ( " https://api.telegram.org/bot " + token + " /sendMessage " , params = parametri )
lastmsg = content
else :
2015-08-08 11:32:14 +00:00
#Manda il messaggio in chat privata
parametri [ ' chat_id ' ] = da
#Manda il messaggio
r = requests . get ( " https://api.telegram.org/bot " + token + " /sendMessage " , params = parametri )
2015-08-11 12:36:07 +00:00
2015-08-11 12:53:03 +00:00
#RoyalBot sta scrivendo...
def setTyping ( type , to ) :
#Parametri del messaggio
parametri = {
' chat_id ' : to ,
' action ' : type ,
}
#Manda la richiesta ai server di Telegram.
requests . get ( " https://api.telegram.org/bot " + token + " /sendChatAction " , params = parametri )
2015-08-07 14:52:42 +00:00
def getSteamStatus ( steamid ) :
#Parametri della richiesta
parametri = {
' key ' : steamtoken ,
' steamids ' : steamid ,
}
2015-08-10 22:42:45 +00:00
#Manda la richiesta ai server di Steam e convertila in un dizionario
2015-08-07 15:28:28 +00:00
r = requests . get ( " http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/ " , params = parametri ) . json ( )
2015-08-07 14:52:42 +00:00
return r
2015-08-10 22:42:45 +00:00
def getOsuStatus ( osuid , mode ) :
#Parametri della richiesta
parametri = {
' k ' : osutoken ,
' u ' : osuid ,
' m ' : mode ,
}
#Manda la richiesta ai server di Osu e convertila in un dizionario
r = requests . get ( " https://osu.ppy.sh/api/get_user " , params = parametri ) . json ( )
return r
2015-08-10 18:51:17 +00:00
#Caricamento delle API Keys
2015-08-10 22:17:23 +00:00
token = readFile ( ' telegramapi.txt ' )
steamtoken = readFile ( ' steamapi.txt ' )
osutoken = readFile ( ' osuapi.txt ' )
2015-08-10 18:51:17 +00:00
2015-08-07 13:49:13 +00:00
#Il loop del bot
while ( True ) :
#Ricevi gli ultimi messaggi
data = getUpdates ( )
#Se c'e' un nuovo messaggio
if ( data [ ' ok ' ] and data [ ' result ' ] ) :
#Aggiorna l'update ID sul file
writeFile ( " lastid.txt " , str ( data [ ' result ' ] [ 0 ] [ ' update_id ' ] + 1 ) )
#Leggi i dati del messaggio
msg = data [ ' result ' ] [ 0 ] [ ' message ' ]
2015-08-07 16:14:26 +00:00
#Ah, non lo so io!
2015-08-07 15:58:53 +00:00
if ( msg [ ' text ' ] . startswith ( " /ahnonlosoio " ) ) :
2015-08-08 11:36:07 +00:00
sendMessage ( " Ah non lo so nemmeno io ¯ \ _(ツ)_/¯ " , msg [ ' chat ' ] [ ' id ' ] , msg [ ' from ' ] [ ' id ' ] )
2015-08-07 16:14:26 +00:00
#Controlla lo stato di una persona su Steam.
2015-08-07 15:02:47 +00:00
if ( msg [ ' text ' ] . startswith ( " /steam " ) ) :
2015-08-07 16:14:26 +00:00
#Se non viene specificato un
2015-08-07 15:01:17 +00:00
if ( msg [ ' text ' ] == " /steam " ) :
2015-08-10 18:40:00 +00:00
sendMessage ( unichr ( 9888 ) + " Non hai specificato uno SteamID o un username! " , msg [ ' chat ' ] [ ' id ' ] , msg [ ' from ' ] [ ' id ' ] )
2015-08-07 14:52:42 +00:00
else :
2015-08-11 12:54:27 +00:00
#Royalbot sta scrivendo...
setTyping ( ' typing ' , msg [ ' chat ' ] [ ' id ' ] )
2015-08-07 16:29:12 +00:00
#Controlla se la selezione è un username di telegram.
2015-08-07 17:22:57 +00:00
if ( msg [ ' text ' ] [ 7 : ] in steamids ) :
2015-08-07 16:34:15 +00:00
selezione = steamids [ msg [ ' text ' ] [ 7 : ] ]
2015-08-07 16:29:12 +00:00
else :
selezione = msg [ ' text ' ] [ 7 : ]
2015-08-07 16:14:26 +00:00
steam = getSteamStatus ( selezione )
2015-08-07 15:19:03 +00:00
if ( steam [ ' response ' ] [ ' players ' ] ) :
online = steam [ ' response ' ] [ ' players ' ] [ 0 ] [ ' personastate ' ]
name = steam [ ' response ' ] [ ' players ' ] [ 0 ] [ ' personaname ' ]
2015-08-08 11:32:14 +00:00
#E' in gioco? Se non c'è nessuna informazione sul gioco, lascia perdere
2015-08-08 10:27:53 +00:00
try :
2015-08-08 10:28:12 +00:00
steam [ ' response ' ] [ ' players ' ] [ 0 ] [ ' gameextrainfo ' ]
2015-08-08 10:27:53 +00:00
except KeyError :
2015-08-08 10:21:59 +00:00
ingame = None
2015-08-08 10:27:53 +00:00
else :
ingame = steam [ ' response ' ] [ ' players ' ] [ 0 ] [ ' gameextrainfo ' ]
2015-08-08 11:32:14 +00:00
#Stati di Steam
2015-08-07 15:19:03 +00:00
text = " "
if ( online == 0 ) :
2015-08-07 17:22:57 +00:00
text = unichr ( 9898 ) + " Offline "
2015-08-07 15:19:03 +00:00
elif ( online == 1 ) :
2015-08-07 17:29:04 +00:00
text = unichr ( 55357 ) + unichr ( 56629 ) + " Online "
2015-08-07 15:19:03 +00:00
elif ( online == 2 ) :
2015-08-07 17:29:04 +00:00
text = unichr ( 55357 ) + unichr ( 56628 ) + " Occupato "
2015-08-07 15:19:03 +00:00
elif ( online == 3 ) :
2015-08-07 17:22:57 +00:00
text = unichr ( 9899 ) + " Assente "
2015-08-07 15:19:03 +00:00
elif ( online == 4 ) :
2015-08-07 17:22:57 +00:00
text = unichr ( 9899 ) + " Inattivo "
2015-08-07 15:19:03 +00:00
elif ( online == 5 ) :
2015-08-07 17:29:04 +00:00
text = unichr ( 55357 ) + unichr ( 56629 ) + " Disponibile per scambiare "
2015-08-07 15:19:03 +00:00
elif ( online == 6 ) :
2015-08-07 17:29:04 +00:00
text = unichr ( 55357 ) + unichr ( 56629 ) + " Disponibile per giocare "
2015-08-08 10:27:53 +00:00
if ingame is not None :
2015-08-08 11:32:14 +00:00
sendMessage ( name + " sta giocando a " + unichr ( 55357 ) + unichr ( 56628 ) + " " + ingame + " . " , msg [ ' chat ' ] [ ' id ' ] , msg [ ' from ' ] [ ' id ' ] )
2015-08-08 10:15:08 +00:00
else :
2015-08-08 11:32:14 +00:00
sendMessage ( name + " e ' " + text + " . " , msg [ ' chat ' ] [ ' id ' ] , msg [ ' from ' ] [ ' id ' ] )
2015-08-07 15:22:47 +00:00
else :
2015-08-10 22:42:45 +00:00
sendMessage ( unichr ( 9888 ) + " Lo SteamID o l ' username non esiste! " , msg [ ' chat ' ] [ ' id ' ] , msg [ ' from ' ] [ ' id ' ] )
#Trova i punteggi di una persona su osu!
if ( msg [ ' text ' ] . startswith ( " /osu " ) ) :
if ( msg [ ' text ' ] == " /osu " ) :
sendMessage ( unichr ( 9888 ) + " Non hai specificato un PlayerID o un username di osu! o Telegram! " , msg [ ' chat ' ] [ ' id ' ] , msg [ ' from ' ] [ ' id ' ] )
else :
#Persona selezionata
selezione = msg [ ' text ' ] [ 5 : ]
2015-08-11 12:57:24 +00:00
#Ricevi i dati di Osu e visualizza lo stato nella chat.
setTyping ( ' typing ' , msg [ ' chat ' ] [ ' id ' ] )
2015-08-10 22:42:45 +00:00
osu = getOsuStatus ( selezione , 0 )
2015-08-11 12:57:24 +00:00
setTyping ( ' typing ' , msg [ ' chat ' ] [ ' id ' ] )
2015-08-10 22:42:45 +00:00
taiko = getOsuStatus ( selezione , 1 )
2015-08-11 12:57:24 +00:00
setTyping ( ' typing ' , msg [ ' chat ' ] [ ' id ' ] )
2015-08-10 22:42:45 +00:00
ctb = getOsuStatus ( selezione , 2 )
2015-08-11 12:57:24 +00:00
setTyping ( ' typing ' , msg [ ' chat ' ] [ ' id ' ] )
2015-08-10 22:42:45 +00:00
osumania = getOsuStatus ( selezione , 3 )
#Trova l'username della persona.
name = osu [ 0 ] [ ' username ' ]
#Trova i pp in ogni modalità
2015-08-11 12:35:12 +00:00
osupp = float ( osu [ 0 ] [ ' pp_raw ' ] )
taikopp = float ( taiko [ 0 ] [ ' pp_raw ' ] )
ctbpp = float ( ctb [ 0 ] [ ' pp_raw ' ] )
osumaniapp = float ( osumania [ 0 ] [ ' pp_raw ' ] )
2015-08-10 22:42:45 +00:00
#Manda il messaggio
2015-08-12 12:58:38 +00:00
sendMessage ( name + " ha: " + unichr ( 10 ) + str ( int ( osupp ) ) + " pp su Osu! " + unichr ( 10 ) + str ( int ( taikopp ) ) + " pp su Taiko " + unichr ( 10 ) + str ( int ( ctbpp ) ) + " pp su Catch the Beat " + unichr ( 10 ) + str ( int ( osumaniapp ) ) + " pp su Osu!mania " , msg [ ' chat ' ] [ ' id ' ] , msg [ ' from ' ] [ ' id ' ] )