From b814cd8043e2cc56c664dcf22b8f52916582617a Mon Sep 17 00:00:00 2001 From: xtaodada Date: Wed, 10 Aug 2022 23:31:44 +0800 Subject: [PATCH] =?UTF-8?q?ip=20=E6=9F=A5=E8=AF=A2=20ip=20=E5=BD=92?= =?UTF-8?q?=E5=B1=9E=E5=9C=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ip/main.py | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 ip/main.py diff --git a/ip/main.py b/ip/main.py new file mode 100644 index 0000000..e1ca4aa --- /dev/null +++ b/ip/main.py @@ -0,0 +1,58 @@ +import contextlib +from urllib.parse import urlparse + +from pagermaid.listener import listener +from pagermaid.enums import Message +from pagermaid.services import client as requests + + +async def get_ip_info(url: str) -> str: + data = await requests.get( + f"http://ip-api.com/json/{url}?fields=status,message,country,regionName," + f"city,lat,lon,isp,org,as,mobile,proxy,hosting,query") + ipinfo_json = data.json() + if ipinfo_json['status'] == 'fail': + return "" + elif ipinfo_json['status'] == 'success': + ipinfo_list = [f"查询目标: `{url}`"] + if ipinfo_json['query'] != url: + ipinfo_list.extend(["解析地址: `" + ipinfo_json['query'] + "`"]) + ipinfo_list.extend( + [(("地区: `" + ipinfo_json['country'] + ' - ' + ipinfo_json['regionName'] + ' - ' + ipinfo_json['city']) + "`"), + "经纬度: `" + str(ipinfo_json['lat']) + ',' + str(ipinfo_json['lon']) + "`", + "ISP: `" + ipinfo_json['isp'] + "`"]) + if ipinfo_json['org'] != '': + ipinfo_list.extend(["组织: `" + ipinfo_json['org'] + "`"]) + with contextlib.suppress(Exception): + ipinfo_list.extend(['[' + ipinfo_json['as'] + '](https://bgp.he.net/' + ipinfo_json['as'].split()[0] + ')']) + if ipinfo_json['mobile']: + ipinfo_list.extend(['此 IP 可能为**蜂窝移动数据 IP**']) + if ipinfo_json['proxy']: + ipinfo_list.extend(['此 IP 可能为**代理 IP**']) + if ipinfo_json['hosting']: + ipinfo_list.extend(['此 IP 可能为**数据中心 IP**']) + return "\n".join(ipinfo_list) + + +@listener(command="ip", + description="IPINFO (或者回复一句话)", + parameters="") +async def ipinfo(message: Message): + reply = message.reply_to_message + message: Message = await message.edit('正在查询中...') + try: + if reply: + for num in range(len(reply.entities)): + url = reply.text[reply.entities[num].offset:reply.entities[num].offset + reply.entities[num].length] + url = urlparse(url) + url = url.hostname or url.path + await message.edit(await get_ip_info(url)) + return + else: + url = urlparse(message.arguments) + url = url.hostname or url.path + await message.edit(await get_ip_info(url)) + return + await message.edit('没有找到要查询的 ip/域名 ...') + except Exception: + await message.edit('没有找到要查询的 ip/域名 ...')