olimp-tg-bot/bot-limp.py

130 lines
7.7 KiB
Python
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.

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": "Новокузнецкий драматический театр — государственное автономное учреждение культуры в городе Новокузнецке Кемеровской области, один из старейших театров Кузбасса, важный центр культурной жизни города.",
"address": "проспект Металлургов, 28",
"file_id": "AgACAgIAAxkBAAMWZ-Tq-9NPR_nlikl1GNGXN-1k9YEAAtXyMRsSgihLOZ1ZrpFqDDMBAAMCAAN5AAM2BA"
},
{
"name": "Кузнецкая крепость",
"description": "Кузнецкая крепость — крепость, опорный пункт Сибирской линии в верховьях реки Томь, сейчас памятник истории и архитектуры федерального значения.",
"address": "Крепостной пр-д, 1",
"photo_url": "https://i.imgur.com/Dn4qg5U.png"
},
{
"name": "Бульвар героев",
"description": "Идея создания мемориала в честь погибших воинов-новокузнечан возникла в 1960-х. Хотя строительство не входило в утверждённые планы города, первый секретарь горкома КПСС Н. С. Ермаков решил возвести его под видом благоустройства. В 1966 году провели конкурс, и из 26 проектов выбрали работу молодого архитектора Юрия Журавкова.",
"address": "ул. Циолковского, 63",
"photo_url": "https://i.imgur.com/EArF3jd.jpeg"
},
{
"name": "Спасо-Преображенский Собор",
"description": "Спа́со-Преображе́нский собо́р — православный храм в городе Новокузнецке Кемеровской области, кафедральный собор Новокузнецкой епархии Русской православной церкви. Построен в XVIII веке. Вид на храм, располагавшийся на высокой береговой террасе реки Томи, открывался при подъезде к городу. ",
"address": "ул. Водопадная, 18",
"photo_url": "https://i.imgur.com/Rs5xBVW.jpeg"
},
{
"name": "Мемориальный музей боевой и трудовой славы",
"description": "В конце 1960-х ветераны предложили создать на КМК музей боевой и трудовой славы. Секретарь парткома Н. М. Миловацкий поддержал идею, и на заседании выбрали место для музея, заложив памятный камень. После всесоюзного конкурса лучшим признали проект скульптора Д. И. Народицкого и архитектора Н. Н. Миловидова.",
"address": "пл. Побед, 1/1",
"photo_url": "https://i.imgur.com/7ibuvPo.jpeg"
},
{
"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 и /help
@dp.message(Command("start", "help"))
async def cmd_start(message: types.Message):
await message.answer(
"🏙️ Добро пожаловать в гид по Новокузнецку!\n"
"Выберите достопримечательность:",
reply_markup=generate_keyboard()
)
# Команда /list
@dp.message(Command("list"))
async def cmd_list(message: types.Message):
await message.answer(
"🗺️ Список достопримечательностей:",
reply_markup=generate_keyboard()
)
# Обработка нажатий на кнопки
@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']}"
)
# Отправка фото (file_id или URL)
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())