2022-12-29 16:04:00 +02:00
|
|
|
from traceback import print_exc
|
2022-12-27 19:49:02 +02:00
|
|
|
from app import app
|
2022-12-15 16:00:38 +02:00
|
|
|
from pyrogram import filters
|
2022-12-27 14:36:54 +02:00
|
|
|
from pyrogram.types import Message
|
|
|
|
from pyrogram.client import Client
|
2022-12-27 19:49:02 +02:00
|
|
|
from classes.holo_user import HoloUser
|
|
|
|
from modules import custom_filters
|
2022-12-28 19:56:13 +02:00
|
|
|
from modules.utils import configGet, locale, should_quote, find_location
|
2022-12-15 16:12:52 +02:00
|
|
|
from modules.database import col_applications
|
2022-12-28 19:56:13 +02:00
|
|
|
from classes.errors.geo import PlaceNotFoundError
|
2022-12-15 16:00:38 +02:00
|
|
|
|
|
|
|
# Nearby command ===============================================================================================================
|
2022-12-27 19:49:02 +02:00
|
|
|
@app.on_message(~ filters.scheduled & (custom_filters.allowed | custom_filters.admin) & (filters.private | (filters.chat(configGet("admin_group")) | filters.chat(configGet("destination_group")))) & filters.command(["nearby"], prefixes=["/"]))
|
2022-12-27 14:36:54 +02:00
|
|
|
async def cmd_nearby(app: Client, msg: Message):
|
2022-12-27 19:49:02 +02:00
|
|
|
|
2022-12-28 19:56:13 +02:00
|
|
|
holo_user = HoloUser(msg.from_user)
|
|
|
|
|
2022-12-29 16:04:00 +02:00
|
|
|
# Check if any place provided
|
|
|
|
if len(msg.command) < 2: # Action if no place provided
|
2022-12-27 19:49:02 +02:00
|
|
|
application = col_applications.find_one({"user": msg.from_user})
|
|
|
|
if application is None:
|
2022-12-28 20:01:21 +02:00
|
|
|
await msg.reply_text(locale("nearby_user_empty", "message", locale=holo_user))
|
2022-12-27 19:49:02 +02:00
|
|
|
return
|
|
|
|
location = application["application"]["3"]["loc"][0], application["application"]["3"]["loc"][1]
|
2022-12-29 16:04:00 +02:00
|
|
|
else: # Find a place from input query
|
2022-12-28 19:56:13 +02:00
|
|
|
try:
|
|
|
|
location_coordinates = find_location(" ".join(msg.command[2:]))
|
|
|
|
location = location_coordinates["lng"], location_coordinates["lat"]
|
2022-12-29 16:04:00 +02:00
|
|
|
except PlaceNotFoundError: # Place is not found
|
2022-12-28 20:01:21 +02:00
|
|
|
await msg.reply_text(locale("nearby_invalid", "message", locale=holo_user), quote=should_quote(msg))
|
2022-12-28 19:56:13 +02:00
|
|
|
return
|
2022-12-29 16:04:00 +02:00
|
|
|
except Exception as exp: # Error occurred while finding the place
|
|
|
|
await msg.reply_text(locale("nearby_error", "message", locale=holo_user).format(exp, print_exc()), quote=should_quote(msg))
|
2022-12-28 19:56:13 +02:00
|
|
|
return
|
2022-12-27 19:49:02 +02:00
|
|
|
|
2022-12-29 16:04:00 +02:00
|
|
|
# Find all users registered in the area provided
|
2022-12-27 19:49:02 +02:00
|
|
|
output = []
|
2022-12-28 19:56:13 +02:00
|
|
|
users_nearby = col_applications.find( {"application.loc": {"$near": { "$geometry": { "type": "Point", "coordinates": location }, "$maxDistance": 30000 }} } )
|
2022-12-27 19:49:02 +02:00
|
|
|
|
|
|
|
for user in users_nearby:
|
2022-12-29 16:04:00 +02:00
|
|
|
if user["tg_username"] not in [None, "None", ""]: # Check if user has any name
|
|
|
|
output.append(f'• {user["tg_name"]} (@{user["tg_username"]}):\n {user["application"]["3"]["Name"]}, {user["application"]["3"]["adminName1"]}')
|
|
|
|
else:
|
|
|
|
output.append(f'• {user["tg_name"]}:\n {user["application"]["3"]["Name"]}, {user["application"]["3"]["adminName1"]}')
|
2022-12-27 19:49:02 +02:00
|
|
|
|
2022-12-29 16:04:00 +02:00
|
|
|
# Check if any users found
|
|
|
|
if len(output) > 0:
|
|
|
|
await msg.reply_text(locale("nearby_result", "message", locale=holo_user).format("\n".join(output)), quote=should_quote(msg))
|
|
|
|
else:
|
|
|
|
await msg.reply_text(locale("nearby_empty", "message", locale=holo_user), quote=should_quote(msg))
|
2022-12-27 19:49:02 +02:00
|
|
|
|
2022-12-15 16:00:38 +02:00
|
|
|
# if not path.exists(f"{configGet('data', 'locations')}{sep}sponsors{sep}{msg.from_user.id}.json"):
|
|
|
|
# jsonSave(jsonLoad(f"{configGet('data', 'locations')}{sep}sponsor_default.json"), f"{configGet('data', 'locations')}{sep}sponsors{sep}{msg.from_user.id}.json")
|
|
|
|
# sponsor = jsonLoad(f"{configGet('data', 'locations')}{sep}sponsors{sep}{msg.from_user.id}.json")
|
|
|
|
# if sponsor["approved"]:
|
|
|
|
# if sponsor["expires"] is not None:
|
|
|
|
# if datetime.strptime(sponsor["expires"], "%d.%m.%Y") > datetime.now():
|
|
|
|
# await msg.reply_text(f"You have an active sub til **{sponsor['expires']}**.")
|
|
|
|
# else:
|
|
|
|
# await msg.reply_text(f"Your sub expired {int((datetime.now()-datetime.strptime(sponsor['expires'], '%d.%m.%Y')).days)} days ago.")
|
|
|
|
# elif sponsor["approved"]:
|
|
|
|
# await msg.reply_text(f"Your sub expiration date is not valid.")
|
|
|
|
# else:
|
|
|
|
# await msg.reply_text(f"You have no active subscription.")
|
|
|
|
# ==============================================================================================================================
|