from aiogram import types
from aiogram.dispatcher.filters import Filter, Command
class CommandNotInListFilter(Filter):
    def __init__(self, commands: Command):
        self.commands = commands
    def check(self, message: types.Message) -> bool:
        if not message.text.startswith('/'):
            return False
        return message.text[1:] in self.commands.commands@dp.message_handler(
    CommandNotInListFilter(Command(['start', 'help']))
)
async def handle_unknown_commands(message: types.Message):
    await message.reply("Данной команды не существует!")@dp.message_handler( filters.CommandStart() )
async def start( message: types.Message ):
    await message.answer(
        'hi', 
        reply_markup = 
            InlineKeyboardMarkup(row_width=1).add(
                *[InlineKeyboardButton(text = "Apples", callback_='1'),
                InlineKeyboardButton(text = "Oranges", callback_data='2'),
                InlineKeyboardButton(text = "Beans", callback_data='3')]
            )
    )from threading import Thread
from collections import namedtuple
import time
import typing
import random
Message = namedtuple('Message', ['delete_time', 'message_id'])
messages_to_delete: typing.List[Message] = []
def delete_message(message: Message):
    print(f'Сообщение {message.message_id=} удалено')
    messages_to_delete.remove(message)
def messages_deleter():
    while True:
        for message in messages_to_delete:
            if message.delete_time - time.time() <= 0:
                delete_message(message)
        time.sleep(1)
if __name__ == '__main__':
    thread = Thread(target=messages_deleter)
    thread.start()
    while True:
        delete_time = time.time() + random.randint(1, 5)
        messages_to_delete.append(
            Message(delete_time=delete_time, message_id=random.randint(1, 1000))
        )
        time.sleep(1)