generated from Nemesis/Exemple
ecowatt
This commit is contained in:
parent
60ae4dfb86
commit
d1d1c4ba60
2 changed files with 109 additions and 3 deletions
|
@ -14,3 +14,8 @@ msender = user@domain.tld
|
||||||
mpass = password
|
mpass = password
|
||||||
msmtp = smtp
|
msmtp = smtp
|
||||||
mport = port
|
mport = port
|
||||||
|
|
||||||
|
[RTE]
|
||||||
|
client_id = id
|
||||||
|
client_secret = secret
|
||||||
|
call_url = https://digital.iservices.rte-france.com/open_api/ecowatt/v4/signals
|
||||||
|
|
107
asmodee.py
107
asmodee.py
|
@ -15,12 +15,20 @@ import nio
|
||||||
|
|
||||||
from datetime import datetime,timedelta
|
from datetime import datetime,timedelta
|
||||||
import requests
|
import requests
|
||||||
|
from oauthlib.oauth2 import BackendApplicationClient
|
||||||
|
from requests_oauthlib import OAuth2Session
|
||||||
|
from requests.auth import HTTPBasicAuth
|
||||||
import html2text
|
import html2text
|
||||||
|
import json
|
||||||
|
|
||||||
# Var
|
# Var
|
||||||
bot = None
|
bot = None
|
||||||
PREFIX = '!'
|
PREFIX = '!'
|
||||||
USERNAME = ""
|
USERNAME = ""
|
||||||
|
oauth = None #Appels RTE
|
||||||
|
#ecowatt_url = 'https://digital.iservices.rte-france.com/open_api/ecowatt/v4/sandbox/signals'
|
||||||
|
ecowatt_url = 'https://digital.iservices.rte-france.com/open_api/ecowatt/v4/signals'
|
||||||
|
wattobj = None
|
||||||
|
|
||||||
# Listes et dictionnaires
|
# Listes et dictionnaires
|
||||||
admins = [] # Admins du bot
|
admins = [] # Admins du bot
|
||||||
|
@ -204,6 +212,12 @@ def signal_handler(signal, frame): # Sauvegarder les données persistantes avant
|
||||||
save_obj(None,None)
|
save_obj(None,None)
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
|
class Wattobject: # Cache du service ecowatt
|
||||||
|
def __init__(self):
|
||||||
|
self.jour = 19000101
|
||||||
|
self.heure = 0
|
||||||
|
self.signals = None
|
||||||
|
|
||||||
class Userstats: #Pour garder des stats sur les users
|
class Userstats: #Pour garder des stats sur les users
|
||||||
def __init__(self,room,user,nick):
|
def __init__(self,room,user,nick):
|
||||||
self.room = room
|
self.room = room
|
||||||
|
@ -1588,8 +1602,69 @@ async def actif(room,message): # Stats d'activité d'une personne
|
||||||
print("erreur usrstats")
|
print("erreur usrstats")
|
||||||
else:
|
else:
|
||||||
await msg(room,pers + " : Personne non reconnue\n",sender)
|
await msg(room,pers + " : Personne non reconnue\n",sender)
|
||||||
|
|
||||||
|
def getNiveau(niveau):
|
||||||
|
if (niveau == 1):
|
||||||
|
return("vert")
|
||||||
|
elif (niveau == 2):
|
||||||
|
return("orange")
|
||||||
|
elif (niveau == 3):
|
||||||
|
return("rouge")
|
||||||
|
else:
|
||||||
|
return("Inconnu")
|
||||||
|
|
||||||
|
async def ecowatt(room, message):
|
||||||
|
global modules
|
||||||
|
try:
|
||||||
|
rmod = modules[room.room_id, 'ecowatt']
|
||||||
|
except:
|
||||||
|
modules[room.room_id, 'ecowatt'] = False
|
||||||
|
if (modules[room.room_id, 'ecowatt']):
|
||||||
|
args = getMessage(message).split()
|
||||||
|
sender = getUser(message)
|
||||||
|
jn = int(datetime.today().strftime("%Y%m%d"))
|
||||||
|
hn = int(datetime.today().strftime("%H"))
|
||||||
|
signals = None
|
||||||
|
global wattobj
|
||||||
|
if (wattobj.jour < jn or (wattobj.jour == jn and wattobj.heure + 1 < hn)):
|
||||||
|
result = oauth.get(ecowatt_url)
|
||||||
|
watt = json.loads(result.text)
|
||||||
|
sign = watt["signals"]
|
||||||
|
signals = sorted(sign, key=lambda signal: signal["jour"][0:10])
|
||||||
|
wattobj.jour = jn
|
||||||
|
wattobj.heure = hn
|
||||||
|
wattobj.signals = signals
|
||||||
|
else:
|
||||||
|
signals = wattobj.signals
|
||||||
|
args.pop(0)
|
||||||
|
mess = ""
|
||||||
|
if (len(args) > 0 and args[0] == "details"):
|
||||||
|
i=False
|
||||||
|
for jour in signals:
|
||||||
|
if (jour["dvalue"] > 1):
|
||||||
|
if (i):
|
||||||
|
mess = mess + "\n"
|
||||||
|
i=True
|
||||||
|
mess = mess + jour["jour"][0:10] + " : " + jour["message"]
|
||||||
|
heures = sorted(jour["values"], key=lambda h: h["pas"])
|
||||||
|
for heure in heures:
|
||||||
|
if (heure["hvalue"] > 1):
|
||||||
|
alerte = getNiveau(heure["hvalue"])
|
||||||
|
mess = mess + "\n" + str(heure["pas"]) + "h : niveau " + alerte
|
||||||
|
if (len(mess) < 10):
|
||||||
|
mess = "Aucune alerte sur le réseau RTE dans les trois prochains jours."
|
||||||
|
elif (len(args) > 0 and args[0].isnumeric()):
|
||||||
|
j = int(args[0])
|
||||||
|
if (len(signals) > j):
|
||||||
|
jour = signals[j]
|
||||||
|
alerte = getNiveau(jour["dvalue"])
|
||||||
|
mess = mess + "La météo RTE du " + jour["jour"][0:10] + " est de niveau " + alerte + " (" + jour["message"] + ")\n"
|
||||||
|
else:
|
||||||
|
for jour in signals:
|
||||||
|
alerte = getNiveau(jour["dvalue"])
|
||||||
|
mess = mess + "La météo RTE du " + jour["jour"][0:10] + " est de niveau " + alerte + " (" + jour["message"] + ")\n"
|
||||||
|
await msg(room, mess, sender)
|
||||||
|
|
||||||
async def help(room, message): # Aide en message privé
|
async def help(room, message): # Aide en message privé
|
||||||
await help_center(room,message,"help",True)
|
await help_center(room,message,"help",True)
|
||||||
|
|
||||||
|
@ -1649,6 +1724,8 @@ async def help_center(room,message,name,private): # Aide sur les commandes dispo
|
||||||
await msg(salon,"- !module : Affiche la liste des modules actifs sur le salon ainsi que celle des modules disponibles\n- !module add <module> : Active un module sur le salon\n- !module del <module> : Désactive un module sur le salon.",sender, False)
|
await msg(salon,"- !module : Affiche la liste des modules actifs sur le salon ainsi que celle des modules disponibles\n- !module add <module> : Active un module sur le salon\n- !module del <module> : Désactive un module sur le salon.",sender, False)
|
||||||
elif (re.search("cristal", args[0])):
|
elif (re.search("cristal", args[0])):
|
||||||
await msg(salon,"- !cristal : Réponds à une question posée commençant par Est-ce, Combien, Pourquoi, Quand, Comment, Où et se terminant par un point d'interrogation.",sender, False)
|
await msg(salon,"- !cristal : Réponds à une question posée commençant par Est-ce, Combien, Pourquoi, Quand, Comment, Où et se terminant par un point d'interrogation.",sender, False)
|
||||||
|
elif (re.search("ecowatt", args[0])):
|
||||||
|
await msg(salon,"- !ecowatt : Météo RTE des prochains jours.\n- !ecowatt 0-3 : Météo RTE d'une journée entre J et J+3.\n- !ecowatt details : Météo RTE des prochains jours, chaque heure orange ou rouge spécifiquement.",sender, False)
|
||||||
else:
|
else:
|
||||||
await msg(salon,"A venir",sender, False)
|
await msg(salon,"A venir",sender, False)
|
||||||
else:
|
else:
|
||||||
|
@ -1679,11 +1756,19 @@ async def help_center(room,message,name,private): # Aide sur les commandes dispo
|
||||||
message += "\n- !titre <url> : retourne le titre de la page en paramètre si celle ci possède une balise titre"
|
message += "\n- !titre <url> : retourne le titre de la page en paramètre si celle ci possède une balise titre"
|
||||||
if (cle[0] == rid and cle[1] == "mails" and valeur):
|
if (cle[0] == rid and cle[1] == "mails" and valeur):
|
||||||
message += "\n- !mail : s'abonner aux messages du salon par mail."
|
message += "\n- !mail : s'abonner aux messages du salon par mail."
|
||||||
|
if (cle[0] == rid and cle[1] == "ecowatt" and valeur):
|
||||||
|
message += "\n- !ecowatt : Météo des prochains jours du réseau électrique RTE."
|
||||||
if (cle[0] == rid and cle[1] == "roll" and valeur):
|
if (cle[0] == rid and cle[1] == "roll" and valeur):
|
||||||
message += "\n- :roll <options> <des>\n- :sw <options> <des>\n- :dom <options> <des>\n- :wod <options> <des>\n- :owod <options> <des>\n- :ars <options> <des>\n- :des <options> <des>\n- :star <options> <des>"
|
message += "\n- :roll <options> <des>\n- :sw <options> <des>\n- :dom <options> <des>\n- :wod <options> <des>\n- :owod <options> <des>\n- :ars <options> <des>\n- :des <options> <des>\n- :star <options> <des>"
|
||||||
message += "\n- !modo : Gère les modérateurs du salon\n- !module : Gère les modules actifs sur le salon\n\n- Pour plus de details, tapez !" + name + " <commande>\n\nRetrouvez Asmodee sur https://git.ombreport.info/nemesis/asmodee_matrix"
|
message += "\n- !modo : Gère les modérateurs du salon\n- !module : Gère les modules actifs sur le salon\n\n- Pour plus de details, tapez !" + name + " <commande>\n\nRetrouvez Asmodee sur https://git.ombreport.info/nemesis/asmodee_matrix"
|
||||||
await msg(salon,message,sender, False)
|
await msg(salon,message,sender, False)
|
||||||
|
|
||||||
|
@bot.listener.on_message_event
|
||||||
|
async def callEcowatt(room, message):
|
||||||
|
match = botlib.MessageMatch(room, message, bot, PREFIX)
|
||||||
|
if match.is_not_from_this_bot() and match.prefix() and match.command("ecowatt"):
|
||||||
|
await ecowatt(room, message)
|
||||||
|
|
||||||
@bot.listener.on_message_event
|
@bot.listener.on_message_event
|
||||||
async def callActif(room, message):
|
async def callActif(room, message):
|
||||||
match = botlib.MessageMatch(room, message, bot, PREFIX)
|
match = botlib.MessageMatch(room, message, bot, PREFIX)
|
||||||
|
@ -1824,7 +1909,7 @@ def main():
|
||||||
USERNAME = "" # Bot's username
|
USERNAME = "" # Bot's username
|
||||||
PASSWORD = "" # Bot's password
|
PASSWORD = "" # Bot's password
|
||||||
SERVER = "" # Matrix server URL
|
SERVER = "" # Matrix server URL
|
||||||
mods = ["roll", "quote", "biere", "stats", "liste", "horloge", "carte", "card", "cristal", "welcome", "salut", "jdr", "gens", "va", "salon", "kick", "mails", "titre", "invididious"]
|
mods = ["roll", "quote", "biere", "stats", "liste", "horloge", "carte", "card", "cristal", "welcome", "salut", "jdr", "gens", "va", "salon", "kick", "mails", "titre", "invididious", "ecowatt"]
|
||||||
global admins
|
global admins
|
||||||
if ('AUTH' in config):
|
if ('AUTH' in config):
|
||||||
USERNAME = config['AUTH']['username'] # Bot's username
|
USERNAME = config['AUTH']['username'] # Bot's username
|
||||||
|
@ -1832,7 +1917,23 @@ def main():
|
||||||
SERVER = config['AUTH']['server'] # Matrix server URL
|
SERVER = config['AUTH']['server'] # Matrix server URL
|
||||||
admins = config['AUTH']['admin'].split(",") # Admins du bot @admin1:host.tld,@admin2:host.tld,...
|
admins = config['AUTH']['admin'].split(",") # Admins du bot @admin1:host.tld,@admin2:host.tld,...
|
||||||
else:
|
else:
|
||||||
print("Probleme de lecture de configuration asmodee.ini")
|
print("Probleme de lecture de configuration asmodee.ini (AUTH)")
|
||||||
|
|
||||||
|
RTE_ID = None # Bot's RTE ID
|
||||||
|
RTE_SECRET = None # Bot's RTE SECRET
|
||||||
|
if ('RTE' in config):
|
||||||
|
global oauth
|
||||||
|
global wattobj
|
||||||
|
RTE_ID = config['RTE']['client_id'] # Bot's username
|
||||||
|
RTE_SECRET = config['RTE']['client_secret'] # Bot's password
|
||||||
|
auth = HTTPBasicAuth(RTE_ID, RTE_SECRET)
|
||||||
|
client = BackendApplicationClient(client_id=RTE_ID)
|
||||||
|
oauth = OAuth2Session(client=client)
|
||||||
|
token = oauth.fetch_token(token_url='https://digital.iservices.rte-france.com/token/oauth/', auth=auth)
|
||||||
|
wattobj = Wattobject()
|
||||||
|
|
||||||
|
else:
|
||||||
|
print("Probleme de lecture de configuration asmodee.ini (RTE)")
|
||||||
|
|
||||||
global liste_mod
|
global liste_mod
|
||||||
if ('MOD' in config):
|
if ('MOD' in config):
|
||||||
|
|
Loading…
Reference in a new issue