|
7 | 7 | Information Superhighway (yes, Internet). """ |
8 | 8 |
|
9 | 9 | from datetime import datetime |
10 | | -import io |
11 | | -import speedtest |
| 10 | + |
| 11 | +from speedtest import Speedtest |
12 | 12 | from telethon import functions |
13 | | -from userbot import CMD_HELP, bot |
| 13 | +from userbot import CMD_HELP |
14 | 14 | from userbot.events import register |
15 | 15 |
|
16 | 16 |
|
17 | | -@register(outgoing=True, pattern="^.speedtest(?: |$)(.*)") |
18 | | -async def _(event): |
19 | | - if event.fwd_from: |
20 | | - return |
21 | | - input_str = event.pattern_match.group(1) |
22 | | - as_text = False |
23 | | - as_document = True |
24 | | - if input_str == "image": |
25 | | - as_document = False |
26 | | - elif input_str == "file": |
27 | | - as_document = True |
28 | | - elif input_str == "text": |
29 | | - as_text = True |
30 | | - await event.edit("Calculating my internet speed. Please wait!") |
31 | | - start = datetime.now() |
32 | | - s = speedtest.Speedtest() |
33 | | - s.get_best_server() |
34 | | - s.download() |
35 | | - s.upload() |
36 | | - end = datetime.now() |
37 | | - ms = (end - start).microseconds / 1000 |
38 | | - response = s.results.dict() |
39 | | - download_speed = response.get("download") |
40 | | - upload_speed = response.get("upload") |
41 | | - ping_time = response.get("ping") |
42 | | - client_infos = response.get("client") |
43 | | - i_s_p = client_infos.get("isp") |
44 | | - i_s_p_rating = client_infos.get("isprating") |
45 | | - reply_msg_id = event.message.id |
46 | | - if event.reply_to_msg_id: |
47 | | - reply_msg_id = event.reply_to_msg_id |
48 | | - try: |
49 | | - response = s.results.share() |
50 | | - speedtest_image = response |
51 | | - if as_text: |
52 | | - await event.edit("""**SpeedTest** completed in {} seconds |
53 | | -Download: {} |
54 | | -Upload: {} |
55 | | -Ping: {} |
56 | | -Internet Service Provider: {} |
57 | | -ISP Rating: {}""".format(ms, convert_from_bytes(download_speed), convert_from_bytes(upload_speed), ping_time, i_s_p, i_s_p_rating)) |
58 | | - else: |
59 | | - await bot.send_file( |
60 | | - event.chat_id, |
61 | | - speedtest_image, |
62 | | - caption="**SpeedTest** completed in {} seconds".format(ms), |
63 | | - force_document=as_document, |
64 | | - reply_to=reply_msg_id, |
65 | | - allow_cache=False |
66 | | - ) |
67 | | - await event.delete() |
68 | | - except Exception as exc: |
69 | | - await event.edit("""**SpeedTest** completed in {} seconds |
70 | | -Download: {} |
71 | | -Upload: {} |
72 | | -Ping: {} |
| 17 | +@register(outgoing=True, pattern="^.speed$") |
| 18 | +async def speedtst(spd): |
| 19 | + """ For .speed command, use SpeedTest to check server speeds. """ |
| 20 | + await spd.edit("`Running speed test . . .`") |
| 21 | + test = Speedtest() |
| 22 | + |
| 23 | + test.get_best_server() |
| 24 | + test.download() |
| 25 | + test.upload() |
| 26 | + test.results.share() |
| 27 | + result = test.results.dict() |
73 | 28 |
|
74 | | -__With the Following ERRORs__ |
75 | | -{}""".format(ms, convert_from_bytes(download_speed), convert_from_bytes(upload_speed), ping_time, str(exc))) |
| 29 | + await spd.edit("`" |
| 30 | + "Started at " |
| 31 | + f"{result['timestamp']} \n\n" |
| 32 | + "Download " |
| 33 | + f"{speed_convert(result['download'])} \n" |
| 34 | + "Upload " |
| 35 | + f"{speed_convert(result['upload'])} \n" |
| 36 | + "Ping " |
| 37 | + f"{result['ping']} \n" |
| 38 | + "ISP " |
| 39 | + f"{result['client']['isp']}" |
| 40 | + "`") |
76 | 41 |
|
77 | 42 |
|
78 | | -def convert_from_bytes(size): |
| 43 | +def speed_convert(size): |
| 44 | + """ |
| 45 | + Hi human, you can't read bytes? |
| 46 | + """ |
79 | 47 | power = 2**10 |
80 | | - n = 0 |
81 | | - units = { |
82 | | - 0: "", |
83 | | - 1: "kilobytes", |
84 | | - 2: "megabytes", |
85 | | - 3: "gigabytes", |
86 | | - 4: "terabytes" |
87 | | - } |
| 48 | + zero = 0 |
| 49 | + units = {0: '', 1: 'Kb/s', 2: 'Mb/s', 3: 'Gb/s', 4: 'Tb/s'} |
88 | 50 | while size > power: |
89 | 51 | size /= power |
90 | | - n += 1 |
91 | | - return f"{round(size, 2)} {units[n]}" |
| 52 | + zero += 1 |
| 53 | + return f"{round(size, 2)} {units[zero]}" |
92 | 54 |
|
93 | 55 |
|
94 | 56 | @register(outgoing=True, pattern="^.dc$") |
|
0 commit comments