Files
Tg-bot/bot.0.1/handlers/client.py
2024-10-29 16:09:13 +03:00

140 lines
5.7 KiB
Python
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 Bot!\nPowered by aiogram.", 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}{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)