2015-08-21 21:27:43 +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 = {
2015-08-14 19:44:41 +00:00
' @steffo ' : 76561198034314260 ,
' @evilbaluisevilt_t ' : 76561198071012695 ,
' @fultz ' : 76561198035547490 ,
' @ilgattopardo ' : 76561198111021344 ,
' @frankfrankfrank ' : 76561198071099951 ,
' @fedyal ' : 76561198109189938 ,
' @acterryg ' : 76561198146704979 ,
2015-09-09 08:54:57 +00:00
' @maxsensei ' : 76561198121094516 ,
2015-08-22 17:58:20 +00:00
' @heisendoc ' : 76561198080377213 ,
2015-08-14 19:44:41 +00:00
' @supermattemb ' : 76561198115852550 ,
' @peraemela99 ' : 76561198161867082 ,
2015-08-10 18:36:00 +00:00
' @thevagginadestroyer ' : 76561198128738388 ,
2015-08-14 19:44:41 +00:00
' fillo ' : 76561198103292029 ,
' @cosimo03 ' : 76561198062778224 ,
2015-09-07 16:15:12 +00:00
' @albertino04 ' : 76561198071383448 ,
2015-08-14 19:44:41 +00:00
' @voltaggio ' : 76561198147601821 ,
' alle2002 ' : 76561198052996311 ,
' jummi ' : 76561198169975999 ,
' @tauei ' : 76561198104305298 ,
' @saitorlock ' : 76561198089120441 ,
' @iemax ' : 76561198149695151 ,
' @alleanderl ' : 76561198154175301 ,
' @boni3099 ' : 76561198131868211 ,
2015-09-09 08:57:41 +00:00
' @adry99 ' : 76561198230034568 ,
' @mrdima98 ' : 76561198140863530 ,
2015-08-10 18:36:00 +00:00
}
2015-08-14 19:50:59 +00:00
#Elenco degli steamid e degli username di telegram.
osuids = {
' @steffo ' : ' SteffoRYG ' ,
' @evilbaluisevilt_t ' : ' NemesisRYG ' ,
' @fultz ' : ' ftz99 ' ,
' @ilgattopardo ' : ' gattopardo ' ,
' @frankfrankfrank ' : ' FrankezRYG ' ,
' @fedyal ' : ' fedececco ' ,
' @acterryg ' : ' Acter1 ' ,
2015-09-09 08:54:57 +00:00
' @maxsensei ' : ' MaxSensei ' ,
2015-08-24 17:34:53 +00:00
' @heisendoc ' : ' ImHeisenberg ' ,
2015-08-14 19:50:59 +00:00
' @thevagginadestroyer ' : ' barboll ' ,
' @cosimo03 ' : ' Cosimo03 ' ,
2015-09-07 16:15:12 +00:00
' @albertino04 ' : ' Alby1 ' ,
2015-08-14 19:50:59 +00:00
' @voltaggio ' : ' voltaggio ' ,
' @tauei ' : ' tauei ' ,
' @saitorlock ' : ' saitorlock ' ,
' @boni3099 ' : ' boni3099 ' ,
2015-09-09 08:57:41 +00:00
' @mrdima98 ' : ' MRdima98 ' ,
2015-08-14 19:50:59 +00:00
}
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-09-09 17:29:47 +00:00
' parse_mode ' : ' Markdown ' #Formattare il messaggio?
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
2015-08-21 21:22:13 +00:00
if ( data [ ' ok ' ] ) :
2015-08-21 21:26:39 +00:00
if ( data [ ' result ' ] != [ ] ) :
2015-08-21 21:22:13 +00:00
#Aggiorna l'update ID sul file
writeFile ( " lastid.txt " , str ( data [ ' result ' ] [ 0 ] [ ' update_id ' ] + 1 ) )
2015-09-01 15:46:08 +00:00
#...esiste il messaggio? telegram wtf
2015-09-09 10:12:02 +00:00
if ( data [ ' result ' ] [ 0 ] [ ' message ' ] is not None ) :
2015-09-01 15:46:08 +00:00
#Leggi i dati del messaggio
msg = data [ ' result ' ] [ 0 ] [ ' message ' ]
#Ah, non lo so io!
if ( msg [ ' text ' ] . startswith ( " /ahnonlosoio " ) ) :
sendMessage ( " Ah non lo so nemmeno io ¯ \ _(ツ)_/¯ " , msg [ ' chat ' ] [ ' id ' ] , msg [ ' from ' ] [ ' id ' ] )
if ( msg [ ' text ' ] . startswith ( " /ehoh " ) ) :
sendMessage ( " Eh oh cose che capitano ¯ \ _(ツ)_/¯ " , msg [ ' chat ' ] [ ' id ' ] , msg [ ' from ' ] [ ' id ' ] )
#Controlla lo stato di una persona su Steam.
if ( msg [ ' text ' ] . startswith ( " /steam " ) ) :
#Se non viene specificato un
if ( msg [ ' text ' ] == " /steam " ) :
sendMessage ( chr ( 9888 ) + " Non hai specificato uno SteamID o un username! " , msg [ ' chat ' ] [ ' id ' ] , msg [ ' from ' ] [ ' id ' ] )
2015-08-08 10:27:53 +00:00
else :
2015-09-01 15:46:08 +00:00
#Royalbot sta scrivendo...
setTyping ( ' typing ' , msg [ ' chat ' ] [ ' id ' ] )
#Controlla se la selezione è un username di telegram.
if ( msg [ ' text ' ] [ 7 : ] . lower ( ) in steamids ) :
selezione = steamids [ msg [ ' text ' ] [ 7 : ] . lower ( ) ]
2015-08-21 21:22:13 +00:00
else :
2015-09-01 15:46:08 +00:00
selezione = msg [ ' text ' ] [ 7 : ]
steam = getSteamStatus ( selezione )
if ( steam [ ' response ' ] [ ' players ' ] ) :
online = steam [ ' response ' ] [ ' players ' ] [ 0 ] [ ' personastate ' ]
name = steam [ ' response ' ] [ ' players ' ] [ 0 ] [ ' personaname ' ]
#E' in gioco? Se non c'è nessuna informazione sul gioco, lascia perdere
try :
steam [ ' response ' ] [ ' players ' ] [ 0 ] [ ' gameextrainfo ' ]
except KeyError :
ingame = None
else :
ingame = steam [ ' response ' ] [ ' players ' ] [ 0 ] [ ' gameextrainfo ' ]
#Stati di Steam
text = " "
if ( online == 0 ) :
2015-09-09 17:31:45 +00:00
text = chr ( 9898 ) + " *Offline* "
2015-09-01 15:46:08 +00:00
elif ( online == 1 ) :
2015-09-09 17:31:45 +00:00
text = chr ( 128309 ) + " *Online* "
2015-09-01 15:46:08 +00:00
elif ( online == 2 ) :
2015-09-09 17:31:45 +00:00
text = chr ( 128308 ) + " *Occupato* "
2015-09-01 15:46:08 +00:00
elif ( online == 3 ) :
2015-09-09 17:31:45 +00:00
text = chr ( 9899 ) + " *Assente* "
2015-09-01 15:46:08 +00:00
elif ( online == 4 ) :
2015-09-09 17:31:45 +00:00
text = chr ( 9899 ) + " *Addormentato* "
2015-09-01 15:46:08 +00:00
elif ( online == 5 ) :
2015-09-09 17:31:45 +00:00
text = chr ( 128309 ) + " *Disponibile per scambiare* "
2015-09-01 15:46:08 +00:00
elif ( online == 6 ) :
2015-09-09 17:31:45 +00:00
text = chr ( 128309 ) + " *Disponibile per giocare* "
2015-09-01 15:46:08 +00:00
if ingame is not None :
2015-09-09 17:31:45 +00:00
sendMessage ( " _ " + name + " _ sta giocando a " + chr ( 128308 ) + " " + ingame + " . " , msg [ ' chat ' ] [ ' id ' ] , msg [ ' from ' ] [ ' id ' ] )
2015-09-01 15:46:08 +00:00
else :
2015-09-09 17:31:45 +00:00
sendMessage ( " _ " + name + " _ e ' " + text + " . " , msg [ ' chat ' ] [ ' id ' ] , msg [ ' from ' ] [ ' id ' ] )
2015-08-21 21:22:13 +00:00
else :
2015-09-01 15:46:08 +00:00
sendMessage ( chr ( 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 ( chr ( 9888 ) + " Non hai specificato un PlayerID o un username di osu! o Telegram! " , msg [ ' chat ' ] [ ' id ' ] , msg [ ' from ' ] [ ' id ' ] )
2015-08-08 10:15:08 +00:00
else :
2015-09-01 15:46:08 +00:00
#Controlla se la selezione è un username di telegram.
if ( msg [ ' text ' ] [ 5 : ] . lower ( ) in osuids ) :
selezione = osuids [ msg [ ' text ' ] [ 5 : ] . lower ( ) ]
else :
selezione = msg [ ' text ' ] [ 5 : ]
#Ricevi i dati di Osu e visualizza lo stato nella chat.
setTyping ( ' typing ' , msg [ ' chat ' ] [ ' id ' ] )
osu = getOsuStatus ( selezione , 0 )
setTyping ( ' typing ' , msg [ ' chat ' ] [ ' id ' ] )
taiko = getOsuStatus ( selezione , 1 )
setTyping ( ' typing ' , msg [ ' chat ' ] [ ' id ' ] )
ctb = getOsuStatus ( selezione , 2 )
setTyping ( ' typing ' , msg [ ' chat ' ] [ ' id ' ] )
osumania = getOsuStatus ( selezione , 3 )
#Trova l'username della persona.
name = osu [ 0 ] [ ' username ' ]
#Trova i pp in ogni modalità
2015-09-09 15:58:33 +00:00
if ( osu [ 0 ] [ ' pp_raw ' ] is not None ) :
osupp = float ( osu [ 0 ] [ ' pp_raw ' ] )
else :
osupp = 0
if ( taiko [ 0 ] [ ' pp_raw ' ] is not None ) :
taikopp = float ( taiko [ 0 ] [ ' pp_raw ' ] )
else :
taikopp = 0
if ( ctb [ 0 ] [ ' pp_raw ' ] is not None ) :
ctbpp = float ( ctb [ 0 ] [ ' pp_raw ' ] )
else :
ctbpp = 0
if ( osumania [ 0 ] [ ' pp_raw ' ] is not None ) :
osumaniapp = float ( osumania [ 0 ] [ ' pp_raw ' ] )
else :
osumaniapp = 0
2015-09-01 15:46:08 +00:00
#Manda il messaggio
2015-09-09 17:36:08 +00:00
sendMessage ( " [ " + name + " ](https://osu.ppy.sh/u/ " + selezione + " ) ha: " + chr ( 10 ) + " * " + str ( int ( osupp ) ) + " pp* su Osu! " + chr ( 10 ) + " * " + str ( int ( taikopp ) ) + " pp* su Taiko " + chr ( 10 ) + " * " + str ( int ( ctbpp ) ) + " pp* su Catch the Beat " + chr ( 10 ) + " * " + str ( int ( osumaniapp ) ) + " pp* su Osu!mania " , msg [ ' chat ' ] [ ' id ' ] , msg [ ' from ' ] [ ' id ' ] )