Как ограничить доступ к выполнению команд?

Всех приветствую! Подскажите, как правильно или как лучше сделать ограничение по выполнению команд? Необходимо, чтобы по выполнению команды (проверка уже реализована и работает правильно) бот молчал.

def check_id(message):
id = message.from_user.id
record = cursor.execute('SELECT * FROM table_table WHERE user_id=?', (id, )).fetchone() 
if record: 
    return True
else:
    return False


@bot.message_handler(func=lambda message: check_id(message) == False, commands=['help', 'menu', 'start']) 
def some(message):
    bot.send_message(message.chat.id, 'Нельзя') #Необходимо заменить эту строку или сделать что-то другое. 
#Пустое сообщение бот отправить не может.

Ответы (2 шт):

Автор решения: ProgerOffline
# Ставим обрботчик на команду /start
@bot.message_handler(commands=['start'])
def process_start(message):
     if message.chat.id == "1":
          bot.send_message(1, "У вас есть права на данную команду")
     else:
          pass

Тут можно обойтись даже без else, просто если условине не верно, то ничего не произойдет.

# Ставим обрботчик на команду /start
@bot.message_handler(commands=['start'])
def process_start(message):
     if message.chat.id == "1":
          bot.send_message(1, "У вас есть права на данную команду")
→ Ссылка
Автор решения: cool rage

Для начала, тебе придется это писать во всех командах (что глупо?)
Поэтому можно обойтись фильтрами:

filters.py

from aiogram import types
from aiogram.dispatcher.filters import BoundFilter

class IsBanned(BoundFilter):

    key = "is_banned"

    def __init__(self, is_banned):
        self.is_banned = is_banned

    async def check(self, message: types.Message):
        with open("db.json", "r") as file:
            db = json.load(file)

        user_id = message.from_user.id
        if str(user_id) in db.get("banned_users", {}):
            return self.is_banned
        return not self.is_banned

в handlers/users

from filters import IsBanned

dp.filters_factory.bind(IsBanned)

# Пропускаем не забаненных в боте
@dp.message_handler(IsBanned(False), CommandStart())
async def handle_all_messages(message: types.Message):
   ... code

#что будет показывать забаненным в боте
@dp.message_handler(IsBanned(True))
async def banned_user_handler(message: types.Message):
    await message.answer("Вы забанены в боте.")

В этом коде явно показано использование фильтра. В отличии от того, чтобы указывать в коде забаненных, можно воспользоваться бд.json

} 
  "banned_users": {
    "6187889732": {
      "reason": "Banned by admin",
      "banned_by": 5776777607
  }
 }
} 

Таким образом фильтр будет получать тех кто находится в словаре и не пропускать.

Проставляй IsBanned(False) в хендлеры всех команд, для того, чтобы не пропускать забаненных к использованию команд и все :)

→ Ссылка