Обновить bot-limp.py
This commit is contained in:
parent
dc46dcbaa3
commit
1b40f4d521
1 changed files with 35 additions and 33 deletions
62
bot-limp.py
62
bot-limp.py
|
@ -5,33 +5,27 @@ from aiogram.filters import Command
|
||||||
from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup
|
from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
|
|
||||||
# Настройка
|
|
||||||
load_dotenv()
|
load_dotenv()
|
||||||
logging.basicConfig(level=logging.INFO)
|
logging.basicConfig(level=logging.INFO)
|
||||||
|
|
||||||
# Инициализация бота
|
# инициализация бота
|
||||||
bot = Bot(token=os.getenv("BOT_TOKEN"))
|
bot = Bot(token=os.getenv("BOT_TOKEN"))
|
||||||
dp = Dispatcher()
|
dp = Dispatcher()
|
||||||
|
|
||||||
# Данные о достопримечательностях
|
# достопримечательности
|
||||||
attractions = [
|
attractions = [
|
||||||
{
|
|
||||||
"name": "Новокузнецкий драматический театр",
|
|
||||||
"description": "Новокузнецкий драматический театр — государственное автономное учреждение культуры в городе Новокузнецке Кемеровской области, один из старейших театров Кузбасса, важный центр культурной жизни города.",
|
|
||||||
"address": "проспект Металлургов, 28",
|
|
||||||
"file_id": "AgACAgIAAxkBAAMWZ-Tq-9NPR_nlikl1GNGXN-1k9YEAAtXyMRsSgihLOZ1ZrpFqDDMBAAMCAAN5AAM2BA"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "Кузнецкая крепость",
|
"name": "Кузнецкая крепость",
|
||||||
"description": "Кузнецкая крепость — крепость, опорный пункт Сибирской линии в верховьях реки Томь, сейчас памятник истории и архитектуры федерального значения.",
|
"description": "Кузнецкая крепость – выдающийся образец военно-инженерного искусства и единственная за Уралом. Это архитектурный символ Новокузнецка, занимающий 2,5 га. \n Возникла позже города: Кузнецкий острог построен в 1618 году на горе Вознесенской (позже Маяковой) при впадении ручья Водопадный в Томь. Защищал город с севера, имея выгодное положение на пути из Томска и Барнаула. Укрепления были деревянными или дерево-земляными. В 1689 году острог получил статус города.",
|
||||||
"address": "Крепостной пр-д, 1",
|
"address": "Крепостной пр-д, 1",
|
||||||
"photo_url": "https://i.imgur.com/Dn4qg5U.png"
|
"photo_url": "https://i.imgur.com/Dn4qg5U.png"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Бульвар героев",
|
"name": "Мемориальный музей боевой и трудовой славы",
|
||||||
"description": "Идея создания мемориала в честь погибших воинов-новокузнечан возникла в 1960-х. Хотя строительство не входило в утверждённые планы города, первый секретарь горкома КПСС Н. С. Ермаков решил возвести его под видом благоустройства. В 1966 году провели конкурс, и из 26 проектов выбрали работу молодого архитектора Юрия Журавкова.",
|
"description": "В конце 1960-х ветераны предложили создать на КМК музей боевой и трудовой славы. Секретарь парткома Н. М. Миловацкий поддержал идею, и на заседании выбрали место для музея, заложив памятный камень. После всесоюзного конкурса лучшим признали проект скульптора Д. И. Народицкого и архитектора Н. Н. Миловидова.",
|
||||||
"address": "ул. Циолковского, 63",
|
"address": "пл. Побед, 1/1",
|
||||||
"photo_url": "https://i.imgur.com/EArF3jd.jpeg"
|
"photo_url": "https://i.imgur.com/7ibuvPo.jpeg"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Спасо-Преображенский Собор",
|
"name": "Спасо-Преображенский Собор",
|
||||||
|
@ -40,11 +34,18 @@ attractions = [
|
||||||
"photo_url": "https://i.imgur.com/Rs5xBVW.jpeg"
|
"photo_url": "https://i.imgur.com/Rs5xBVW.jpeg"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Мемориальный музей боевой и трудовой славы",
|
"name": "Бульвар героев",
|
||||||
"description": "В конце 1960-х ветераны предложили создать на КМК музей боевой и трудовой славы. Секретарь парткома Н. М. Миловацкий поддержал идею, и на заседании выбрали место для музея, заложив памятный камень. После всесоюзного конкурса лучшим признали проект скульптора Д. И. Народицкого и архитектора Н. Н. Миловидова.",
|
"description": "Идея создания мемориала в честь погибших воинов-новокузнечан возникла в 1960-х. Хотя строительство не входило в утверждённые планы города, первый секретарь горкома КПСС Н. С. Ермаков решил возвести его под видом благоустройства. В 1966 году провели конкурс, и из 26 проектов выбрали работу молодого архитектора Юрия Журавкова.",
|
||||||
"address": "пл. Побед, 1/1",
|
"address": "ул. Циолковского, 63",
|
||||||
"photo_url": "https://i.imgur.com/7ibuvPo.jpeg"
|
"photo_url": "https://i.imgur.com/EArF3jd.jpeg"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "Новокузнецкий драматический театр",
|
||||||
|
"description": "Новокузнецкий драматический театр - крупнейший театр в Кузбассе. Здание завершило ансамбль центральной площади города, формирование которой началось в соответствии с генеральным планом Горстройпроекта 1934 г. со строительства на её южной стороне Дворца культуры кузнецких металлургов. Драмтеатр расположен в восточной части Театральной площади, на месте, где в 1930-х гг. намечалось строительство второй очереди Дворца культуры.",
|
||||||
|
"address": "проспект Металлургов, 28",
|
||||||
|
"file_id": "AgACAgIAAxkBAAMWZ-Tq-9NPR_nlikl1GNGXN-1k9YEAAtXyMRsSgihLOZ1ZrpFqDDMBAAMCAAN5AAM2BA"
|
||||||
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "Новокузнецкий цирк",
|
"name": "Новокузнецкий цирк",
|
||||||
"description": "Новокузнецкий государственный цирк — культурный развлекательный центр в Новокузнецке, Россия. В России цирковые манежи есть только в республиканских, краевых и областных центрах. Новокузнецк — исключение из этого правила. В цирке есть 1685 мест для зрителей, а также гостиница для артистов.",
|
"description": "Новокузнецкий государственный цирк — культурный развлекательный центр в Новокузнецке, Россия. В России цирковые манежи есть только в республиканских, краевых и областных центрах. Новокузнецк — исключение из этого правила. В цирке есть 1685 мест для зрителей, а также гостиница для артистов.",
|
||||||
|
@ -59,7 +60,7 @@ attractions = [
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
# Клавиатура с кнопками
|
# клавиатура
|
||||||
def generate_keyboard():
|
def generate_keyboard():
|
||||||
buttons = []
|
buttons = []
|
||||||
for i, attr in enumerate(attractions, 1):
|
for i, attr in enumerate(attractions, 1):
|
||||||
|
@ -69,24 +70,25 @@ def generate_keyboard():
|
||||||
)])
|
)])
|
||||||
return InlineKeyboardMarkup(inline_keyboard=buttons)
|
return InlineKeyboardMarkup(inline_keyboard=buttons)
|
||||||
|
|
||||||
# Команды /start и /help
|
# /start
|
||||||
@dp.message(Command("start", "help"))
|
@dp.message(Command("start", "help"))
|
||||||
async def cmd_start(message: types.Message):
|
async def cmd_start(message: types.Message):
|
||||||
await message.answer(
|
sent_message = await message.answer(
|
||||||
"🏙️ Добро пожаловать в гид по Новокузнецку!\n"
|
"🏙️ Добро пожаловать в гид по Новокузнецку!\n"
|
||||||
"Выберите достопримечательность:",
|
"Выберите достопримечательность:",
|
||||||
reply_markup=generate_keyboard()
|
reply_markup=generate_keyboard()
|
||||||
)
|
)
|
||||||
|
|
||||||
# Команда /list
|
try:
|
||||||
@dp.message(Command("list"))
|
await bot.pin_chat_message(
|
||||||
async def cmd_list(message: types.Message):
|
chat_id=message.chat.id,
|
||||||
await message.answer(
|
message_id=sent_message.message_id,
|
||||||
"🗺️ Список достопримечательностей:",
|
disable_notification=True
|
||||||
reply_markup=generate_keyboard()
|
|
||||||
)
|
)
|
||||||
|
except Exception as e:
|
||||||
|
logging.error(f"Ошибка при закреплении: {e}")
|
||||||
|
|
||||||
# Обработка нажатий на кнопки
|
# инициализация ответа
|
||||||
@dp.callback_query(F.data.startswith("attr_"))
|
@dp.callback_query(F.data.startswith("attr_"))
|
||||||
async def show_attraction(callback: types.CallbackQuery):
|
async def show_attraction(callback: types.CallbackQuery):
|
||||||
try:
|
try:
|
||||||
|
@ -99,7 +101,7 @@ async def show_attraction(callback: types.CallbackQuery):
|
||||||
f"📍 Адрес: {attr['address']}"
|
f"📍 Адрес: {attr['address']}"
|
||||||
)
|
)
|
||||||
|
|
||||||
# Отправка фото (file_id или URL)
|
# отправка фото
|
||||||
if "file_id" in attr:
|
if "file_id" in attr:
|
||||||
await callback.message.answer_photo(
|
await callback.message.answer_photo(
|
||||||
photo=attr["file_id"],
|
photo=attr["file_id"],
|
||||||
|
@ -121,7 +123,7 @@ async def show_attraction(callback: types.CallbackQuery):
|
||||||
finally:
|
finally:
|
||||||
await callback.answer()
|
await callback.answer()
|
||||||
|
|
||||||
# Запуск бота
|
# запуск бота
|
||||||
async def main():
|
async def main():
|
||||||
await dp.start_polling(bot)
|
await dp.start_polling(bot)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue