2015-10-07 08:49:14 +00:00
# -*- coding: utf-8 -*-
2016-03-04 14:29:26 +00:00
import json
2016-02-01 16:31:03 +00:00
import time
import filemanager
2015-10-03 16:41:34 +00:00
import telegram
import steam
2015-10-08 16:39:56 +00:00
import random
2015-11-16 21:55:47 +00:00
import osu
2016-02-14 14:47:53 +00:00
import lol
2016-07-19 10:26:55 +00:00
import discord
2016-09-24 19:15:19 +00:00
import subprocess
2016-10-02 18:24:02 +00:00
import sm . steammatch as steammatch
2016-10-03 07:54:00 +00:00
import db
2017-01-19 19:52:53 +00:00
import cairosvg
2016-02-14 15:19:26 +00:00
2016-02-01 16:31:03 +00:00
# Elenco di username dei membri della RYG
2016-10-03 14:02:24 +00:00
royalgames = json . loads ( filemanager . readfile ( " db.json " ) )
2016-01-21 19:47:25 +00:00
2016-03-04 13:40:19 +00:00
# Stringa dove mettere l'elenco di champion di lol gratuiti
lolfreestring = str ( )
2017-02-20 11:51:00 +00:00
# Elenco dello stagismo
stagismo = [ " dello stagista " , " degli sposi " , " di Santinelli " , " di Sensei " , " di Steffo " , " di Spaggia " ,
" della sedia " , " di Satana " , " del Sangue (degli occhi di Adry) " , " del Sale " ,
" del Serpente " , " della Samsung " , " di /smecds " , " della succursale " , " di succ " ,
" di Sans " , " di [SiivaGunner](https://www.youtube.com/channel/UC9ecwl3FTG66jIKA9JRDtmg) " ,
" di saaaaaas " , " del semaforo " , " della Seriale " , " di Sistemi " , " della Supercell " ,
2017-02-24 17:35:46 +00:00
" di Santaclaus " , " dei Sims " , " dei Santi " , " di SES2017 " , " di Salvini " , " della scolopendra " ]
2017-02-20 11:51:00 +00:00
2015-11-23 16:18:08 +00:00
random . seed ( )
2016-09-24 19:15:19 +00:00
2016-08-24 06:40:21 +00:00
# Spostiamo qui le funzioni del bot, così è un po' più leggibile
def wow ( ) :
print ( " @ " + username + " : WOW! " )
telegram . sendmessage ( " Wow. Impressionante. " , sentin , source )
def ahnonlosoio ( ) :
print ( " @ " + username + " : /ahnonlosoio " )
# Rispondi con Ah, non lo so nemmeno io.
telegram . sendmessage ( " Ah, non lo so nemmeno io! " , sentin , source )
def ciaostefanino ( ) :
print ( " @ " + username + " : /ciaostefanino " )
# Rispondi salutando Stefanino.
telegram . sendmessage ( " Ciao Stefanino! " , sentin , source )
2016-10-01 22:15:02 +00:00
if username != " Steffo " :
telegram . sendmessage ( " Steffo dice: \n \" Me la pagherai! \" " , fromuser , source )
else :
telegram . sendmessage ( " Sei improvvisamente impazzito o cosa? " , fromuser , source )
2016-08-24 06:40:21 +00:00
def ciaoruozi ( ) :
print ( " @ " + username + " : /ciaoruozi " )
# Ciao Ruozi.
if username . lower ( ) == " ruozir " :
2016-09-21 13:35:07 +00:00
# Manda un messaggio casuale tra quelli nella lista
chosen_msg = random . sample ( [ " Ciao me! " ,
" Ciao ciao ciao! " ,
2016-10-01 22:11:28 +00:00
" 1 ciaoruozi = 1000€ per me " ,
" Ruozi si dice: #CiaoRuozi " ,
" Ciao eh me! " ,
" Ehi me, ma ciao! " ,
" Ma ciao me stesso! " ,
" Me me me! Ciao! " ] , 1 ) [ 0 ]
2016-09-21 13:35:07 +00:00
telegram . sendmessage ( chosen_msg , sentin , source )
2016-08-24 06:40:21 +00:00
else :
2016-09-21 13:35:07 +00:00
# Manda un messaggio casuale tra quelli nella lista
chosen_msg = random . sample ( [ " Ciao Ruozi! " ,
" Ciao ciao ciao! " ,
" 1 ciaoruozi = 1 prayer " ,
" La RYG dice: #CiaoRuozi " ,
2016-10-01 22:11:28 +00:00
" Ciao eh Ruozi! " ,
" Ehi Ruozi, ma ciao! " ,
" Ma ciao Ruozi! " ,
" Ruozi ruozi ruozi! Ciao! " ] , 1 ) [ 0 ]
2016-09-21 13:35:07 +00:00
telegram . sendmessage ( chosen_msg , sentin , source )
2016-08-24 06:40:21 +00:00
2016-09-07 15:46:36 +00:00
def ombromanto ( ) :
print ( " @ " + username + " : /ombromanto " )
# Ma chi è ombromanto?
2016-09-21 13:36:44 +00:00
telegram . sendmessage ( " Ombromanto è @Dailir! " , sentin , source )
2016-09-07 15:46:36 +00:00
2016-09-21 13:56:39 +00:00
def steamplayers ( ) :
print ( " @ " + username + " : /steamplayers " )
2016-08-24 06:40:21 +00:00
# Informa Telegram che il messaggio è stato ricevuto e visualizza Royal Bot sta scrivendo.
telegram . sendchataction ( sentin )
# Se è stato specificato un AppID...
if len ( cmd ) > = 2 :
2017-01-15 14:16:22 +00:00
n = steam . getnumberofcurrentplayers ( cmd [ 1 ] )
2016-08-24 06:40:21 +00:00
# Se viene ricevuta una risposta...
if n is None :
telegram . sendmessage ( chr ( 9888 ) + " L ' app specificata non esiste! " , sentin , source )
else :
2017-01-15 14:16:22 +00:00
name = steam . getschemaforgame ( cmd [ 1 ] ) [ ' game ' ] [ ' gameName ' ]
2016-09-21 13:56:39 +00:00
telegram . sendmessage ( " In questo momento, * {n} * persone stanno giocando a "
" [ {name} ](https://steamdb.info/app/ {id} /graphs/). "
2017-01-15 14:16:22 +00:00
. format ( n = str ( n ) , name = name , id = cmd [ 1 ] ) , sentin , source )
2016-08-24 06:40:21 +00:00
else :
telegram . sendmessage ( chr ( 9888 ) + ' Non hai specificato un AppID! \n '
' La sintassi corretta è /playing <AppID>. ' , sentin , source )
def ehoh ( ) :
print ( " @ " + username + " : /ehoh " )
# Rispondi con Eh, oh. Sono cose che capitano.
2016-10-03 13:52:05 +00:00
telegram . sendmessage ( " Eh, oh. Sono cose che capitano. " , sentin , source )
2016-08-24 06:40:21 +00:00
def sbam ( ) :
print ( " @ " + username + " : /sbam " )
# Manda l'audio contenente gli sbam di tutti i membri Royal Games.
telegram . senddocument ( ' BQADAgADBwMAAh8GgAGSsR4rwmk_LwI ' , sentin )
def osucmd ( ) :
print ( " @ " + username + " : /osu " )
# Visualizza il punteggio più recente di osu!
# Informa Telegram che il messaggio è stato ricevuto.
telegram . sendchataction ( sentin )
# Trova il nome utente specificato
# Se è stato specificato un nome utente
if len ( cmd ) > = 2 :
# Trova la modalità
# 0 = osu!
# 1 = osu!taiko
# 2 = osu!catch
# 3 = osu!mania
# Se è stata specificata una modalità
if len ( cmd ) > = 3 :
# Modalità specificata
mode = int ( cmd [ 2 ] )
else :
# Imposta la modalità a osu!
mode = 0
# Prova a mandare una richiesta ai server di osu per l'ultima canzone giocata
try :
2017-01-15 14:16:22 +00:00
r = osu . getuserrecent ( cmd [ 1 ] , mode )
2016-08-24 06:40:21 +00:00
# Se la funzione restituisce un errore, riferisci su Telegram l'errore e previeni il crash.
except NameError :
telegram . sendmessage ( chr ( 9888 ) + " Errore nella richiesta ai server di Osu! " , sentin ,
source )
# Se tutto va bene, continua!
else :
# Se ci sono delle mod attive...
if " enabled_mods " in r :
mods = osu . listmods ( r [ ' enabled_mods ' ] )
else :
mods = " "
# Specifica cosa vuole dire il grado F e il grado X
if r [ ' rank ' ] == ' F ' :
r [ ' rank ' ] = ' Failed '
elif r [ ' rank ' ] == ' X ' :
r [ ' rank ' ] = ' Unranked '
if mode == 0 :
# Visualizza le informazioni relative alla modalità osu!
telegram . sendmessage ( " *osu!* \n "
" [Beatmap {0} ](https://osu.ppy.sh/b/ {0} ) \n "
" * {1} * \n "
" {2} \n "
" *Punti*: {3} \n "
" *Combo* x {4} \n "
" *300*: {5} \n "
" *100*: {6} \n "
" *50*: {7} \n "
" *Awesome*: {8} \n "
" *Good*: {9} \n "
" *Miss*: {10} "
. format ( r [ ' beatmap_id ' ] ,
r [ ' rank ' ] ,
mods ,
r [ ' score ' ] ,
r [ ' maxcombo ' ] ,
r [ ' count300 ' ] ,
r [ ' count100 ' ] ,
r [ ' count50 ' ] ,
r [ ' countgeki ' ] ,
r [ ' countkatu ' ] ,
r [ ' countmiss ' ] ) , sentin , source )
elif mode == 1 :
# Visualizza le informazioni relative alla modalità osu!taiko
telegram . sendmessage ( " *osu!taiko* \n "
" [Beatmap {0} ](https://osu.ppy.sh/b/ {0} ) \n "
" * {1} * \n "
" {2} \n "
" *Punti*: {3} \n "
" *Combo* x {4} \n "
" *Great*: {5} \n "
" *Good*: {6} \n "
" _Large_ *Great*: {7} \n "
" _Large_ *Good*: {8} \n "
" *Miss*: {9} "
. format ( r [ ' beatmap_id ' ] ,
r [ ' rank ' ] ,
mods ,
r [ ' score ' ] ,
r [ ' maxcombo ' ] ,
r [ ' count300 ' ] ,
r [ ' count100 ' ] ,
r [ ' countgeki ' ] ,
r [ ' countkatu ' ] ,
r [ ' countmiss ' ] ) , sentin , source )
elif mode == 2 :
# TODO: Cos'è successo qui?
# Visualizza le informazioni relative alla modalità osu!catch
telegram . sendmessage ( " *osu!catch* \n "
" [Beatmap " + r [ ' beatmap_id ' ] + " ]( " + ' https://osu.ppy.sh/b/ ' + r [
' beatmap_id ' ] +
" ) \n * " + r [ ' rank ' ] + " * \n " + mods +
" \n *Punti*: " + r [ ' score ' ] + " \n "
" *Combo* x " + r [ ' maxcombo ' ] + " \n "
" *Fruit*: " +
r [ ' count300 ' ] + " \n "
" *Droplet* _tick_: " + r [ ' count100 ' ] + " \n "
" *Droplet* _trail_: " +
r [ ' count50 ' ] + " \n "
" *Miss*: " + r [ ' countmiss ' ] , sentin , source )
elif mode == 3 :
# TODO: Cos'è successo qui?
# Visualizza le informazioni relative alla modalità osu!mania
telegram . sendmessage ( " *osu!mania* \n " +
" [Beatmap " + r [ ' beatmap_id ' ] + " ]( " + ' https://osu.ppy.sh/b/ ' + r [
' beatmap_id ' ] + " ) \n * " + r [ ' rank ' ] + " * \n " + mods +
" \n *Punti*: " + r [ ' score ' ] + " \n "
" *Combo* x " + r [ ' maxcombo ' ] + " \n "
" _Rainbow_ *300*: " +
r [ ' countgeki ' ] + " \n "
" *300*: " + r [ ' count300 ' ] + " \n "
" *100*: " + r [
' count100 ' ] + " \n "
" *200*: " + r [ ' countkatu ' ] + " \n "
" *50*: " + r [
' count50 ' ] + " \n "
" *Miss*: " + r [ ' countmiss ' ] , sentin , source )
else :
# TODO: Mettere a posto sto schifo.
if " osu " in royalgames [ username . lower ( ) ] :
r = osu . getuserrecent ( royalgames [ username . lower ( ) ] [ ' osu ' ] , 0 )
if " enabled_mods " in r :
mods = osu . listmods ( r [ ' enabled_mods ' ] )
else :
mods = " "
telegram . sendmessage ( " *osu!* \n "
" [Beatmap {0} ](https://osu.ppy.sh/b/ {0} ) \n "
" * {1} * \n "
" {2} \n "
" *Punti*: {3} \n "
" *Combo* x {4} \n "
" *300*: {5} \n "
" *100*: {6} \n "
" *50*: {7} \n "
" *Awesome*: {8} \n "
" *Good*: {9} \n "
" *Miss*: {10} "
. format ( r [ ' beatmap_id ' ] ,
r [ ' rank ' ] ,
mods ,
r [ ' score ' ] ,
r [ ' maxcombo ' ] ,
r [ ' count300 ' ] ,
r [ ' count100 ' ] ,
r [ ' count50 ' ] ,
r [ ' countgeki ' ] ,
r [ ' countkatu ' ] ,
r [ ' countmiss ' ] ) , sentin , source )
def roll ( ) :
print ( " @ " + username + " : /roll " )
# Se è stato specificato un numero
if len ( cmd ) > = 2 :
2017-01-15 14:16:22 +00:00
if cmd [ 1 ] == " tm " :
2016-09-24 18:34:27 +00:00
telegram . sendmessage ( " TM è così grassa che se la lanci rotola! " , sentin , source )
2016-08-24 06:40:21 +00:00
# Controlla che sia convertibile in un intero.
try :
2017-01-15 14:16:22 +00:00
m = int ( cmd [ 1 ] )
2016-08-24 06:40:21 +00:00
except ValueError :
2016-09-24 18:40:56 +00:00
telegram . sendmessage ( chr ( 9888 ) + " Il numero specificato non è un intero. " , sentin , source )
2016-08-24 06:43:26 +00:00
return
2016-08-24 06:40:21 +00:00
else :
# Imposta il numero massimo a 100.
m = 100
# Prova a generare un numero casuale.
if m == 34261891881215712181524122318242223183627453833 :
2016-09-21 14:08:12 +00:00
telegram . sendmessage ( " Numero casuale da 1 a _34261891881215712181524122318242223183627453833_: \n "
" *Frank è scarso* " , sentin , source )
2016-08-24 06:40:21 +00:00
else :
try :
n = random . randrange ( m ) + 1
except ValueError :
telegram . sendmessage ( chr ( 9888 ) + " Il numero specificato non è maggiore o uguale a 0. " ,
sentin , source )
# Se tutto va bene visualizza il numero generato
else :
telegram . sendmessage ( " Numero casuale da 1 a " + str ( m ) + " : \n * " + str ( n ) + " * " , sentin ,
source )
def cv ( ) :
2016-09-04 18:37:13 +00:00
print ( " @ " + username + " : /cv " )
2016-09-21 14:39:27 +00:00
# Ottieni i dati dal server della Royal Games
2016-08-24 06:40:21 +00:00
r = discord . getwidgetdata ( " 176353500710699008 " )
2016-09-21 14:39:27 +00:00
# Elenco di tutte le persone online su Discord
tosend = " *Online su Discord, nel server {servername} :* \n " . format ( servername = r [ ' name ' ] )
# Qui inizia il codice peggiore di sempre
2017-02-20 11:51:00 +00:00
# oddio cosa ho scritto
# aiuto
2016-08-24 06:40:21 +00:00
for member in r [ ' members ' ] :
m = dict ( )
if ' bot ' not in member or not member [ ' bot ' ] :
2016-09-21 14:39:27 +00:00
# Se una persona è connessa in chat vocale
2016-08-24 06:40:21 +00:00
if ' channel_id ' in member :
2016-09-21 14:39:27 +00:00
# Controlla il suo stato (esclusa, mutata, normale) e scegli l'emoji appropriata
2016-08-24 06:40:21 +00:00
if member [ ' deaf ' ] or member [ ' self_deaf ' ] :
2016-10-03 07:37:16 +00:00
m [ ' vemoji ' ] = chr ( 128263 )
2016-08-24 06:40:21 +00:00
elif member [ ' mute ' ] or member [ ' self_mute ' ] :
2016-10-03 07:37:16 +00:00
m [ ' vemoji ' ] = chr ( 128264 )
2016-08-24 06:40:21 +00:00
else :
2016-10-03 07:37:16 +00:00
m [ ' vemoji ' ] = chr ( 128266 )
2016-09-04 18:24:58 +00:00
m [ ' channelname ' ] = discord . getchannelname ( r , member [ ' channel_id ' ] )
2016-09-21 14:39:27 +00:00
# Altrimenti
2016-08-24 06:40:21 +00:00
else :
2016-10-03 07:37:16 +00:00
m [ ' vemoji ' ] = " "
2016-10-05 21:15:58 +00:00
# Controlla il suo stato (online, in gioco, afk) e scegli l'emoji appropriata
if member [ ' status ' ] == " online " :
m [ ' emoji ' ] = chr ( 128309 )
elif member [ ' status ' ] == " idle " :
m [ ' emoji ' ] = chr ( 9899 )
elif member [ ' status ' ] == " dnd " :
m [ ' emoji ' ] = chr ( 128308 )
else :
# Stato sconosciuto. Fallback nel caso in cui vengano aggiunti nuovi stati.
m [ ' emoji ' ] = chr ( 2573 )
2016-09-21 14:39:27 +00:00
# Aggiungi il nome del gioco a destra del nome
2016-08-24 06:40:21 +00:00
if ' game ' in member :
m [ ' gamename ' ] = member [ ' game ' ] [ ' name ' ]
2016-09-21 14:39:27 +00:00
# Visualizza il nickname se presente, altrimenti visualizza l'username
if ' nick ' in m :
member [ ' username ' ] = m [ ' nick ' ]
else :
m [ ' name ' ] = member [ ' username ' ]
2016-10-03 07:37:16 +00:00
tosend + = " {emoji} {name} " . format ( emoji = m [ ' emoji ' ] , name = m [ ' name ' ] )
2016-11-13 19:06:46 +00:00
if ' channelname ' in m :
2016-10-03 07:37:16 +00:00
tosend + = " | {vemoji} * {channelname} * " . format ( vemoji = m [ ' vemoji ' ] , channelname = m [ ' channelname ' ] )
2016-11-17 17:48:18 +00:00
if ' gamename ' in m :
tosend + = " | _ {gamename} _ " . format ( gamename = m [ ' gamename ' ] )
2016-10-03 07:37:16 +00:00
tosend + = " \n "
2016-09-04 18:02:41 +00:00
# Controlla se l'utente è royal music
2016-09-04 18:24:58 +00:00
elif member [ ' id ' ] == " 176358898851250176 " :
2016-09-04 18:02:41 +00:00
if ' game ' in member :
2016-11-17 17:49:27 +00:00
tosend + = " {emoji} * {channelname} * | {songname} \n " \
2016-09-04 18:35:45 +00:00
. format ( emoji = " \U0001F3B5 " , channelname = discord . getchannelname ( r , member [ ' channel_id ' ] ) ,
songname = member [ ' game ' ] [ ' name ' ] )
2016-08-24 06:40:21 +00:00
telegram . sendmessage ( tosend , sentin , source )
def online ( ) :
# Elenco di tutte le persone online su Steam
print ( " @ " + username + " : /online " )
2017-02-20 11:51:00 +00:00
telegram . sendmessage ( " _Funzione temporaneamente disattivata._ " , sentin , source )
2016-08-24 06:40:21 +00:00
# Informa Telegram che il messaggio è stato ricevuto.
2017-02-20 11:51:00 +00:00
# telegram.sendchataction(sentin)
# if len(cmd) >= 2:
# if cmd[1].lower() == "help":
# telegram.sendmessage(chr(128309) + " Online\n" +
# chr(128308) + " In gioco | Occupato\n" +
# chr(9899) + " Assente | Inattivo\n" +
# chr(128310) + " Disponibile per scambiare\n" +
# chr(128311) + " Disponibile per giocare", sentin, source)
# else:
# # Stringa utilizzata per ottenere informazioni su tutti gli utenti in una sola richiesta a steam
# userids = str()
# for membro in royalgames:
# if "steam" in royalgames[membro]:
# userids += str(royalgames[membro]["steam"]) + ','
# tosend = "*Su Steam ora:*\n"
# r = steam.getplayersummaries(userids)
# for player in r:
# # In gioco
# if 'gameextrainfo' in player:
# tosend += chr(128308) + " _" + player['gameextrainfo'] + "_ |"
# elif 'gameid' in player:
# tosend += chr(128308) + " _" + player['gameid'] + "_ |"
# # Online
# elif player['personastate'] == 1:
# tosend += chr(128309)
# # Occupato
# elif player['personastate'] == 2:
# tosend += chr(128308)
# # Assente o Inattivo
# elif player['personastate'] == 3 or player['personastate'] == 4:
# tosend += chr(9899)
# # Disponibile per scambiare
# elif player['personastate'] == 5:
# tosend += chr(128310)
# # Disponibile per giocare
# elif player['personastate'] == 6:
# tosend += chr(128311)
# if player['personastate'] != 0:
# tosend += " " + player['personaname'] + "\n"
# else:
# telegram.sendmessage(tosend, sentin, source)
2016-08-24 06:40:21 +00:00
def shrek ( ) :
# Manda l'audio So much to do, so much to see
print ( " @ " + username + " : /shrekt " )
telegram . senddocument ( " BQADBAADsQADiBjiAqYN-EBXASyhAg " , sentin )
def diario ( ) :
# Aggiungi una riga al diario Royal Games
print ( " @ " + username + " : /diario " )
if len ( cmd ) > 1 :
2017-01-15 14:21:43 +00:00
entry = text . split ( " " , 1 ) [ 1 ]
if entry . isprintable ( ) :
entry = entry . replace ( " \n " , " " )
2016-08-24 06:40:21 +00:00
fdiario = filemanager . readfile ( " diario.txt " )
2017-01-15 14:21:43 +00:00
fdiario + = str ( int ( time . time ( ) ) ) + " | " + entry + " \n "
2016-08-24 06:40:21 +00:00
filemanager . writefile ( " diario.txt " , fdiario )
telegram . sendmessage ( " Aggiunto al diario RYG. " , sentin , source )
else :
telegram . sendmessage ( chr ( 9888 ) + " Errore nella scrittura del messaggio. \n "
2016-09-22 21:03:33 +00:00
" Il messaggio non è compatibile con il diario. \n "
" Probabilmente contiene emoji o caratteri speciali non visualizzabili. " ,
sentin , source )
2016-08-24 06:40:21 +00:00
else :
telegram . sendmessage ( chr ( 9888 ) + " Non hai scritto niente sul diario! \n "
" Sintassi corretta: /diario _quello che vuoi scrivere_ " ,
sentin , source )
def leggi ( ) :
# Leggi dal diario Royal Games
print ( " @ " + username + " : /leggi " )
2017-02-20 10:58:30 +00:00
if len ( cmd ) == 1 :
telegram . sendmessage ( " [Apri il diario RYG](http://royal.steffo.me/diario.htm)! \n _(Puoi visualizzare un elemento casuale scrivendo /leggi random o leggere un elemento specifico con /leggi [numero])_ " , sentin , source )
2017-02-20 11:56:02 +00:00
elif cmd [ 1 ] == " random " :
2017-02-24 17:35:46 +00:00
fdiario = open ( " diario.txt " )
ldiario = fdiario . readlines ( )
n = random . randrange ( len ( ldiario ) )
entry = ldiario [ n ] . strip ( " \n " ) . split ( " | " )
telegram . sendmessage ( entry [ 1 ] , sentin , source )
fdiario . close ( )
else :
try :
index = int ( cmd [ 1 ] )
except ValueError :
telegram . sendmessage ( chr ( 9888 ) + " Il valore specificato non é un numero. " , sentin , source )
return
fdiario = open ( " diario.txt " )
ldiario = fdiario . readlines ( )
fdiario . close ( )
try :
entry = ldiario [ index ] . strip ( " \n " ) . split ( " | " )
except IndexError :
telegram . sendmessage ( chr ( 9888 ) + " Non esiste una citazione con quel numero. " , sentin , source )
return
2017-02-20 10:58:30 +00:00
telegram . sendmessage ( entry [ 1 ] , sentin , source )
2016-08-24 06:40:21 +00:00
def balurage ( ) :
print ( " @ " + username + " : /balurage " )
# Rispondi commentando l'E3.
2016-09-21 14:48:46 +00:00
tosend = str ( )
2016-10-14 20:58:53 +00:00
try :
ragelevel = int ( filemanager . readfile ( " ragelevel.txt " ) )
except ValueError :
ragelevel = 0
2016-09-21 14:48:46 +00:00
ragelevel + = 1
2016-10-14 21:03:17 +00:00
filemanager . writefile ( " ragelevel.txt " , str ( ragelevel ) )
2016-09-21 14:48:46 +00:00
for rage in range ( 0 , ragelevel ) :
tosend + = " MADDEN "
telegram . sendmessage ( tosend , sentin , source )
2016-08-24 06:40:21 +00:00
def lolfree ( ) :
# Visualizza i campioni gratuiti di LoL di questa settimana
print ( " @ " + username + " : /lolfree " )
# Informa Telegram che il messaggio è stato ricevuto.
telegram . sendchataction ( sentin )
ora = time . gmtime ( )
if len ( cmd ) > 1 :
2017-01-15 14:16:22 +00:00
refresh_requested = cmd [ 1 ] . startswith ( " refresh " )
2016-08-24 06:40:21 +00:00
else :
2016-09-21 14:49:16 +00:00
refresh_requested = False
2016-08-24 06:40:21 +00:00
# Controlla se i dati sono già stati scaricati.
2016-09-21 14:49:16 +00:00
global lolfreestring
if lolfreestring == " " or refresh_requested :
2016-08-24 06:40:21 +00:00
# Crea un nuovo set di dati.
print ( " Aggiornamento champ gratuiti di League of Legends... " )
lolfreestring = " Champion gratuiti del ` " + str ( ora . tm_mday ) + " / " + str ( ora . tm_mon ) + " / " + \
str ( ora . tm_year ) + " " + str ( ora . tm_hour ) + " : " + str ( ora . tm_min ) + " ` \n "
r = lol . getfreerotation ( )
for champion in r :
staticdata = lol . getchampionstaticdata ( champion [ ' id ' ] )
lolfreestring + = " * " + staticdata [ ' name ' ] + " * " + staticdata [ ' title ' ] + ' \n '
print ( " Completato. " )
telegram . sendmessage ( lolfreestring , sentin , source )
2016-09-21 15:03:22 +00:00
def getrygimage ( ) :
# Ricevi il link alla tua immagine del profilo Royal Games.
2016-09-21 15:10:10 +00:00
print ( " @ " + username + " : /getrygimage " )
2017-01-20 12:16:29 +00:00
cmd = text . split ( " " , 1 )
2017-01-19 19:56:37 +00:00
if len ( cmd ) > 1 :
if len ( cmd [ 1 ] ) > 2 :
telegram . sendmessage ( " Puoi mettere solo due lettere. " )
else :
2017-01-20 12:12:34 +00:00
# FIXME: percorsi assoluti
2017-02-15 10:46:11 +00:00
directory = " /var/www/html/rygimages/ {} .png " . format ( cmd [ 1 ] )
infile = open ( " basiclogo.svg " , " rb " )
# FIXME: possibile exploit qui
indata = infile . read ( ) . replace ( b " REPLACEME " , cmd [ 1 ] . encode ( " utf-8 " ) )
2017-01-20 12:10:58 +00:00
infile . close ( )
2017-01-19 20:01:26 +00:00
try :
2017-02-15 10:46:11 +00:00
outfile = open ( directory , " x " )
outfile . write ( " " )
2017-01-19 20:01:26 +00:00
outfile . close ( )
2017-02-15 10:46:11 +00:00
except FileExistsError :
2017-01-19 20:01:26 +00:00
pass
2017-02-15 10:46:11 +00:00
outfile = open ( directory , " wb " )
outdata = cairosvg . svg2png ( bytestring = indata )
print ( outdata )
outfile . write ( outdata )
2017-01-19 20:01:26 +00:00
outfile . close ( )
2017-01-19 19:56:37 +00:00
telegram . sendmessage ( " [Scarica](http://royal.steffo.me/rygimages/ {} .png) "
2017-02-20 10:58:30 +00:00
" la tua immagine del profilo Royal Games! \n _(Tanto non funziona.)_ " . format ( cmd [ 1 ] ) ,
2017-01-19 19:56:37 +00:00
sentin , source )
2016-09-21 15:03:22 +00:00
2016-09-24 18:30:41 +00:00
def ciaospaggia ( ) :
# Buongiorno, stellina!
print ( " @ " + username + " : /ciaospaggia " )
2016-09-24 18:47:00 +00:00
telegram . sendmessage ( " Ma buongiorno, [Stellina](https://telegram.me/doom_darth_vader)! " , sentin , source )
2016-09-24 18:30:41 +00:00
2016-09-24 18:34:27 +00:00
2016-09-21 15:10:10 +00:00
def smecds ( ) :
# Secondo me, è colpa...
print ( " @ " + username + " : /smecds " )
2017-02-20 11:51:00 +00:00
accusato = random . sample ( stagismo , 1 ) [ 0 ]
2016-09-21 15:13:29 +00:00
telegram . sendmessage ( " Secondo me è colpa {accusato} ... " . format ( accusato = accusato ) , sentin , source )
2016-09-21 15:10:10 +00:00
2016-09-24 19:15:19 +00:00
def version ( ) :
# Visualizza la versione di Royal Bot
# Solo per UNIX...?
print ( " @ " + username + " : /version " )
2016-09-24 19:53:22 +00:00
gitmsg = subprocess . check_output ( [ " git " , " describe " ] )
2016-09-24 19:51:31 +00:00
telegram . sendmessage ( gitmsg , sentin , source )
2016-09-24 19:15:19 +00:00
2016-10-02 18:19:57 +00:00
def match ( ) :
2016-10-14 21:14:26 +00:00
# Visualizza detutti i giochi condivisi tra x persone.
2016-10-02 18:19:57 +00:00
print ( " @ " + username + " : /match " )
2017-02-20 11:51:00 +00:00
telegram . sendmessage ( " _Funzione temporaneamente disattivata._ " , sentin , source )
2016-10-02 18:19:57 +00:00
# Informa Telegram che il messaggio è stato ricevuto.
2017-02-20 11:51:00 +00:00
# telegram.sendchataction(sentin)
# tobematched = list()
# if len(cmd) > 2:
# del cmd[0]
# for name in cmd:
# userdata = db.findbyname(name)
# if userdata is not None and 'steam' in userdata:
# if userdata['steam'] not in tobematched:
# tobematched.append(userdata['steam'])
# if len(tobematched) > 1:
# m = list(steammatch.and_games(tobematched))
# if len(m) > 0:
# # Prepara il messaggio
# tosend = "*Giochi in comune tra questi utenti:*\n"
# for game in m:
# tosend += "- {game}\n".format(game=game)
# # Manda il messaggio
# telegram.sendmessage(tosend, sentin, source)
# else:
# telegram.sendmessage("*Giochi in comune tra questi utenti:*\n_nessuno_", sentin, source)
# else:
# telegram.sendmessage(chr(9888) + "Non sono stati specificati abbastanza utenti per eseguire l'azione.",
# sentin, source)
2016-10-02 18:19:57 +00:00
2016-11-22 17:26:34 +00:00
def share ( ) :
# Visualizza detutti i giochi condivisi tra x persone.
print ( " @ " + username + " : /share " )
2017-02-20 11:51:00 +00:00
telegram . sendmessage ( " _Funzione temporaneamente disattivata._ " , sentin , source )
2016-11-22 17:26:34 +00:00
# Informa Telegram che il messaggio è stato ricevuto.
2017-02-20 11:51:00 +00:00
# telegram.sendchataction(sentin)
# tobematched = list()
# if len(cmd) > 2:
# del cmd[0]
# for name in cmd:
# userdata = db.findbyname(name)
# if userdata is not None and 'steam' in userdata:
# if userdata['steam'] not in tobematched:
# tobematched.append(userdata['steam'])
# if len(tobematched) == 2:
# tosend = str()
# # Giochi che ha il primo ma non il secondo
# d = list(steammatch.diff_games(tobematched[0], tobematched[1]))
# if len(d) > 0:
# # Prepara il messaggio
# tosend += "*Giochi che ha @{primo} ma non @{secondo}:*\n".format(primo=cmd[0], secondo=cmd[1])
# for game in d:
# tosend += "- {game}\n".format(game=game)
# else:
# tosend += "_@{secondo} ha tutti i giochi che ha @{primo}_.\n"
# telegram.sendmessage(tosend, sentin, source)
# else:
# telegram.sendmessage(chr(9888) + "Non è stato specificato un numero adeguato di utenti per eseguire l'azione.",
# sentin, source)
2016-11-22 17:26:34 +00:00
2016-11-17 18:26:50 +00:00
# Alias di tutti i comandi. Scrivendo quella stringa in chat viene attivata la funzione corrispondente.
aliases = {
" ahnonlosoio " : ahnonlosoio ,
" ahboh " : ahnonlosoio ,
" ciaostefanino " : ciaostefanino ,
" balurage " : balurage ,
" madden " : balurage ,
" ciaoruozi " : ciaoruozi ,
" ciaospaggia " : ciaospaggia ,
" buongiornostellina " : ciaospaggia ,
" stellina " : ciaospaggia ,
" ehoh " : ehoh ,
" sbam " : sbam ,
" rekt " : sbam ,
" osu " : osucmd ,
" roll " : roll ,
" cv " : cv ,
" discord " : cv ,
" shrek " : shrek ,
" diario " : diario ,
" d " : diario ,
" leggi " : leggi ,
" match " : match ,
" lolfree " : lolfree ,
" legoflegend " : lolfree ,
" getrygimage " : getrygimage ,
" version " : version ,
" smecds " : smecds ,
" online " : online ,
" steam " : online ,
2016-11-22 17:26:34 +00:00
" wow " : wow ,
" share " : share
2016-11-17 18:26:50 +00:00
}
2016-10-02 18:19:57 +00:00
2016-01-14 18:37:37 +00:00
# Ciclo principale del bot
2015-10-04 17:48:45 +00:00
print ( " Bot avviato! " )
2015-11-13 17:15:27 +00:00
while True :
2016-08-10 18:25:03 +00:00
try :
2016-09-21 15:10:10 +00:00
# Guarda il comando .
2016-08-10 18:25:03 +00:00
msg = telegram . getupdates ( )
# Se il messaggio non è una notifica di servizio...
if ' edit ' in msg :
if msg [ ' edit ' ] :
if ' text ' in msg [ ' edit_data ' ] :
# Salvatelo in una stringa
text = msg [ ' edit_data ' ] [ ' text ' ]
# Guarda l'ID della chat in cui è stato inviato
sentin = msg [ ' edit_data ' ] [ ' chat ' ] [ ' id ' ]
# ID del messaggio ricevuto
source = msg [ ' edit_data ' ] [ ' message_id ' ]
if ' username ' in msg [ ' edit_data ' ] [ ' from ' ] :
# Salva l'username se esiste
username = msg [ ' edit_data ' ] [ ' from ' ] [ ' username ' ]
2016-06-16 13:50:45 +00:00
else :
2016-08-10 18:25:03 +00:00
# Altrimenti, salva l'userID
username = str ( msg [ ' edit_data ' ] [ ' from ' ] [ ' id ' ] )
# Se sei un membro della Royal Games
2017-02-20 11:51:00 +00:00
if db . findbyname ( username ) in royalgames :
2016-08-10 18:25:03 +00:00
# Riconosci il comando.
if text . startswith ( ' wow ' ) :
2016-08-24 06:40:21 +00:00
wow ( )
2016-08-10 18:25:03 +00:00
if ' text ' in msg :
# Salvatelo in una stringa
text = msg [ ' text ' ]
# Guarda l'ID della chat in cui è stato inviato
sentin = msg [ ' chat ' ] [ ' id ' ]
2016-10-01 22:15:02 +00:00
# Persona che ha inviato il messaggio
fromuser = msg [ ' from ' ] [ ' id ' ]
2016-08-10 18:25:03 +00:00
# ID del messaggio ricevuto
source = msg [ ' message_id ' ]
# Nome da visualizzare nella console per capire chi accidenti è che invia messaggi strani
if ' username ' in msg [ ' from ' ] :
# Salva l'username se esiste
username = msg [ ' from ' ] [ ' username ' ]
else :
# Altrimenti, salva l'userID
username = str ( msg [ ' from ' ] [ ' id ' ] )
# Se sei un membro della Royal Games
2017-02-20 11:51:00 +00:00
if db . findbyname ( username ) :
2016-11-17 18:26:50 +00:00
# Riconosci il comando e dividilo in comando e argomenti.
cmd = text . lower ( ) . split ( " " )
# Togli il @RoyalBot alla fine del comando
2016-11-17 18:39:04 +00:00
cmd [ 0 ] = cmd [ 0 ] . replace ( " @royalbot " , " " ) . replace ( " / " , " " )
2016-11-17 18:26:50 +00:00
# Prova ad eseguire il comando. Se non è nella lista degli alias, ignoralo.
try :
aliases [ cmd [ 0 ] ] ( )
except KeyError :
print ( " @ " + username + " : comando inesistente " )
2017-02-20 11:51:00 +00:00
except Exception as e :
# Se durante l'esecuzione di un comando viene generato un errore, visualizzalo nella chat in cui è stato generato.
telegram . sendmessage ( chr ( 9762 ) + " *Errore durante l ' esecuzione del comando: \n * "
" {} \n \n "
" Secondo me, è colpa {} . " . format ( repr ( e ) , random . sample ( stagismo , 1 ) [ 0 ] ) , sentin , source )
print ( " \033 [1mERRORE: \n {} \033 [0m " . format ( repr ( e ) ) )
# Se sei in modalità debug, interrompi l'esecuzione
if __debug__ :
raise
2016-08-10 18:25:03 +00:00
else :
print ( " @ " + username + " bloccato. " )
2016-08-24 06:22:31 +00:00
except Exception as e :
2017-02-20 11:51:00 +00:00
# Se la fase iniziale causa un errore, mandalo nel gruppo Royal Games.
2016-09-21 14:52:42 +00:00
telegram . sendmessage ( chr ( 9762 ) + " *Errore critico: \n * "
2017-02-20 11:51:00 +00:00
" {} \n \n "
" Secondo me, è colpa {} . " . format ( repr ( e ) , random . sample ( stagismo , 1 ) [ 0 ] ) , - 2141322 )
2016-09-29 12:03:19 +00:00
print ( " \033 [1mERRORE CRITICO: \n "
" {0} \033 [0m " . format ( repr ( e ) ) )
2017-02-20 11:51:00 +00:00
# Se sei in modalità debug, interrompi l'esecuzione
2017-02-20 10:58:30 +00:00
if __debug__ :
raise