119 lines
4 KiB
Python
119 lines
4 KiB
Python
import re
|
|
|
|
import aiohttp
|
|
import discord
|
|
from discord.ext import commands
|
|
from bot import TuxBot
|
|
import socket
|
|
|
|
from .utils.lang import Texts
|
|
|
|
|
|
class Utility(commands.Cog):
|
|
|
|
def __init__(self, bot: TuxBot):
|
|
self.bot = bot
|
|
|
|
"""---------------------------------------------------------------------"""
|
|
|
|
@commands.command(name='iplocalise')
|
|
async def _iplocalise(self, ctx: commands.Context, addr, ip_type=''):
|
|
addr = re.sub(r'http(s?)://', '', addr)
|
|
addr = addr[:-1] if addr.endswith('/') else addr
|
|
|
|
await ctx.trigger_typing()
|
|
|
|
if ip_type in ('v6', 'ipv6'):
|
|
try:
|
|
ip = socket.getaddrinfo(addr, None, socket.AF_INET6)[1][4][0]
|
|
except socket.gaierror:
|
|
return await ctx.send(
|
|
Texts('utility').get('ipv6 not available'))
|
|
else:
|
|
ip = socket.gethostbyname(addr)
|
|
|
|
async with self.bot.session.get(f"http://ip-api.com/json/{ip}") as s:
|
|
response: dict = await s.json()
|
|
|
|
if response.get('status') == 'success':
|
|
e = discord.Embed(
|
|
title=f"{Texts('utility').get('Information for')} "
|
|
f"``{addr}`` *`({response.get('query')})`*",
|
|
color=0x5858d7
|
|
)
|
|
|
|
e.add_field(
|
|
name=Texts('utility').get('Belongs to :'),
|
|
value=response.get('org', 'N/A'),
|
|
inline=False
|
|
)
|
|
|
|
e.add_field(
|
|
name=Texts('utility').get('Is located at :'),
|
|
value=response.get('city', 'N/A'),
|
|
inline=True
|
|
)
|
|
|
|
e.add_field(
|
|
name="Region :",
|
|
value=f"{response.get('regionName', 'N/A')} "
|
|
f"({response.get('country', 'N/A')})",
|
|
inline=True
|
|
)
|
|
|
|
e.set_thumbnail(
|
|
url=f"https://www.countryflags.io/"
|
|
f"{response.get('countryCode')}/flat/64.png")
|
|
|
|
await ctx.send(embed=e)
|
|
else:
|
|
await ctx.send(
|
|
content=f"{Texts('utility').get('info not available')}"
|
|
f"``{response.get('query')}``")
|
|
|
|
"""---------------------------------------------------------------------"""
|
|
|
|
@commands.command(name='getheaders')
|
|
async def _getheaders(self, ctx: commands.Context, addr: str):
|
|
if (addr.startswith('http') or addr.startswith('ftp')) is not True:
|
|
addr = f"http://{addr}"
|
|
|
|
try:
|
|
async with self.bot.session.get(addr) as s:
|
|
await ctx.trigger_typing()
|
|
e = discord.Embed(
|
|
title=f"{Texts('utility').get('Headers of')} {addr}",
|
|
color=0xd75858
|
|
)
|
|
e.add_field(name="Status", value=s.status, inline=True)
|
|
e.set_thumbnail(url=f"https://http.cat/{s.status}")
|
|
|
|
headers = dict(s.headers.items())
|
|
headers.pop('Set-Cookie', headers)
|
|
|
|
for key, value in headers.items():
|
|
e.add_field(name=key, value=value, inline=True)
|
|
await ctx.send(embed=e)
|
|
|
|
except aiohttp.client_exceptions.ClientConnectorError:
|
|
await ctx.send(f"{Texts('utility').get('Cannot connect to host')} "
|
|
f"{addr}")
|
|
|
|
"""---------------------------------------------------------------------"""
|
|
|
|
@commands.command(name='git', aliases=['sources', 'source', 'github'])
|
|
async def _git(self, ctx):
|
|
e = discord.Embed(
|
|
title=Texts('utility').get('git repo'),
|
|
description=Texts('utility').get('git text'),
|
|
colour=0xE9D460
|
|
)
|
|
e.set_author(
|
|
name='Gnous',
|
|
icon_url="https://cdn.gnous.eu/logo1.png"
|
|
)
|
|
await ctx.send(embed=e)
|
|
|
|
|
|
def setup(bot: TuxBot):
|
|
bot.add_cog(Utility(bot))
|