2022-10-26 15:54:55 +03:00
from datetime import datetime
from os import path , sep
2022-12-16 14:19:50 +02:00
from app import app , isAnAdmin
2022-12-27 19:46:17 +02:00
from pyrogram . types import InlineQueryResultArticle , InputTextMessageContent , InlineQuery
from pyrogram . client import Client
2022-10-26 15:54:55 +03:00
from pyrogram . enums . chat_type import ChatType
from pyrogram . enums . chat_members_filter import ChatMembersFilter
from dateutil . relativedelta import relativedelta
2022-12-16 14:19:50 +02:00
from classes . holo_user import HoloUser , UserInvalidError , UserNotFoundError
from modules . utils import configGet , locale
from modules . database import col_applications
2022-10-26 15:54:55 +03:00
@app.on_inline_query ( )
2022-12-27 19:46:17 +02:00
async def inline_answer ( client : Client , inline_query : InlineQuery ) :
2022-10-26 15:54:55 +03:00
2022-12-01 12:06:54 +02:00
if inline_query . chat_type in [ ChatType . CHANNEL ] :
2022-10-26 15:54:55 +03:00
await inline_query . answer (
results = [
InlineQueryResultArticle (
2022-12-17 01:58:33 +02:00
title = locale ( " title " , " inline " , " not_pm " , locale = inline_query . from_user ) ,
2022-10-26 15:54:55 +03:00
input_message_content = InputTextMessageContent (
2022-12-17 01:58:33 +02:00
locale ( " message_content " , " inline " , " not_pm " , locale = inline_query . from_user )
2022-10-26 15:54:55 +03:00
) ,
2022-12-17 01:58:33 +02:00
description = locale ( " description " , " inline " , " not_pm " , locale = inline_query . from_user )
2022-10-26 15:54:55 +03:00
)
]
)
return
2022-12-16 14:19:50 +02:00
try :
holo_user = HoloUser ( inline_query . from_user )
except ( UserNotFoundError , UserInvalidError ) :
await inline_query . answer (
results = [
InlineQueryResultArticle (
2022-12-17 01:58:33 +02:00
title = locale ( " title " , " inline " , " forbidden " , locale = inline_query . from_user ) ,
2022-12-16 14:19:50 +02:00
input_message_content = InputTextMessageContent (
2022-12-17 01:58:33 +02:00
locale ( " message_content " , " inline " , " forbidden " , locale = inline_query . from_user )
2022-12-16 14:19:50 +02:00
) ,
2022-12-17 01:58:33 +02:00
description = locale ( " description " , " inline " , " forbidden " , locale = inline_query . from_user )
2022-12-16 14:19:50 +02:00
)
]
)
return
if holo_user . application_approved ( ) or ( await isAnAdmin ( holo_user . id ) is True ) :
2022-10-26 15:54:55 +03:00
2022-12-18 00:26:07 +02:00
max_results = configGet ( " inline_preview_count " ) if inline_query . query != " " else 200
2022-12-18 00:12:15 +02:00
2022-10-26 15:54:55 +03:00
list_of_users = [ ]
2022-12-18 00:12:15 +02:00
async for m in app . get_chat_members ( configGet ( " destination_group " ) , limit = max_results , filter = ChatMembersFilter . SEARCH , query = inline_query . query ) :
2022-10-26 15:54:55 +03:00
list_of_users . append ( m )
results = [ ]
for match in list_of_users :
2022-12-16 14:19:50 +02:00
application = col_applications . find_one ( { " user " : match . user . id } )
if application is None :
2022-10-27 12:40:15 +03:00
continue
2022-12-16 14:19:50 +02:00
application_content = [ ]
i = 1
for question in application [ ' application ' ] :
if i == 2 :
age = relativedelta ( datetime . now ( ) , application [ ' application ' ] [ ' 2 ' ] )
2022-12-17 01:58:33 +02:00
application_content . append ( f " { locale ( f ' question { i } ' , ' message ' , ' question_titles ' , locale = inline_query . from_user ) } { application [ ' application ' ] [ ' 2 ' ] . strftime ( ' %d . % m. % Y ' ) } ( { age . years } р .) " )
2022-12-16 14:19:50 +02:00
elif i == 3 :
if application [ ' application ' ] [ ' 3 ' ] [ ' countryCode ' ] == " UA " :
2022-12-17 01:58:33 +02:00
application_content . append ( f " { locale ( f ' question { i } ' , ' message ' , ' question_titles ' , locale = inline_query . from_user ) } { application [ ' application ' ] [ ' 3 ' ] [ ' name ' ] } " )
2022-12-16 14:19:50 +02:00
else :
2022-12-17 01:58:33 +02:00
application_content . append ( f " { locale ( f ' question { i } ' , ' message ' , ' question_titles ' , locale = inline_query . from_user ) } { application [ ' application ' ] [ ' 3 ' ] [ ' name ' ] } ( { application [ ' application ' ] [ ' 3 ' ] [ ' adminName1 ' ] } , { application [ ' application ' ] [ ' 3 ' ] [ ' countryName ' ] } ) " )
2022-12-16 14:19:50 +02:00
else :
2022-12-17 01:58:33 +02:00
application_content . append ( f " { locale ( f ' question { i } ' , ' message ' , ' question_titles ' , locale = inline_query . from_user ) } { application [ ' application ' ] [ question ] } " )
2022-12-16 14:19:50 +02:00
i + = 1
2022-10-27 12:40:15 +03:00
if match . user . photo != None :
try :
2022-11-29 11:37:06 +02:00
if not path . exists ( f ' { configGet ( " cache " , " locations " ) } { sep } avatars { sep } { match . user . photo . big_file_id } ' ) :
print ( f ' Downloaded avatar { match . user . photo . big_file_id } of { match . user . id } and uploaded to { configGet ( " api " ) } /?avatar_id= { match . user . photo . big_file_id } ' , flush = True )
await app . download_media ( match . user . photo . big_file_id , file_name = f ' { configGet ( " cache " , " locations " ) } { sep } avatars { sep } { match . user . photo . big_file_id } ' )
2022-10-27 12:40:15 +03:00
results . append (
InlineQueryResultArticle (
title = str ( match . user . first_name ) ,
input_message_content = InputTextMessageContent (
2022-12-17 01:58:33 +02:00
locale ( " message_content " , " inline " , " user " , locale = inline_query . from_user ) . format ( match . user . first_name , match . user . username , " \n " . join ( application_content ) )
2022-10-27 12:40:15 +03:00
) ,
2022-12-17 01:58:33 +02:00
description = locale ( " description " , " inline " , " user " , locale = inline_query . from_user ) . format ( match . user . first_name , match . user . username ) ,
2022-10-27 12:41:49 +03:00
thumb_url = f ' { configGet ( " api " ) } /?avatar_id= { match . user . photo . big_file_id } '
2022-10-27 12:40:15 +03:00
)
)
except ValueError :
results . append (
InlineQueryResultArticle (
title = str ( match . user . first_name ) ,
input_message_content = InputTextMessageContent (
2022-12-17 01:58:33 +02:00
locale ( " message_content " , " inline " , " user " , locale = inline_query . from_user ) . format ( match . user . first_name , match . user . username , " \n " . join ( application_content ) )
2022-10-27 12:40:15 +03:00
) ,
2022-12-17 01:58:33 +02:00
description = locale ( " description " , " inline " , " user " , locale = inline_query . from_user ) . format ( match . user . first_name , match . user . username )
2022-10-27 12:40:15 +03:00
)
)
2022-11-22 16:26:34 +02:00
except FileNotFoundError :
results . append (
InlineQueryResultArticle (
title = str ( match . user . first_name ) ,
input_message_content = InputTextMessageContent (
2022-12-17 01:58:33 +02:00
locale ( " message_content " , " inline " , " user " , locale = inline_query . from_user ) . format ( match . user . first_name , match . user . username , " \n " . join ( application_content ) )
2022-11-22 16:26:34 +02:00
) ,
2022-12-17 01:58:33 +02:00
description = locale ( " description " , " inline " , " user " , locale = inline_query . from_user ) . format ( match . user . first_name , match . user . username )
2022-11-22 16:26:34 +02:00
)
)
2022-10-27 12:40:15 +03:00
else :
2022-10-26 15:54:55 +03:00
results . append (
InlineQueryResultArticle (
title = str ( match . user . first_name ) ,
input_message_content = InputTextMessageContent (
2022-12-17 01:58:33 +02:00
locale ( " message_content " , " inline " , " user " , locale = inline_query . from_user ) . format ( match . user . first_name , match . user . username , " \n " . join ( application_content ) )
2022-10-26 15:54:55 +03:00
) ,
2022-12-17 01:58:33 +02:00
description = locale ( " description " , " inline " , " user " , locale = inline_query . from_user ) . format ( match . user . first_name , match . user . username )
2022-10-26 15:54:55 +03:00
)
)
await inline_query . answer (
results = results ,
cache_time = 10
)