import asyncio
from contextlib import suppress
from aiogram import types
from aiogram.utils.exceptions import (MessageToEditNotFound, MessageCantBeEdited, MessageCantBeDeleted,
MessageToDeleteNotFound)
async def delete_message(message: types.Message, sleep_time: int = 0):
await asyncio.sleep(sleep_time)
with suppress(MessageCantBeDeleted, MessageToDeleteNotFound):
await message.delete()
msg = await message.reply("Я удалюсь через 30 секунд")
asyncio.create_task(delete_message(msg, 30)
await message.answer("Подменю Кнопки", reply_markup=inlinebuttons, disable_notification=True)
from aiogram import Dispatcher, Bot, executor
from aiogram.types import *
bot = Bot("TOKEN")
dp = Dispatcher(bot)
@dp.message_handler(text="Кнопка1")
async def main(message: Message):
keyboard = InlineKeyboardMarkup(row_width=1)
btn1 = InlineKeyboardButton(text="Инлайн кнопка1", callback_data="btn1")
btn2 = InlineKeyboardButton(text="Инлайн кнопка2", callback_data="btn2")
btn3 = InlineKeyboardButton(text="Инлайн кнопка3", callback_data="btn3")
keyboard.add(btn1, btn2, btn3)
await message.answer("Инлайновые кнопки Кнопки1", reply_markup=keyboard)
@dp.callback_query_handler(text="btn1")
async def btn1(call: CallbackQuery):
photo = open("img.png", "rb")
msg = await call.message.answer_photo(photo=photo, caption="Прикреплённый к фото текст кнопки 1")
keyboard = call.message.reply_markup
btn1 = InlineKeyboardButton(text="Инлайн кнопка1 (Свернуть)", callback_data=f"{msg.message_id}_btn1")
keyboard["inline_keyboard"][0][0] = btn1
await call.message.edit_reply_markup(keyboard)
@dp.callback_query_handler(text="btn2")
async def btn2(call: CallbackQuery):
photo = open("img.png", "rb")
msg = await call.message.answer_photo(photo=photo, caption="Прикреплённый к фото текст кнопки 2")
keyboard = call.message.reply_markup
btn2 = InlineKeyboardButton(text="Инлайн кнопка2 (Свернуть)", callback_data=f"{msg.message_id}_btn2")
keyboard["inline_keyboard"][1][0] = btn2
await call.message.edit_reply_markup(keyboard)
@dp.callback_query_handler(text="btn3")
async def btn3(call: CallbackQuery):
photo = open("img.png", "rb")
msg = await call.message.answer_photo(photo=photo, caption="Прикреплённый к фото текст кнопки 3")
keyboard = call.message.reply_markup
btn3 = InlineKeyboardButton(text="Инлайн кнопка2 (Свернуть)", callback_data=f"{msg.message_id}_btn3")
keyboard["inline_keyboard"][2][0] = btn3
await call.message.edit_reply_markup(keyboard)
@dp.callback_query_handler(regexp=r"[\d]+_btn1")
async def btn1_pthotodel(call: CallbackQuery):
await bot.delete_message(call.message.chat.id, int(call.data.split("_")[0]))
keyboard = call.message.reply_markup
btn1 = InlineKeyboardButton(text="Инлайн кнопка1", callback_data="btn1")
keyboard["inline_keyboard"][0][0] = btn1
await call.message.edit_reply_markup(keyboard)
@dp.callback_query_handler(regexp=r"[\d]+_btn2")
async def btn1_pthotodel(call: CallbackQuery):
await bot.delete_message(call.message.chat.id, int(call.data.split("_")[0]))
keyboard = call.message.reply_markup
btn2 = InlineKeyboardButton(text="Инлайн кнопка2", callback_data="btn2")
keyboard["inline_keyboard"][1][0] = btn2
await call.message.edit_reply_markup(keyboard)
@dp.callback_query_handler(regexp=r"[\d]+_btn3")
async def btn1_pthotodel(call: CallbackQuery):
await bot.delete_message(call.message.chat.id, int(call.data.split("_")[0]))
keyboard = call.message.reply_markup
btn3 = InlineKeyboardButton(text="Инлайн кнопка3", callback_data="btn3")
keyboard["inline_keyboard"][2][0] = btn3
await call.message.edit_reply_markup(keyboard)
executor.start_polling(dp)
# imported_file.py
import telebot
from telebot import types
def setup(bot): # setup() принимает бота и прочее как параметры.
# да, прописываем обработчики прямо внутри setup()
# но вот глобальные переменные здесь прописывать не стоит
@bot.message_handler(content_types=['text'])
def get_text_messages(message):
...
# main_file.py
import telebot
from telebot import types
import time
import imported_file
bot = telebot.TeleBot("ТОКЕН")
# убедись, что setup() вызывается строго один раз для каждого дополнительного файла!
imported_file.setup(bot)
... # дальше работаем как обычно