Загрузить файлы в «/»

This commit is contained in:
yogurtmenn 2025-03-27 08:01:01 +00:00
commit a9bc8ca50f

130
bot-limp.py Normal file
View file

@ -0,0 +1,130 @@
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())