# █▀▀ ▄▀█ █▀▄▀█ █▀█ █▀▄ █▀
# █▀░ █▀█ █░▀░█ █▄█ █▄▀ ▄█
# https://t.me/famods
# 🔒 Licensed under the GNU AGPLv3
# 🌐 https://www.gnu.org/licenses/agpl-3.0.html
# ---------------------------------------------------------------------------------
# Name: PhoneInfo
# Description: Информация о телефоне
# meta developer: @FAmods
# meta banner: https://github.com/FajoX1/FAmods/blob/main/assets/banners/phoneinfo.png?raw=true
# ---------------------------------------------------------------------------------
import time
import asyncio
import logging
from .. import loader, utils
logger = logging.getLogger(__name__)
@loader.tds
class PhoneInfo(loader.Module):
"""Информация о телефоне"""
strings = {
"name": "PhoneInfo",
"no_phone": "❌ Нужно {}{} [название телефона]",
"searching": "🔄 Поиск телефона...",
"searching_info": "🔄 Поиск информации о телефоне...",
"no_found": "❌ Не нашёл такой телефон",
"cameras_txt": "📷 Cameras:",
"software_txt": "🖥 Software:",
"hardware_txt": "💾 Hardware:",
}
cameras_t = "Cameras:"
software_t = "Software:"
hardware_t = "Hardware:"
opt_bt = "\nspecs prepared with ❤️ by @gsmarbot"
def __init__(self):
self.config = loader.ModuleConfig(
loader.ConfigValue(
"search_limit",
5,
lambda: "Лимит результатов в поиске",
),
)
async def client_ready(self, client, db):
self.db = db
self._client = client
async def _get_phone_info(self, query):
try:
q = await self._client.inline_query("@gsmarbot", query)
result = q.result.results[1]
message = result.send_message.message
message = message.replace(self.opt_bt, "")
message = message.replace(self.cameras_t, self.strings['cameras_txt'])
message = message.replace(self.software_t, self.strings['software_txt'])
message = message.replace(self.hardware_t, self.strings['hardware_txt'])
url = result.send_message.reply_markup.rows[0].buttons[0].url
return {'info': message, 'link': url}
except (IndexError, AttributeError):
return {'info': "no found"}
async def _get_phones(self, query):
try:
q = await self._client.inline_query("@gsmarbot", query)
q.result.results[1]
results = q.result.results
limit = self.config["search_limit"]
c_res = 0
resultss = []
for result in results:
if c_res == limit:
break
resultss.append({"name": result.send_message.message.split('\n')[0], "link": result.send_message.reply_markup.rows[0].buttons[0].url})
c_res += 1
return {'result': resultss, 'count_result_res': c_res}
except (IndexError, AttributeError):
return {"result": "no found"}
@loader.command()
async def pnsearch(self, message):
"""Поиск телефона"""
query = utils.get_args_raw(message)
if not query:
return await utils.answer(message, self.strings['no_phone'].format(self.get_prefix(), 'pnsearch'))
await utils.answer(message, self.strings['searching'])
start_time = time.time()
phones = await self._get_phones(query)
if phones['result'] == "no found":
return await utils.answer(message, self.strings['no_found'])
txt = f"""
📱 Результаты поиска
🔎 Запрос: {query}
"""
for phone in phones['result']:
txt += f"📱 {phone['name']}\n🔗 {phone['link']}\n\n"
end_time = time.time()
execution_time = end_time - start_time
txt += f"{phones['count_result_res']} результатов за {execution_time} сек"
return await utils.answer(message, txt)
@loader.command()
async def pninfo(self, message):
"""Получить информацию о телефоне"""
query = utils.get_args_raw(message)
if not query:
return await utils.answer(message, self.strings['no_phone'].format(self.get_prefix(), 'pninfo'))
await utils.answer(message, self.strings['searching_info'])
info = await self._get_phone_info(query)
if info['info'] == "no found":
return await utils.answer(message, self.strings['no_found'])
txt = f"""
📱 Информация о телефоне
🔎 Запрос: {query}
📲 {info['info']}
"""
keyboard = [
[
{
"text": "Полная информация о телефоне",
"url": info['link'],
}
],
]
# try:
await self.inline.form(
text=txt,
message=message,
reply_markup=keyboard,
force_me=True,
)
# except Exception as e:
# txt += f"ℹ️ Полная информация о телефоне"
# return await utils.answer(message, txt)