Un semplice bot per l meteo# Immetti il messaggio di commit per le modifiche. Le righe che iniziano
This commit is contained in:
parent
80e951dec4
commit
15b835bcca
1 changed files with 59 additions and 0 deletions
59
meteobot.py
Normal file
59
meteobot.py
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
## MeteoBot v. 0.1
|
||||||
|
## Autore Mario Sabatino
|
||||||
|
## e-mail: mario@sabatino.pro
|
||||||
|
## jid xmpp: mario@sabatino.pro
|
||||||
|
## Questo software viene rilasciato con la licenza GPL3
|
||||||
|
##
|
||||||
|
## Ringraziamenti:
|
||||||
|
## Questo software è stato sviluppato con il supporto di ChatGPT, un modello di intelligenza artificiale sviluppato da OpenAI.
|
||||||
|
##
|
||||||
|
#################################################################################################################################
|
||||||
|
|
||||||
|
import slixmpp
|
||||||
|
import requests
|
||||||
|
import logging
|
||||||
|
|
||||||
|
class WeatherBot(slixmpp.ClientXMPP):
|
||||||
|
def __init__(self, jid, password, room, nick):
|
||||||
|
super().__init__(jid, password)
|
||||||
|
self.room = room
|
||||||
|
self.nick = nick
|
||||||
|
self.add_event_handler("session_start", self.start)
|
||||||
|
self.add_event_handler("groupchat_message", self.muc_message)
|
||||||
|
|
||||||
|
def start(self, event):
|
||||||
|
self.get_roster()
|
||||||
|
self.send_presence()
|
||||||
|
self.plugin['xep_0045'].join_muc(self.room, self.nick)
|
||||||
|
|
||||||
|
def muc_message(self, msg):
|
||||||
|
if msg['mucnick'] != self.nick and msg['body'].startswith('!'):
|
||||||
|
city_name = msg['body'][1:]
|
||||||
|
weather = self.get_weather(city_name)
|
||||||
|
self.send_message(mto=msg['from'].bare, mbody=weather, mtype='groupchat')
|
||||||
|
|
||||||
|
def get_weather(self, city_name):
|
||||||
|
api_key = "apikey"
|
||||||
|
url = f"http://api.openweathermap.org/data/2.5/weather?q={city_name}&appid={api_key}&units=metric"
|
||||||
|
response = requests.get(url).json()
|
||||||
|
|
||||||
|
# Assicurati di gestire errori e dati mancanti qui
|
||||||
|
weather = response['weather'][0]['description']
|
||||||
|
temperature = response['main']['temp']
|
||||||
|
return f"Weather in {city_name}: {weather}, {temperature}°C"
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
jid = "user@nameserver.tld"
|
||||||
|
password = "password"
|
||||||
|
room = "name@conference.nameserver.tld"
|
||||||
|
nick = "MeteoBot"
|
||||||
|
|
||||||
|
# Creazione dell'istanza del bot e registrazione dei plugin necessari
|
||||||
|
xmpp = WeatherBot(jid, password, room, nick)
|
||||||
|
xmpp.register_plugin('xep_0030') # Service Discovery
|
||||||
|
xmpp.register_plugin('xep_0045') # Multi-User Chat
|
||||||
|
xmpp.register_plugin('xep_0199') # XMPP Ping
|
||||||
|
|
||||||
|
# Connessione del bot al server XMPP e avvio del processo
|
||||||
|
xmpp.connect()
|
||||||
|
xmpp.process(forever=False)
|
Loading…
Reference in a new issue