Improved /nearby

This commit is contained in:
Profitroll
2022-12-30 23:29:17 +01:00
parent e6589fc3e5
commit 25be843cd8
4 changed files with 23 additions and 14 deletions

View File

@@ -5,8 +5,9 @@ from pyrogram.types import Message
from pyrogram.client import Client
from classes.holo_user import HoloUser
from modules import custom_filters
from modules.logging import logWrite
from modules.utils import configGet, locale, should_quote, find_location
from modules.database import col_applications
from modules.database import col_applications, col_users
from classes.errors.geo import PlaceNotFoundError
# Nearby command ===============================================================================================================
@@ -16,16 +17,17 @@ async def cmd_nearby(app: Client, msg: Message):
holo_user = HoloUser(msg.from_user)
# Check if any place provided
if len(msg.command) < 2: # Action if no place provided
application = col_applications.find_one({"user": msg.from_user})
if len(msg.command) == 1: # Action if no place provided
application = col_applications.find_one({"user": msg.from_user.id})
if application is None:
await msg.reply_text(locale("nearby_user_empty", "message", locale=holo_user))
return
location = application["application"]["3"]["loc"][0], application["application"]["3"]["loc"][1]
else: # Find a place from input query
logWrite(f"Looking for the location by query '{' '.join(msg.command[1:])}'")
try:
location_coordinates = find_location(" ".join(msg.command[2:]))
location = location_coordinates["lng"], location_coordinates["lat"]
location_coordinates = find_location(" ".join(msg.command[1:]))
location = float(location_coordinates["lng"]), float(location_coordinates["lat"])
except PlaceNotFoundError: # Place is not found
await msg.reply_text(locale("nearby_invalid", "message", locale=holo_user), quote=should_quote(msg))
return
@@ -35,13 +37,19 @@ async def cmd_nearby(app: Client, msg: Message):
# Find all users registered in the area provided
output = []
users_nearby = col_applications.find( {"application.loc": {"$near": { "$geometry": { "type": "Point", "coordinates": location }, "$maxDistance": 30000 }} } )
applications_nearby = col_applications.find( {"application.3.loc": { "$nearSphere": {"$geometry": {"type": "Point", "coordinates": [location[0], location[1]]}, "$maxDistance": configGet("search_radius")*1000} } } )
# {"application": {"3": {"loc": {"$near": { "$geometry": { "type": "Point", "coordinates": location }, "$maxDistance": 30000 }} } } } )
for user in users_nearby:
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"]}')
for entry in applications_nearby:
if not entry["user"] == msg.from_user.id:
user = col_users.find_one( {"user": entry["user"]} )
if user is not None:
if user["tg_username"] not in [None, "None", ""]: # Check if user has any name
output.append(f'{user["tg_name"]} (@{user["tg_username"]}):\n {entry["application"]["3"]["name"]}, {entry["application"]["3"]["adminName1"]}')
else:
output.append(f'{user["tg_name"]}:\n {entry["application"]["3"]["name"]}, {entry["application"]["3"]["adminName1"]}')
logWrite(f"{holo_user.id} tried to find someone nearby {location[1]} {location[0]} in the radius of {configGet('search_radius')} kilometers")
# Check if any users found
if len(output) > 0: