olimp-tg-bot/bot-limp.py

132 lines
8.6 KiB
Python
Raw Permalink 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.

import logging
import os
from aiogram import Bot, Dispatcher, types, F
from aiogram.filters import Command
from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup
from dotenv import load_dotenv
load_dotenv()
logging.basicConfig(level=logging.INFO)
# инициализация бота
bot = Bot(token=os.getenv("BOT_TOKEN"))
dp = Dispatcher()
# достопримечательности
attractions = [
{
"name": "Кузнецкая крепость",
"description": "Кузнецкая крепость выдающийся образец военно-инженерного искусства и единственная за Уралом. Это архитектурный символ Новокузнецка, занимающий 2,5 га. \n Возникла позже города: Кузнецкий острог построен в 1618 году на горе Вознесенской (позже Маяковой) при впадении ручья Водопадный в Томь. Защищал город с севера, имея выгодное положение на пути из Томска и Барнаула. Укрепления были деревянными или дерево-земляными. В 1689 году острог получил статус города.",
"address": "Крепостной пр-д, 1",
"photo_url": "https://i.imgur.com/Dn4qg5U.png"
},
{
"name": "Мемориальный музей боевой и трудовой славы",
"description": "В конце 1960-х ветераны предложили создать на КМК музей боевой и трудовой славы. Секретарь парткома Н. М. Миловацкий поддержал идею, и на заседании выбрали место для музея, заложив памятный камень. После всесоюзного конкурса лучшим признали проект скульптора Д. И. Народицкого и архитектора Н. Н. Миловидова.",
"address": "пл. Побед, 1/1",
"photo_url": "https://i.imgur.com/7ibuvPo.jpeg"
},
{
"name": "Спасо-Преображенский Собор",
"description": "Спа́со-Преображе́нский собо́р — православный храм в городе Новокузнецке Кемеровской области, кафедральный собор Новокузнецкой епархии Русской православной церкви. Построен в XVIII веке. Вид на храм, располагавшийся на высокой береговой террасе реки Томи, открывался при подъезде к городу. ",
"address": "ул. Водопадная, 18",
"photo_url": "https://i.imgur.com/Rs5xBVW.jpeg"
},
{
"name": "Бульвар героев",
"description": "Идея создания мемориала в честь погибших воинов-новокузнечан возникла в 1960-х. Хотя строительство не входило в утверждённые планы города, первый секретарь горкома КПСС Н. С. Ермаков решил возвести его под видом благоустройства. В 1966 году провели конкурс, и из 26 проектов выбрали работу молодого архитектора Юрия Журавкова.",
"address": "ул. Циолковского, 63",
"photo_url": "https://i.imgur.com/EArF3jd.jpeg"
},
{
"name": "Новокузнецкий драматический театр",
"description": "Новокузнецкий драматический театр - крупнейший театр в Кузбассе. Здание завершило ансамбль центральной площади города, формирование которой началось в соответствии с генеральным планом Горстройпроекта 1934 г. со строительства на её южной стороне Дворца культуры кузнецких металлургов. Драмтеатр расположен в восточной части Театральной площади, на месте, где в 1930-х гг. намечалось строительство второй очереди Дворца культуры.",
"address": "проспект Металлургов, 28",
"file_id": "AgACAgIAAxkBAAMWZ-Tq-9NPR_nlikl1GNGXN-1k9YEAAtXyMRsSgihLOZ1ZrpFqDDMBAAMCAAN5AAM2BA"
},
{
"name": "Новокузнецкий цирк",
"description": "Новокузнецкий государственный цирк — культурный развлекательный центр в Новокузнецке, Россия. В России цирковые манежи есть только в республиканских, краевых и областных центрах. Новокузнецк — исключение из этого правила. В цирке есть 1685 мест для зрителей, а также гостиница для артистов.",
"address": "ул. Кирова, 70",
"photo_url": "https://i.imgur.com/thu4kmu.jpeg"
},
{
"name": "Памятник 50-летия образования СССР",
"description": " Этот монумент, посвященный 50-летию СССР (19221991), стал одним из символов Новокузнецка. Автор проекта — архитектор А. И. Выпов, занявший второе место в конкурсе. Алюминиевый герб СССР выковали мастера Новокузнецкого художественного фонда, а строительство завершили к 30 декабря 1972 года. Памятник известен под разными названиями, включая «Дружба народов» и «Каменный цветок». ",
"address": "Октябрьский пр., 2Б",
"photo_url": "https://i.imgur.com/BgoSodj.jpeg"
}
]
# клавиатура
def generate_keyboard():
buttons = []
for i, attr in enumerate(attractions, 1):
buttons.append([InlineKeyboardButton(
text=f"{i}. {attr['name']}",
callback_data=f"attr_{i-1}"
)])
return InlineKeyboardMarkup(inline_keyboard=buttons)
# /start
@dp.message(Command("start", "help"))
async def cmd_start(message: types.Message):
sent_message = await message.answer(
"🏙️ Добро пожаловать в гид по Новокузнецку!\n"
"Выберите достопримечательность:",
reply_markup=generate_keyboard()
)
try:
await bot.pin_chat_message(
chat_id=message.chat.id,
message_id=sent_message.message_id,
disable_notification=True
)
except Exception as e:
logging.error(f"Ошибка при закреплении: {e}")
# инициализация ответа
@dp.callback_query(F.data.startswith("attr_"))
async def show_attraction(callback: types.CallbackQuery):
try:
index = int(callback.data.split("_")[1])
attr = attractions[index]
caption = (
f"🏛 <b>{attr['name']}</b>\n\n"
f"📖 {attr['description']}\n\n"
f"📍 Адрес: {attr['address']}"
)
# отправка фото
if "file_id" in attr:
await callback.message.answer_photo(
photo=attr["file_id"],
caption=caption,
parse_mode="HTML"
)
elif "photo_url" in attr:
await callback.message.answer_photo(
photo=attr["photo_url"],
caption=caption,
parse_mode="HTML"
)
else:
await callback.message.answer(caption, parse_mode="HTML")
except Exception as e:
logging.error(f"Ошибка: {e}")
await callback.message.answer("⚠️ Произошла ошибка")
finally:
await callback.answer()
# запуск бота
async def main():
await dp.start_polling(bot)
if __name__ == "__main__":
import asyncio
asyncio.run(main())