Skip to content
Extraits de code Groupes Projets
Valider d7570633 rédigé par Loïc Wikle DUBARD's avatar Loïc Wikle DUBARD
Parcourir les fichiers

bot fonctionnel à voir pour l'utilisation du token

parent 104e52fc
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
Affichage de
avec 306 ajouts et 93 suppressions
# CHANGELOG: # CHANGELOG:
## 19 aout 2019
**Ajout:**
- script bot.py quasi complet
---
## 17 aout 2019 ## 17 aout 2019
- Script useless/quizz.py complet - Script useless/quizz.py complet
......
bot.py 100644 → 100755
#!/usr/bin/python3 #!/usr/bin/python3
# https://fbchat.readthedocs.io/en/latest/examples.html
import fbchat from fbchat import log, Client
from getpass import getpass from getpass import getpass
from fbchat.models import *
import useless
import usefull
class Bot(Client):
def onMessage(self, author_id, message_object, thread_id, thread_type, **kwargs):
self.markAsDelivered(thread_id, message_object.uid)
self.markAsRead(thread_id)
log.info("{} from {} in {}".format(message_object, thread_id, thread_type.name))
to_send = Bot.tests(message_object.text, self.fetchThreadInfo(thread_id)[thread_id].name)
if (author_id != self.uid or 'A.N.U.B.I.S. :' not in message_object.text) and to_send is not None:
self.send(Message('A.N.U.B.I.S. :' + to_send), thread_id=thread_id, thread_type=thread_type)
@classmethod
def tests(self, texte, channel=''):
if texte == '!help':
help_text = 'Ce que je sais faire :\n \
!meteo <ville> ; <pays> ; <dans_n_heure(facultatif)>\n \
!wikipedia <truc_a_chercher>\n \
!useless \n \
!chuck \n\
!nordpress \n \
!quizz [start|new|reset|scoreboard] , not yet implemented\n \
!haddock \n \
!philo \n \
!pipo\n \
!kohlanta <nom>\n \
!rateau \n \
!maps <nom_du_lieu> <destination(facultatif)>, not yet fully fonctionnal\n \
!about -> vas-y test-moi !\n'
return help_text
if texte == '!useless':
return useless.useless()
if texte == '!nordpress':
return useless.nordpresse()
if texte == '!chuck':
return useless.chuck()
if texte == '!philo':
return useless.genererSujet()
if texte == '!haddock':
return useless.haddock()
if texte == '!kohlanta':
texte = texte.replace('!kohlanta ', '')
return useless.kohlanta(texte, channel)
if texte == '!pipo':
return useless.pipo()
if texte == '!rateau':
return useless.getRateau()
if '!meteo' in texte:
try:
texte = texte.replace('!meteo ', '').split(' ; ')
if len(texte) == 2:
return usefull.meteo_de(texte[0], texte[1])
else:
return usefull.meteo_de(texte[0], texte[1], dans_n_heures=texte[2])
except:
return 'Ousp, c\'est cassé...'
if '!wikipedia' in texte:
try:
texte = texte.replace('!wikipedia ', '')
return usefull.wiki(texte)
except:
return 'Ousp, j\'ai glissé chef...'
if '!maps' in texte:
try:
usefull.maps(texte.replace('!maps ', ''))
except:
return 'Houston, on a un problème...'
if texte == '!about':
return 'Hello, je suis A.N.U.B.I.S. A Not Usefull But Intelligent System, créé par le talentueux LawiK aka Wikle aka Cyborg aka Loïc Dub que je vénère !'
return None
if __name__ == '__main__':
username = str(input("Username: ")) username = str(input("Username: "))
client = fbchat.Client(username, getpass()) client = Bot(username, getpass())
client.listen()
no_of_friends = int(input("Number of friends: "))
for i in range(no_of_friends):
name = str(input("Name: "))
friends = client.getUsers(name) # return a list of names
friend = friends[0]
msg = str(input("Message: "))
sent = client.send(friend.uid, msg)
if sent:
print("Message sent successfully!")
from flask import Blueprint
routes = Blueprint('routes', __name__)
from .auth import *
from .respond import *
\ No newline at end of file
from flask import Flask, request, jsonify, Response
import json
from . import routes
import requests
from pprint import pprint
VERIFY_TOKEN = 'kameronkales'
@routes.route("/auth", methods=['GET'])
def handle_verification():
if request.args['hub.verify_token'] == VERIFY_TOKEN:
return request.args['hub.challenge']
else:
return "Invalid verification token"
from flask import Flask, request, jsonify, Response
import json
from . import routes
import requests
from pprint import pprint
VERIFY_TOKEN = 'kameronkales'
ACCESS_TOKEN = 'EAAGZCfOZCdjZBwBANkL6JEMJ8BQodNR76c2HLpteN63F3phr4b9sqVjeGsapiCS1ZC5MzGJxXZA4dpLk6OHUZA0KJp1ZAnYaEijZBllkvbpnFCejFyCxj9y8nrCmjASxWTspIZAhBuEnWh3UBTOyJxGSDiZBAIxeKZBHiUeLcTBuZCkrHwZDZD'
def reply(user_id, msg):
data = {
"recipient": {"id": user_id},
"message": {"text": msg}
}
url = "https://graph.facebook.com/v2.6/me/messages?access_token={}".format(ACCESS_TOKEN)
resp = requests.post(url, json=data)
print(resp.content)
@routes.route("/auth", methods=['POST'])
def handle_incoming_messages():
data = request.json
sender = data['entry'][0]['messaging'][0]['sender']['id']
message = data['entry'][0]['messaging'][0]['message']['text']
reply(sender, message)
return "ok"
#!/usr/bin/python3
from flask import Flask, request, jsonify, Response
import json
from routes import *
app = Flask(__name__)
app.register_blueprint(routes)
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == "__main__":
app.run(debug=True, port=5000)
#!/usr/bin/python3
from .meteo import *
from .wiki import *
from .maps import *
\ No newline at end of file
Fichier ajouté
Fichier ajouté
Fichier ajouté
Fichier ajouté
#!/usr/bin/python3
'''
affiche une page maps avec un lieu rechercher
TODO : affiche un itinéraire sur maps
'''
def maps(location, dest=None):
location = ("+").join(location.split(" "))
return "https://www.google.nl/maps/place/" + location + "/&amp; >/dev/null"
if __name__ == '__main__':
lieu, dest = input('entrez un lieu/une destination>').split('/')
#!/usr/bin/python3
# donne la meteo
import requests
def var_name(var):
"""return the name of the variable var"""
for name, value in globals().items():
if value is var and name != "i":
return name
return '?????'
def printv(var):
'''
return the name of the variable var associated with the value of the var itself
exemple:
toto_is_toto = 'tata';printv(toto) returns the string : 'toto is toto : tata'
'''
return str(var_name(var).replace("_", " ") + ' : ' + var)
def meteo_de(villes="petite-ile", pay="RE", all_data=True, dans_n_heures=None):
global compris, ville, pays, lattitude, longitude, température,\
température_minimum, température_max, humidité, pression,\
vitesse_du_vent, direction_du_vent, nuages, \
description, volume_pluie_des_3_dernière_heures, \
volume_neige_des_3_dernière_heures
if dans_n_heures is not None:
return forecast(villes, pay, all_data, dans_n_heures=dans_n_heures)
pay = pay.upper()[:2]
api = "c23d0a0ffe081307fb6fbba06125aef3"
adresseid = "http://api.openweathermap.org/data/2.5/weather?q="
requette = requests.get("{}{},{}&appid={}".format(adresseid, "%20".join(villes.split(" ")), pay, api)).json()
try:
vitesse_du_vent = str(requette["wind"]["speed"]) + " m/s"
température = str(int(requette["main"]["temp"]) - 273) + "°"
température_max = "%d °C" % (int(requette["main"]["temp_max"]) - 273)
humidité = str(requette["main"]["humidity"]) + "%"
température_minimum = "%d °C" % (int(requette["main"]["temp_min"] - 273))
direction_du_vent = str(requette["wind"]["deg"]) + "°"
longitude = str(requette["coord"]["lon"])
lattitude = str(requette["coord"]["lat"])
pression = str(requette["main"]["pressure"]) + "hPa"
pays = str(requette["sys"]["country"])
ville = str(requette["name"])
nuages = str(requette["clouds"]["all"]) + "%"
description = str(requette["weather"][0]["description"])
except Exception as e:
return e
try:
volume_pluie_des_3_dernière_heures = str(requette["rain"]["3h"])
a1 = True
except:
a1 = False
try:
volume_neige_des_3_dernière_heures = str(requette["snow"]["3h"])
a2 = True
except:
a2 = False
if all_data:
liste = [pays,
ville,
lattitude, longitude,
température,
température_minimum, température_max,
humidité, pression, vitesse_du_vent,
direction_du_vent,
nuages, description]
else:
liste = [pays,
ville,
# lattitude, longitude,
température,
# température_minimum, température_max,
humidité, pression, vitesse_du_vent,
# direction_du_vent,
nuages, description]
result = ", ".join([printv(i) for i in liste])
if a1:
result += ' ' + printv(volume_pluie_des_3_dernière_heures)
if a2:
result += ' ' + printv(volume_neige_des_3_dernière_heures)
return result + '.'
def forecast(villes="petite-ile", pay="RE", all_data=True, dans_n_heures=None):
global compris, ville, pays, lattitude, longitude, température,\
temp_min, temp_max, humidité, pression,\
vent, direction, nuages, \
description, volume_pluie_des_3_dernière_heures, \
volume_neige_des_3_dernière_heures, date
pay = pay.upper()[:2]
api = "c23d0a0ffe081307fb6fbba06125aef3"
adresseid = "http://api.openweathermap.org/data/2.5/forecast?q="
requette = requests.get("{}{},{}&appid={}".format(adresseid, "%20".join(villes.split(" ")), pay, api)).json()
result = ''
result_dans_n_heure = ''
try:
pays = str(requette["city"]["country"])
ville = str(requette['city']["name"])
longitude = str(requette['city']["coord"]["lon"])
lattitude = str(requette['city']["coord"]["lat"])
except Exception as e:
return e
for i in range(len(requette['list'])):
try:
vent = str(requette['list'][i]["wind"]["speed"]) + " m/s"
température = str(int(requette['list'][i]['main']["temp"]) - 273) + "°"
temp_max = "%d °C" % (int(requette['list'][i]["main"]["temp_max"]) - 273)
humidité = str(requette['list'][i]["main"]["humidity"]) + "%"
temp_min = "%d °C" % (int(requette['list'][i]["main"]["temp_min"] - 273))
direction = str(requette['list'][i]["wind"]["deg"]) + "°"
pression = str(requette['list'][i]["main"]["pressure"]) + "hPa"
nuages = str(requette['list'][i]["clouds"]["all"]) + "%"
description = str(requette['list'][i]["weather"][0]["description"])
date = str(requette['list'][i]["dt_txt"])
except Exception as e:
return e
try:
volume_pluie_des_3_dernière_heures = str(requette['list'][i]["rain"]["3h"])
a1 = True
except:
a1 = False
try:
volume_neige_des_3_dernière_heures = str(requette['list'][i]["snow"]["3h"])
a2 = True
except:
a2 = False
if all_data:
liste = [date, température,
temp_min, temp_max,
humidité, pression, vent,
direction,
nuages, description]
else:
liste = [date, température,
# temp_min, temp_max,
humidité, pression, vent,
# direction,
nuages, description]
result += ", ".join([printv(i) for i in liste])
if dans_n_heures // 3 == i:
result_dans_n_heure = ", ".join([printv(i) for i in liste])
if a1:
result += ' ' + printv(volume_pluie_des_3_dernière_heures)
if dans_n_heures // 3 == i:
result_dans_n_heure += ' ' + printv(volume_pluie_des_3_dernière_heures)
if a2:
result += ' ' + printv(volume_neige_des_3_dernière_heures)
if dans_n_heures // 3 == i:
result_dans_n_heure += ' ' + printv(volume_neige_des_3_dernière_heures)
result += '\n\n'
if dans_n_heures is not None:
return result_dans_n_heure
return result
if __name__ == '__main__':
import sys
if len(sys.argv) == 3:
print(meteo_de(sys.argv[1], sys.argv[2]))
else:
print(meteo_de())
print(forecast(dans_n_heures=24))
#!/usr/bin/python3
# wikipedia
import wikipedia
def wiki(texte, lang='fr'):
global topics
wikipedia.set_lang(lang)
topics = []
try:
page = wikipedia.page(texte)
texte1 = page.summary
return texte1.encode().decode('utf-8').encode('cp850', 'ignore').decode('cp850')
except:
topics = wikipedia.search(texte)
texte1 = "Vous voulez dire : " + ", ".join(topics)
return texte1.encode().decode('utf-8').encode('cp850', 'ignore').decode('cp850')
if __name__ == '__main__':
print(wiki(input('vas-y donne un truc a chercher sr le wiki ? : ')))
...@@ -7,4 +7,5 @@ from .nordpresse import nordpresse ...@@ -7,4 +7,5 @@ from .nordpresse import nordpresse
from .philotron import genererSujet from .philotron import genererSujet
from .pipotron import pipo from .pipotron import pipo
from .haddock import haddock from .haddock import haddock
from .quizz import quizz from .quizz import Quizz
from .kohlanta import *
\ No newline at end of file
Aucun aperçu pour ce type de fichier
Aucun aperçu pour ce type de fichier
Aucun aperçu pour ce type de fichier
Fichier ajouté
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter