-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathip.py
67 lines (48 loc) · 2.09 KB
/
ip.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import humanize
import telegram
from datetime import datetime
from modules import RaspOneBaseModule
class ModuleIp(RaspOneBaseModule):
NAME = "ip"
DESCRIPTION = "Get public IP address of the server"
USAGE = {
"get": "Get IP address\n"
"_More_: `/ip get ipv6`",
"list": "Get list of previous logged IP addresses"
}
def __init__(self, core):
super().__init__(core)
self.api_url = "https://api.ipify.org"
self.api64_url = "https://api64.ipify.org"
self.history = []
self.last_ip = self.prev_ip = None
async def command(self, update, context):
message = ""
if context.args[0] == "get":
ipv6 = False
if len(context.args) == 2 and context.args[1] == "ipv6":
ipv6 = True
ip, err = self.get_ip_address(ipv6)
if err:
message = "😨 " + err
else:
message = "💻 IP: `%s`" % ip
if not len(self.history):
self.history.append((ip, datetime.now()))
elif ip != self.history[-1][0]:
self.history.append((ip, datetime.now()))
message += "\nPrevious IP was `%s` (%s ago)" % (
self.history[-2][0],
humanize.precisedelta(self.history[-2][1] - self.history[-1][1])
)
elif context.args[0] == "list":
message = "IP History:\n" + \
(("\n".join(f"💻 IP `{x[0]}` - {humanize.naturaldate(x[1])}" for x in self.history))
if len(self.history) else "_Empty_")
await update.effective_message.reply_text(message, parse_mode=telegram.constants.ParseMode.MARKDOWN)
def get_ip_address(self, ipv6=False):
curl_response, request_id = self.network.curl(self.api64_url if ipv6 else self.api_url, parse_json=False)
if not curl_response:
return None, self.network.get_error(request_id)
ip_addr = curl_response.text.replace("\n", "")
return ip_addr, None