Фильтр пользователей Telegram Bot (aiogram)
Есть бот, где реализовано, чтобы пользователю высылался документ при нажатии на инлайн кнопку
from aiogram import Bot, types, Dispatcher
from aiogram.utils import executor
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton, InputFile
bot = Bot(token = 'token')
mybot = Dispatcher(bot)
@mybot.message_handler(commands=["start"])
async def start(message: types.Message):
markup = InlineKeyboardMarkup(row_width=1)
station = InlineKeyboardButton(text='Файл', callback_data='Файл')
markup.add(station)
await message.reply('Выберите просмотр', reply_markup=markup)
@mybot.callback_query_handler(text='Файл')
async def menu_index(call: types.CallbackQuery):
await call.message.answer_document(document="document_ID")
if __name__ == '__main__':
executor.start_polling(mybot)
Хочется реализовать ограничение/фильтр пользователей на допуск к файлам, то есть только определенному пользователю придет файл, а если он не входит в список разрешенных пользователей, то ему такое сообщение и придет. Однако, даже не знаю с какой стороны к этому вопросу подобраться.
Подскажите, может кто уже реализовывал?
Ответы (1 шт):
Автор решения: anywayaleksey
→ Ссылка
Проблема решена Если кому интересно, то вот код:
filters_btns = {
'btn1' : [user_id123, user_id321]}
@mybot.callback_query_handler(lambda call: call.data in mapping_btns_path_filter)
async def menu_index(call: types.CallbackQuery):
if call.from_user.id not in mapping_btns_path_filter[call.data][2]:
return
path = path1 + mapping_btns_path_filter[call.data][0] + date
file = InputFile(io.BytesIO(sftp.open(path, 'rb').read()), filename=mapping_btns_path_filter[call.data][1])
await call.message.answer_document(document=file)
Конечно, тут еще отсылка файла и подключение к словарю путей файлов и все такое. Но кусок кода можно вырезать, если кому пригодится