From cab7323e820683f4ebb941d2f771d316ed5b1136 Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Sun, 15 Nov 2015 16:58:07 +0100 Subject: [PATCH] /sbaaaaaaam --- bot.py | 29 ++--- filemanager.py | 31 +++--- steam.py | 124 +++++++++++++--------- telegram.py | 282 ++++++++++++++++++++++++++++--------------------- 4 files changed, 270 insertions(+), 196 deletions(-) diff --git a/bot.py b/bot.py index e09e52ca..b953ab03 100644 --- a/bot.py +++ b/bot.py @@ -9,41 +9,41 @@ rage = [] print("Bot avviato!") while True: # Guarda il comando ricevuto. - msg = telegram.getUpdates() + msg = telegram.getupdates() cmd = msg['text'].split(' ', 1) sby = msg['chat']['id'] if cmd[0].startswith('/ahnonlosoio'): print(str(sby) + ": /ahnonlosoio") - telegram.sendMessage("Ah, non lo so nemmeno io!", sby) + telegram.sendmessage("Ah, non lo so nemmeno io!", sby) elif cmd[0].startswith('/ehoh'): print(str(sby) + ": /ehoh") - telegram.sendMessage("Eh, oh. Sono cose che capitano.", sby) + telegram.sendmessage("Eh, oh. Sono cose che capitano.", sby) elif cmd[0].startswith('/start'): print(str(sby) + ": /start") - telegram.sendMessage('Ascolta, io mi starto quando mi pare. Anzi, quando Steffo ha voglia di aprirmi.', sby) + telegram.sendmessage('Ascolta, io mi starto quando mi pare. Anzi, quando Steffo ha voglia di aprirmi.', sby) elif cmd[0].startswith('/playing'): print(str(sby) + ": /playing") if len(cmd) >= 2: n = steam.getNumberOfCurrentPlayers(cmd[1]) if n is None: - telegram.sendMessage(chr(9888) + " L'app specificata non esiste!", sby) + telegram.sendmessage(chr(9888) + " L'app specificata non esiste!", sby) else: - telegram.sendMessage('In questo momento, ' + str(n) + ' persone stanno giocando a [' + cmd[1] + + telegram.sendmessage('In questo momento, ' + str(n) + ' persone stanno giocando a [' + cmd[1] + '](https://steamdb.info/app/' + cmd[1] + '/graphs/)', sby) else: - telegram.sendMessage(chr(9888) + ' Non hai specificato un AppID!\nLa sintassi corretta è /playing .', + telegram.sendmessage(chr(9888) + ' Non hai specificato un AppID!\nLa sintassi corretta è /playing .', sby) elif cmd[0].startswith('/saldistim'): print(str(sby) + ": /saldistim") - if (len(cmd) >= 2): - telegram.sendMessage( + if len(cmd) >= 2: + telegram.sendmessage( 'Ricerca di offerte di ' + '[' + cmd[1] + '](https://isthereanydeal.com/#/search:' + cmd[1].replace(' ', '%20') + ";/scroll:%23gamelist) completata.", sby) else: - telegram.sendMessage(chr(9888) + - ' Non hai specificato un gioco!' + - '[Visualizza tutto](https://isthereanydeal.com/#/search:.;/scroll:%23gamelist).', sby) + telegram.sendmessage(chr(9888) + + ' Non hai specificato un gioco!' + + '[Visualizza tutto](https://isthereanydeal.com/#/search:.;/scroll:%23gamelist).', sby) elif cmd[0].startswith('/rage'): if len(rage) <= 0: # Elenco degli audio disponibili @@ -57,4 +57,7 @@ while True: random.shuffle(rage) ragesend = rage.pop() print(str(sby) + ": /rage " + ragesend) - telegram.sendDocument(ragesend, sby) + telegram.senddocument(ragesend, sby) + elif cmd[0].startswith('/sbam'): + print(str(sby) + ": /sbam ") + telegram.sendaudio('BQADAgADTQIAAh8GgAGj0jKIrpTgvQI', sby) diff --git a/filemanager.py b/filemanager.py index 33648bbd..de0e6aa2 100644 --- a/filemanager.py +++ b/filemanager.py @@ -1,14 +1,21 @@ # -*- coding: utf-8 -*- -def readFile(name): - """Leggi i contenuti di un file.""" - file = open(name, 'r') - content = file.read() - file.close() - return content - -def writeFile(name, content): - """Scrivi qualcosa su un file, sovrascrivendo qualsiasi cosa ci sia al suo interno.""" - file = open(name, 'w') - file.write(content) - file.close() \ No newline at end of file + +def readfile(name): + """Leggi i contenuti di un file. + :param name: Nome del file + """ + file = open(name, 'r') + content = file.read() + file.close() + return content + + +def writefile(name, content): + """Scrivi qualcosa su un file, sovrascrivendo qualsiasi cosa ci sia al suo interno. + :param name: Nome del file + :param content: Contenuto del file + """ + file = open(name, 'w') + file.write(content) + file.close() diff --git a/steam.py b/steam.py index 68e58097..ed9f85ca 100644 --- a/steam.py +++ b/steam.py @@ -2,64 +2,84 @@ import requests import filemanager -##Per far funzionare questa libreria serve un file "steamapi.txt" contenente la Steam Api Key ottenibile a http://steamcommunity.com/dev/apikey -steamtoken = filemanager.readFile('steamapi.txt') +# Per far funzionare questa libreria serve un file "steamapi.txt" contenente la Steam Api Key ottenibile a +# http://steamcommunity.com/dev/apikey +steamtoken = filemanager.readfile('steamapi.txt') + def getPlayerSummaries(steamid): - """Ottieni i dati del profilo steam del giocatore di cui è stato specificato lo SteamID 32.""" - #Parametri della richiesta - parametri = { - 'key': steamtoken, - 'steamids': steamid, - } - #Manda la richiesta ai server di Steam. - r = requests.get("http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/", params=parametri).json() - return r['response']['players'][0] + """Ottieni i dati del profilo steam del giocatore di cui è stato specificato lo SteamID 32. + :param steamid: SteamID 32 del giocatore + """ + # Parametri della richiesta + parametri = { + 'key': steamtoken, + 'steamids': steamid, + } + # Manda la richiesta ai server di Steam. + r = requests.get("http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/", params=parametri).json() + return r['response']['players'][0] + def getNumberOfCurrentPlayers(appid): - """Ottieni il numero di giocatori che stanno giocando a un certo gioco.""" - #Parametri della richiesta - parametri = { - 'key': steamtoken, - 'appid': appid, - } - #Manda la richiesta ai server di Steam. - r = requests.get("http://api.steampowered.com/ISteamUserStats/GetNumberOfCurrentPlayers/v0001/", params=parametri).json() - if('player_count' in r['response']): - return r['response']['player_count'] - else: - return None - + """Ottieni il numero di giocatori che stanno giocando a un certo gioco. + :param appid: ID Steam dell'applicazione + """ + # Parametri della richiesta + parametri = { + 'key': steamtoken, + 'appid': appid, + } + # Manda la richiesta ai server di Steam. + r = requests.get("http://api.steampowered.com/ISteamUserStats/GetNumberOfCurrentPlayers/v0001/", + params=parametri).json() + if 'player_count' in r['response']: + return r['response']['player_count'] + else: + return None + + def getPlayerAchievements(appid, steamid): - """Ottieni gli achievement del giocatore e del gioco specificato.""" - #Parametri della richiesta - parametri = { - 'key': steamtoken, - 'steamid': steamid, - 'appid': appid, - 'l': 'IT' #Mettendo questo vengono in inglese...? What. - } - #Manda la richiesta ai server di Steam. - r = requests.get("http://api.steampowered.com/ISteamUserStats/GetPlayerAchievements/v0001/", params=parametri).json() - return r['playerstats'] + """Ottieni gli achievement del giocatore e del gioco specificato. + :param appid: ID dell'applicazione + :param steamid: SteamID 32 del giocatore + """ + # Parametri della richiesta + parametri = { + 'key': steamtoken, + 'steamid': steamid, + 'appid': appid, + 'l': 'IT' # Mettendo questo vengono in inglese...? What. + } + # Manda la richiesta ai server di Steam. + r = requests.get("http://api.steampowered.com/ISteamUserStats/GetPlayerAchievements/v0001/", + params=parametri).json() + return r['playerstats'] + def getSteamLevel(steamid): - """Ottieni il livello del profilo di Steam.""" - parametri = { - 'key': steamtoken, - 'steamid': steamid, - } - #Manda la richiesta ai server di Steam. - r = requests.get("http://api.steampowered.com/IPlayerService/GetSteamLevel/v0001/", params=parametri).json() - return r['response']['player_level'] + """Ottieni il livello del profilo di Steam. + :param steamid: SteamID 32 del giocatore + """ + parametri = { + 'key': steamtoken, + 'steamid': steamid, + } + # Manda la richiesta ai server di Steam. + r = requests.get("http://api.steampowered.com/IPlayerService/GetSteamLevel/v0001/", params=parametri).json() + return r['response']['player_level'] + def isPlayingSharedGame(appid, steamid): - """Guarda se il gioco a cui sta giocando qualcuno è condiviso.\nAh, Steam vuole sapere l'ID del gioco a cui sta giocando, quindi mettetecelo.""" - parametri = { - 'key': steamtoken, - 'steamid': steamid, - 'appid_playing': appid, - } - #Manda la richiesta ai server di Steam. - r = requests.get("http://api.steampowered.com/IPlayerService/IsPlayingSharedGame/v0001/", params=parametri).json() - return r #Non posso provare il comando; cambiare quando possibile? \ No newline at end of file + """Guarda se il gioco a cui sta giocando qualcuno è condiviso. + Ah, Steam vuole sapere l'ID del gioco a cui sta giocando, quindi mettetecelo. + :param appid: ID dell'applicazione + :param steamid: SteamID 32 del giocatore""" + parametri = { + 'key': steamtoken, + 'steamid': steamid, + 'appid_playing': appid, + } + # Manda la richiesta ai server di Steam. + r = requests.get("http://api.steampowered.com/IPlayerService/IsPlayingSharedGame/v0001/", params=parametri).json() + return r # Non posso provare il comando; cambiare quando possibile? diff --git a/telegram.py b/telegram.py index 6705cb49..d175d692 100644 --- a/telegram.py +++ b/telegram.py @@ -3,127 +3,171 @@ import requests import filemanager import time -##Per far funzionare questa libreria serve un file "lastid.txt" contenente l'update ID dell'ultimo messaggio non letto e un file "telegramapi.txt" contenente il token di accesso del bot assegnato da @BotFather. -telegramtoken = filemanager.readFile('telegramapi.txt') - -def getMe(): - """Visualizza dati sul bot.""" - #Manda la richiesta - data = requests.get("https://api.telegram.org/bot" + telegramtoken + "/getMe") - return data +# Per far funzionare questa libreria serve un file "lastid.txt" contenente l'update ID dell'ultimo messaggio non letto e +# un file "telegramapi.txt" contenente il token di accesso del bot assegnato da @BotFather. +telegramtoken = filemanager.readfile('telegramapi.txt') -def getUpdates(): - """Ricevi gli ultimi aggiornamenti dal server di Telegram e restituisci l'ultimo messaggio non letto.""" - while(True): - parametri = { - 'offset': filemanager.readFile("lastid.txt"), #Update ID del messaggio da leggere - 'limit': 1, #Numero di messaggi da ricevere alla volta, lasciare 1 - 'timeout': 1500, #Secondi da mantenere attiva la richiesta se non c'e' nessun messaggio - } - data = requests.get("https://api.telegram.org/bot" + telegramtoken + "/getUpdates", params=parametri).json() - if(data['ok'] == True): - if (data['result'] != []): - filemanager.writeFile("lastid.txt", str(data['result'][0]['update_id'] + 1)) - #Controlla che la risposta sia effettivamente un messaggio e non una notifica di servizio (tiziocaio si è unito alla chat) - if('message' in data['result'][0]): - return data['result'][0]['message'] - time.sleep(5) - -def sendMessage(content, to): - """Manda un messaggio a una chat.""" - #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 - 'parse_mode': 'Markdown', #Formattare il messaggio? - } - #Manda il messaggio - requests.get("https://api.telegram.org/bot" + telegramtoken + "/sendMessage", params=parametri) - -def forwardMessage(msg, sentby, to): - """Inoltra un messaggio mandato in un'altra chat.""" - parametri = { - 'chat_id': to, - 'from_chat_id': sentby, - 'message_id': msg, - } - #Manda la richiesta ai server di Telegram. - requests.get("https://api.telegram.org/bot" + telegramtoken + "/forwardMessage", params=parametri) - -def sendPhoto(pic, text, to): - """Manda una foto compressa a una chat.""" - parametri = { - 'chat_id': to, - 'photo': pic, - 'caption': text, - } - #Manda la richiesta ai server di Telegram. - requests.get("https://api.telegram.org/bot" + telegramtoken + "/sendPhoto", params=parametri) - -def sendAudio(aud, to): - """Manda un file audio .mp3 a una chat.""" - parametri = { - 'chat_id': to, - 'audio': aud, - } - #Manda la richiesta ai server di Telegram. - requests.get("https://api.telegram.org/bot" + telegramtoken + "/sendAudio", params=parametri) - -def sendDocument(doc, to): - """Manda un file a una chat.""" - parametri = { - 'chat_id': to, - 'document': doc, - } - #Manda la richiesta ai server di Telegram. - requests.get("https://api.telegram.org/bot" + telegramtoken + "/sendDocument", params=parametri) - -def sendSticker(stk, to): - """Manda uno sticker a una chat.""" - parametri = { - 'chat_id': to, - 'sticker': stk, - } - #Manda la richiesta ai server di Telegram. - requests.get("https://api.telegram.org/bot" + telegramtoken + "/sendSticker", params=parametri) - -def sendVideo(vid, to): - """Manda un video .mp4 a una chat.""" - parametri = { - 'chat_id': to, - 'video': vid, - } - #Manda la richiesta ai server di Telegram. - requests.get("https://api.telegram.org/bot" + telegramtoken + "/sendVideo", params=parametri) - -def sendVoice(aud, to): - """Manda un file audio .ogg con OPUS a una chat.""" - parametri = { - 'chat_id': to, - 'voice': aud, - } - #Manda la richiesta ai server di Telegram. - requests.get("https://api.telegram.org/bot" + telegramtoken + "/sendVoice", params=parametri) +def getme(): + """Visualizza dati sul bot.""" + # Manda la richiesta + data = requests.get("https://api.telegram.org/bot" + telegramtoken + "/getMe") + return data -def sendLocation(lat, long, to): - """Manda una posizione sulla mappa.""" - #Parametri del messaggio - parametri = { - 'chat_id': to, - 'latitude': lat, - 'longitude': long, - } - #Manda la richiesta ai server di Telegram. - requests.get("https://api.telegram.org/bot" + telegramtoken + "/sendLocation", params=parametri) +def getupdates(): + """Ricevi gli ultimi aggiornamenti dal server di Telegram e restituisci l'ultimo messaggio non letto.""" + while True: + parametri = { + 'offset': filemanager.readfile("lastid.txt"), # Update ID del messaggio da leggere + 'limit': 1, # Numero di messaggi da ricevere alla volta, lasciare 1 + 'timeout': 1500, # Secondi da mantenere attiva la richiesta se non c'e' nessun messaggio + } + data = requests.get("https://api.telegram.org/bot" + telegramtoken + "/getUpdates", params=parametri).json() + if data['ok']: + if data['result']: + filemanager.writefile("lastid.txt", str(data['result'][0]['update_id'] + 1)) + # Controlla che la risposta sia effettivamente un messaggio e non una notifica di servizio + if 'message' in data['result'][0]: + return data['result'][0]['message'] + time.sleep(5) -def sendChatAction(to, type='typing'): - """Visualizza lo stato "sta scrivendo" del bot.""" - #Parametri del messaggio - parametri = { - 'chat_id': to, - 'action': type, - } - #Manda la richiesta ai server di Telegram. - requests.get("https://api.telegram.org/bot" + telegramtoken + "/sendChatAction", params=parametri) \ No newline at end of file + +def sendmessage(content, to): + """Manda un messaggio a una chat. + :param content: Testo del messaggio + :param to: Destinatario del messaggio + """ + # Parametri del messaggio + parametri = { + 'chat_id': to, + 'text': content, + 'parse_mode': 'Markdown', # Formattare il messaggio? + } + # Manda il messaggio + requests.get("https://api.telegram.org/bot" + telegramtoken + "/sendMessage", params=parametri) + + +def forwardmessage(msg, sentby, to): + """Inoltra un messaggio mandato in un'altra chat. + :param msg: ID del messaggio + :param sentby: Persona da cui è stato mandato il messaggio + :param to: Destinatario del messaggio inoltrato + """ + parametri = { + 'chat_id': to, + 'from_chat_id': sentby, + 'message_id': msg, + } + # Manda la richiesta ai server di Telegram. + requests.get("https://api.telegram.org/bot" + telegramtoken + "/forwardMessage", params=parametri) + + +def sendphoto(pic, text, to): + """Manda una foto compressa a una chat. + :param pic: ID della foto da inviare + :param text: Testo della foto da inviare + :param to: Destinatario della foto + """ + parametri = { + 'chat_id': to, + 'photo': pic, + 'caption': text, + } + # Manda la richiesta ai server di Telegram. + requests.get("https://api.telegram.org/bot" + telegramtoken + "/sendPhoto", params=parametri) + + +def sendaudio(aud, to): + """Manda un file audio .mp3 a una chat. + :param aud: ID del file audio + :param to: Destinatario dell'audio + """ + parametri = { + 'chat_id': to, + 'audio': aud, + } + # Manda la richiesta ai server di Telegram. + requests.get("https://api.telegram.org/bot" + telegramtoken + "/sendAudio", params=parametri) + + +def senddocument(doc, to): + """Manda un file a una chat. + :param doc: ID del documento + :param to: Destinatario del documento + """ + parametri = { + 'chat_id': to, + 'document': doc, + } + # Manda la richiesta ai server di Telegram. + requests.get("https://api.telegram.org/bot" + telegramtoken + "/sendDocument", params=parametri) + + +def sendsticker(stk, to): + """Manda uno sticker a una chat. + :param stk: ID dello sticker + :param to: Destinatario dello sticker + """ + parametri = { + 'chat_id': to, + 'sticker': stk, + } + # Manda la richiesta ai server di Telegram. + requests.get("https://api.telegram.org/bot" + telegramtoken + "/sendSticker", params=parametri) + + +def sendvideo(vid, to): + """Manda un video .mp4 a una chat. + :param vid: ID del video + :param to: Destinatario del video + """ + parametri = { + 'chat_id': to, + 'video': vid, + } + # Manda la richiesta ai server di Telegram. + requests.get("https://api.telegram.org/bot" + telegramtoken + "/sendVideo", params=parametri) + + +def sendvoice(aud, to): + """Manda un file audio .ogg con OPUS a una chat come se fosse un messaggio vocale. + :param aud: ID dell'audio + :param to: Destinatario dell'audio + """ + parametri = { + 'chat_id': to, + 'voice': aud, + } + # Manda la richiesta ai server di Telegram. + requests.get("https://api.telegram.org/bot" + telegramtoken + "/sendVoice", params=parametri) + + +def sendlocation(lat, long, to): + """Manda una posizione sulla mappa. + :param lat: Latitudine + :param long: Longitudine + :param to: Destinatario della posizione + """ + # Parametri del messaggio + parametri = { + 'chat_id': to, + 'latitude': lat, + 'longitude': long, + } + # Manda la richiesta ai server di Telegram. + requests.get("https://api.telegram.org/bot" + telegramtoken + "/sendLocation", params=parametri) + + +def sendchataction(to, type='typing'): + """Visualizza lo stato "sta scrivendo" del bot. + :param to: Chat in cui visualizzare lo stato + :param type: Tipo di stato da visualizzare + """ + # Parametri del messaggio + parametri = { + 'chat_id': to, + 'action': type, + } + # Manda la richiesta ai server di Telegram. + requests.get("https://api.telegram.org/bot" + telegramtoken + "/sendChatAction", params=parametri)