· 5 years ago · Jul 11, 2020, 09:10 PM
1import logging
2
3from aiogram import Bot, Dispatcher, executor, types
4
5from pyowm import OWM
6from pyowm.utils.config import get_default_config
7
8import sqlite3
9
10import threading
11
12from config import *
13
14# ------------------------- ІНІЦІАЛІЗАЦІЯ -------------------------
15# ------------------------- LOGGING
16logging.basicConfig(level=logging.INFO)
17# ------------------------- AIOGRAM
18bot = Bot(token=TelegramToken)
19dp = Dispatcher(bot)
20# ------------------------- PYOWM
21config_dict = get_default_config()
22config_dict['language'] = 'ua, uk'
23owm = OWM(OpenWeatherMapToken, config_dict)
24mgr = owm.weather_manager()
25observation = mgr.weather_at_place("Львів")
26w = observation.weather
27# ------------------------- SQLITE3
28DataBase = sqlite3.connect("DataBase.db")
29
30Cursor = DataBase.cursor()
31
32Cursor.executescript("""CREATE TABLE IF NOT EXISTS Users(Id TEXT, Notification BOOLEAN);
33CREATE TABLE IF NOT EXISTS Weather(Weather TEXT, MinTemp REAL, Temp REAL, MaxTemp REAL);""")
34
35DataBase.commit()
36
37
38# ------------------------- ФУНКЦІЇ -------------------------
39def Weather():
40 Clouds = w.status
41 MinTemp = w.temperature("celsius")["temp_min"]
42 Temp = w.temperature("celsius")["temp"]
43 MaxTemp = w.temperature("celsius")["temp_max"]
44
45 DataBase = sqlite3.connect("DataBase.db")
46
47 Cursor = DataBase.cursor()
48
49 Cursor.execute("DROP TABLE IF EXISTS Weather")
50 DataBase.commit()
51
52 Cursor.execute("CREATE TABLE IF NOT EXISTS Weather(Weather TEXT, MinTemp REAL, Temp REAL, MaxTemp REAL)")
53 DataBase.commit()
54
55 Cursor.execute(f"SELECT Weather FROM Weather")
56 if Cursor.fetchone() is None:
57 Cursor.execute(f"INSERT INTO Weather VALUES(?, ?, ?, ?)", (Clouds, MinTemp, Temp, MaxTemp))
58 DataBase.commit()
59
60
61# ------------------------- БОТ -------------------------
62@dp.message_handler(commands=["start"])
63async def send_welcome(message: types.Message):
64 await bot.send_message(message.from_user.id, """Вітаю.
65Я допоможу Вам спостерігати за погодою у м.Львів.
66Я завжди повідомлю Вас про зміну погоди.
67
68Щоб дізнатися список команд, введіть: /help""")
69 Cursor.execute(f"SELECT Id FROM Users WHERE Id = {message.from_user.id}")
70 if Cursor.fetchone() is None:
71 Cursor.execute(f"INSERT INTO Users VALUES(?, ?)", (message.from_user.id, True))
72 DataBase.commit()
73 await bot.send_message(message.from_user.id, "Успішно! Ваш аккаунт зареєстровано.")
74
75
76@dp.message_handler(commands=["help"])
77async def send_welcome(message: types.Message):
78 await bot.send_message(message.from_user.id, """Команди:
79/start - Реєстрація
80/help - Список команд
81/weather - Погода (На даний момент)""")
82
83
84@dp.message_handler(commands=["weather"])
85async def send_welcome(message: types.Message):
86 for i in Cursor.execute("SELECT * FROM Weather"):
87 Clouds = i[0]
88 Temp = i[2]
89 await bot.send_message(message.from_user.id, f"""Погода (На даний момент):
90Небо: {Clouds}
91Температура: {Temp}""")
92
93
94if __name__ == '__main__':
95 executor.start_polling(dp, skip_updates=True)
96 threading.Thread(target=Weather).start()