mirror of
https://github.com/aljazceru/chatgpt-telegram-bot.git
synced 2025-12-18 21:25:10 +01:00
45 lines
1.6 KiB
Python
45 lines
1.6 KiB
Python
import requests
|
|
from typing import Dict
|
|
|
|
from .plugin import Plugin
|
|
|
|
class IpLocationPlugin(Plugin):
|
|
"""
|
|
A plugin to get geolocation and other information for a given IP address
|
|
"""
|
|
|
|
def get_source_name(self) -> str:
|
|
return "IP.FM"
|
|
|
|
def get_spec(self) -> [Dict]:
|
|
return [{
|
|
"name": "iplocaion",
|
|
"description": "Get information for an IP address using the IP.FM API.",
|
|
"parameters": {
|
|
"type": "object",
|
|
"properties": {
|
|
"ip": {"type": "string", "description": "IP Address"}
|
|
},
|
|
"required": ["ip"],
|
|
},
|
|
}]
|
|
|
|
async def execute(self, function_name, helper, **kwargs) -> Dict:
|
|
ip = kwargs.get('ip')
|
|
BASE_URL = "https://api.ip.fm/?ip={}"
|
|
url = BASE_URL.format(ip)
|
|
try:
|
|
response = requests.get(url)
|
|
response_data = response.json()
|
|
country = response_data.get('data', {}).get('country', "None")
|
|
subdivisions = response_data.get('data', {}).get('subdivisions', "None")
|
|
city = response_data.get('data', {}).get('city', "None")
|
|
location = ', '.join(filter(None, [country, subdivisions, city])) or "None"
|
|
|
|
asn = response_data.get('data', {}).get('asn', "None")
|
|
as_name = response_data.get('data', {}).get('as_name', "None")
|
|
as_domain = response_data.get('data', {}).get('as_domain', "None")
|
|
return {"Location": location, "ASN": asn, "AS Name": as_name, "AS Domain": as_domain}
|
|
except Exception as e:
|
|
return {"Error": str(e)}
|