1
Fork 0
mirror of https://github.com/RYGhub/royalnet.git synced 2024-11-27 13:34:28 +00:00
royalnet/royalbot.py

285 lines
9.9 KiB
Python
Raw Normal View History

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,
2015-09-20 20:38:35 +00:00
'@evilbalu': 76561198071012695,
2015-08-14 19:44:41 +00:00
'@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,
'@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',
2015-09-20 20:38:35 +00:00
'@evilbalu': 'NemesisRYG',
2015-08-14 19:50:59 +00:00
'@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',
'@boni3099': 'boni3099',
2015-09-09 08:57:41 +00:00
'@mrdima98': 'MRdima98',
2015-08-14 19:50:59 +00:00
}
2015-09-20 20:38:35 +00:00
#Elenco della gente ringraziabile
tylist = {
'@steffo': 'Steffo',
'@evilbalu': 'Nemesis',
'@fultz': 'Fulz',
'@ilgattopardo': 'Gattopardo',
'@frankfrankfrank': 'Frankez',
'@fedyal': 'Fedyal',
'@acterryg': 'Acter',
'@maxsensei': 'Sensei',
'@heisendoc': 'Heisenberg',
'@supermattemb': 'Supermatte',
'@peraemela99': 'Igor',
'@thevagginadestroyer': 'Barbol',
'@cosimo03': 'Cosimo',
'@albertino04': 'Alby',
'@voltaggio': 'Voltaggio',
'@tauei': 'Tauei',
'@iemax': 'Emax',
'@alleanderl': 'Alleander',
'@boni3099': 'Bobby',
'@adry99': 'Adry',
'@mrdima98': 'Dima',
}
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
'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.
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)
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()
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:41:05 +00:00
sendMessage("[" + name + "](http://steamcommunity.com/profiles/" + str(selezione) + ") 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:41:05 +00:00
sendMessage("[" + name + "](http://steamcommunity.com/profiles/" + str(selezione) + ") 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!
2015-09-20 20:38:35 +00:00
elif(msg['text'].startswith("/osu")):
2015-09-01 15:46:08 +00:00
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-20 20:38:35 +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'])
#Ringrazia una persona!
elif(msg['text'].startswith("/ty")):
if(msg['text'] == "/ty"):
sendMessage(chr(9888) + " Non hai specificato un username di Telegram!", msg['chat']['id'], msg['from']['id'])
else:
#Controlla se la selezione è un username di telegram.
if(msg['text'][4:].lower() in tylist):
2015-09-20 20:41:11 +00:00
selezione = tylist[msg['text'][4:].lower()]
2015-09-20 20:38:35 +00:00
setTyping('typing', msg['chat']['id'])
2015-09-21 13:29:42 +00:00
ty = readFile("ty/" + selezione + ".tyr"
writeFile("ty/" + selezione + ".tyr", ty + ", @" + msg['from']['username']
2015-09-20 20:38:35 +00:00
sendMessage(chr(9989) + " Hai proposto un TY per " + selezione + "!", msg['chat']['id'], msg['from']['id'])
else:
sendMessage(chr(9888) + " Username inesistente!", msg['chat']['id'], msg['from']['id'])