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
|
||||
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
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…
Reference in a new issue