diff --git a/server/inlines.py b/server/inlines.py index 52e75eb..dd22699 100644 --- a/server/inlines.py +++ b/server/inlines.py @@ -1,6 +1,7 @@ from aiocache import cached import hashlib from aiogram.types import InlineQuery, InputTextMessageContent, InlineQueryResultArticle +from aiogram.bot import Bot as AioBot from olgram.models.models import Bot import typing as ty @@ -12,17 +13,35 @@ async def get_phrases(bot: Bot) -> ty.List: return [obj.text for obj in objects] +@cached(ttl=1) +async def check_chat_member(chat_id: int, user_id: int, bot: AioBot) -> bool: + member = await bot.get_chat_member(chat_id, user_id) + return member.is_chat_member() + + +@cached(ttl=1) +async def check_permissions(inline_query: InlineQuery, bot: Bot): + user_id = inline_query.from_user.id + super_chat_id = await bot.super_chat_id() + + if super_chat_id == user_id: + return True + + if super_chat_id < 0: # Group chat + is_member = await check_chat_member(super_chat_id, user_id, inline_query.bot) + return is_member + + return False + + async def inline_handler(inline_query: InlineQuery, bot: Bot): # Check permissions at first - # user_id = inline_query.from_user.id - # if bot.super_chat_id() != user_id: - # return await inline_query.answer([], cache_time=1) # forbidden + allow = await check_permissions(inline_query, bot) + if not allow: + return await inline_query.answer([], cache_time=1) # forbidden all_phrases = await get_phrases(bot) - print(f"All phrases {all_phrases}") phrases = [phrase for phrase in all_phrases if inline_query.query.lower() in phrase.lower()] - print(f"phrases {phrases}") - items = [] for phrase in phrases: input_content = InputTextMessageContent(phrase)