Skip to content

Commit

Permalink
Add IpLocationPlugin to PluginManager
Browse files Browse the repository at this point in the history
  • Loading branch information
mac-zhou committed Mar 19, 2024
1 parent dc51eb0 commit 23b5cde
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 1 deletion.
4 changes: 3 additions & 1 deletion bot/plugin_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
from plugins.worldtimeapi import WorldTimeApiPlugin
from plugins.whois_ import WhoisPlugin
from plugins.webshot import WebshotPlugin
from plugins.iplocation import IpLocationPlugin


class PluginManager:
Expand All @@ -40,6 +41,7 @@ def __init__(self, config):
'auto_tts': AutoTextToSpeech,
'whois': WhoisPlugin,
'webshot': WebshotPlugin,
'iplocation': IpLocationPlugin,
}
self.plugins = [plugin_mapping[plugin]() for plugin in enabled_plugins if plugin in plugin_mapping]

Expand Down Expand Up @@ -69,4 +71,4 @@ def get_plugin_source_name(self, function_name) -> str:

def __get_plugin_by_function_name(self, function_name):
return next((plugin for plugin in self.plugins
if function_name in map(lambda spec: spec.get('name'), plugin.get_spec())), None)
if function_name in map(lambda spec: spec.get('name'), plugin.get_spec())), None)
44 changes: 44 additions & 0 deletions bot/plugins/iplocation.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
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)}

0 comments on commit 23b5cde

Please sign in to comment.