Browse Source

ecowatt

master
nemesis 2 years ago
parent
commit
d1d1c4ba60
  1. 5
      asmodee.ini.sample
  2. 107
      asmodee.py

5
asmodee.ini.sample

@ -14,3 +14,8 @@ msender = user@domain.tld
mpass = password
msmtp = smtp
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

@ -15,12 +15,20 @@ import nio
from datetime import datetime,timedelta
import requests
from oauthlib.oauth2 import BackendApplicationClient
from requests_oauthlib import OAuth2Session
from requests.auth import HTTPBasicAuth
import html2text
import json
# Var
bot = None
PREFIX = '!'
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
admins = [] # Admins du bot
@ -204,6 +212,12 @@ def signal_handler(signal, frame): # Sauvegarder les données persistantes avant
save_obj(None,None)
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
def __init__(self,room,user,nick):
self.room = room
@ -1588,8 +1602,69 @@ async def actif(room,message): # Stats d'activité d'une personne
print("erreur usrstats")
else:
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é
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)
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)
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:
await msg(salon,"A venir",sender, False)
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"
if (cle[0] == rid and cle[1] == "mails" and valeur):
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):
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"
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
async def callActif(room, message):
match = botlib.MessageMatch(room, message, bot, PREFIX)
@ -1824,7 +1909,7 @@ def main():
USERNAME = "" # Bot's username
PASSWORD = "" # Bot's password
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
if ('AUTH' in config):
USERNAME = config['AUTH']['username'] # Bot's username
@ -1832,7 +1917,23 @@ def main():
SERVER = config['AUTH']['server'] # Matrix server URL
admins = config['AUTH']['admin'].split(",") # Admins du bot @admin1:host.tld,@admin2:host.tld,...
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
if ('MOD' in config):

Loading…
Cancel
Save