|
|
from speedtest import Speedtest, ConfigRetrievalError |
|
|
|
|
|
from .. import LOGGER |
|
|
from ..helper.telegram_helper.message_utils import ( |
|
|
send_message, |
|
|
edit_message, |
|
|
delete_message, |
|
|
) |
|
|
from ..helper.ext_utils.bot_utils import new_task, sync_to_async |
|
|
from ..helper.ext_utils.status_utils import get_readable_file_size |
|
|
|
|
|
|
|
|
@new_task |
|
|
async def speedtest(_, message): |
|
|
speed = await send_message(message, "<i>Initiating Speedtest...</i>") |
|
|
try: |
|
|
speed_results = await sync_to_async(Speedtest) |
|
|
await sync_to_async(speed_results.get_best_server) |
|
|
await sync_to_async(speed_results.download) |
|
|
await sync_to_async(speed_results.upload) |
|
|
except ConfigRetrievalError: |
|
|
await edit_message( |
|
|
speed, |
|
|
"<b>ERROR:</b> <i>Can't connect to Server at the Moment, Try Again Later !</i>", |
|
|
) |
|
|
return |
|
|
speed_results.results.share() |
|
|
result = speed_results.results.dict() |
|
|
string_speed = f""" |
|
|
➲ <b><i>SPEEDTEST INFO</i></b> |
|
|
┠ <b>Upload:</b> <code>{get_readable_file_size(result['upload'] / 8)}/s</code> |
|
|
┠ <b>Download:</b> <code>{get_readable_file_size(result['download'] / 8)}/s</code> |
|
|
┠ <b>Ping:</b> <code>{result['ping']} ms</code> |
|
|
┠ <b>Time:</b> <code>{result['timestamp']}</code> |
|
|
┠ <b>Data Sent:</b> <code>{get_readable_file_size(int(result['bytes_sent']))}</code> |
|
|
┖ <b>Data Received:</b> <code>{get_readable_file_size(int(result['bytes_received']))}</code> |
|
|
|
|
|
➲ <b><i>SPEEDTEST SERVER</i></b> |
|
|
┠ <b>Name:</b> <code>{result['server']['name']}</code> |
|
|
┠ <b>Country:</b> <code>{result['server']['country']}, {result['server']['cc']}</code> |
|
|
┠ <b>Sponsor:</b> <code>{result['server']['sponsor']}</code> |
|
|
┠ <b>Latency:</b> <code>{result['server']['latency']}</code> |
|
|
┠ <b>Latitude:</b> <code>{result['server']['lat']}</code> |
|
|
┖ <b>Longitude:</b> <code>{result['server']['lon']}</code> |
|
|
""" |
|
|
try: |
|
|
await send_message(message, string_speed, photo=result["share"]) |
|
|
await delete_message(speed) |
|
|
except Exception as e: |
|
|
LOGGER.error(str(e)) |
|
|
await edit_message(speed, string_speed) |
|
|
|