from aiogram.dispatcher.filters.state import State, StatesGroup from aiogram.dispatcher import FSMContext from aiogram.dispatcher.filters import Text from aiogram import types, Dispatcher from config import open_weather_API_token from keybords import custom_kb_client from data_base import sqlite_db import other_packages from create_bot import bot from asyncio import sleep import datetime import requests import string import json class FSMWeather(StatesGroup): place = State() async def cmd_start(message: types.Message): await message.reply("Hi!\nI'm Genka-bot!", reply_markup=custom_kb_client) async def get_coin(message: types.Message): await message.reply(f"{other_packages.print_bitcoin()}\U0001F911") async def get_weather(message: types.Message): await FSMWeather.place.set() await message.answer("Введите город") async def cancel_handler(message: types.Message, state: FSMContext): current_state = await state.get_state() if current_state is None: return await state.finish() await message.reply("ОК") async def place(message: types.Message, state: FSMContext): state.proxy() flag = 1 code_to_smile = { "Clear": "Ясно \U00002600", "Clouds": "Облачно \U00002601", "Rain": "Дождь \U00002614", "Drizzle": "Дождь \U00002614", "Thunderstorm": "Гроза \U000026A1", "Snow": "Снег \U0001F328", "Mist": "Туман \U0001F32B" } while flag == 1: try: r = requests.get( f"https://api.openweathermap.org/data/2.5/weather?q={message.text}&appid={open_weather_API_token}&units=metric" ) data = r.json() city = data["name"] current_weather = data["main"]["temp"] weather_description = data["weather"][0]["main"] if weather_description in code_to_smile: wd = code_to_smile[weather_description] else: wd = "Я понятия не имею, что у тебя там творится, выгялни в окно и посмотри!" humidity = data["main"]["humidity"] pressure = data["main"]["pressure"] wind = data["wind"]["speed"] sunrise_timestamp = datetime.datetime.fromtimestamp(data["sys"]["sunrise"]) sunset_timestamp = datetime.datetime.fromtimestamp(data["sys"]["sunset"]) length_of_the_day = sunset_timestamp - sunrise_timestamp await message.answer(f"***{datetime.datetime.now().strftime('%Y-%m-%d %H:%M')}***\n" f"Погода в городе: {city}\nТемпература: {current_weather}C° {wd}\n" f"Влажность: {humidity}%\nДавление: {pressure} мм.рт.ст\n" f"Ветер: {wind} м/c\nВосход солнца: {sunrise_timestamp}\n" f"Закат солнца: {sunset_timestamp}\nПродолжительность дня: {length_of_the_day}\n" f"***\U0001F389Хорошего дня!\U0001F60B***") except: await message.reply("Проверьте название города\U0001F914") break flag = 0 await state.finish() async def pizza_menu_command(message: types.Message): await sqlite_db.sql_reade(message) async def play_dice(message: types.Message): await bot.send_message(message.from_user.id, f"Привет\U0001F44B {message.from_user.username}! Начинаем игру!!!\U0001F3B2") await sleep(0.5) await bot.send_message(message.from_user.id, "Я буду кидать первым\U0001F60B") await sleep(1) bot_data = await bot.send_dice(message.from_user.id) bot_data = bot_data["dice"]["value"] await sleep(4) user_data = await bot.send_dice(message.from_user.id) user_data = user_data["dice"]["value"] await sleep(4) if bot_data > user_data: await bot.send_message(message.from_user.id, f"Вы проиграли\U0001F972") elif bot_data < user_data: await bot.send_message(message.from_user.id, "\U0001F389Вы победили!!!\U0001F3C6") else: await bot.send_message(message.from_user.id, "Ничья\U0001F609") # async def name_filter(message: types.Message): # if {i.lower().translate(str.maketrans("", "", string.punctuation)) for i in message.text.split(" ")} \ # .intersection(set(json.load(open("name_dict.json")))): # await message.answer(f"Меня зовут Гена!!!") async def Said_filter(message: types.Message): await message.answer("Вы упоминали Саида, что он в этот раз учудил?") def register_handlers_client(dp: Dispatcher): dp.register_message_handler(cmd_start, commands=["start"]) dp.register_message_handler(get_coin, commands=["bitcoin"]) dp.register_message_handler(get_weather, commands=["погода", "weather"], state=None) dp.register_message_handler(cancel_handler, commands=["отмена"], state="*") dp.register_message_handler(cancel_handler, Text(equals="отмена", ignore_case=True), state="*") dp.register_message_handler(place, content_types=["text"], state=FSMWeather.place) dp.register_message_handler(pizza_menu_command, commands=["Меню"]) dp.register_message_handler(play_dice, commands=["dice"]) dp.register_message_handler(Said_filter, lambda message: "Саид" in message.text) # - интересная конструкция # dp.register_message_handler(name_filter)