looks good

This commit is contained in:
crate 2025-06-05 16:25:45 -05:00
parent 353284b2c3
commit 2415a8146d
3 changed files with 93 additions and 83 deletions

View File

@ -1,10 +1,9 @@
import config
import asyncio
import discord
import subprocess
from garfpy import(
logger, is_private,
logger, IPUtils,
aod_message, generate_qr,
Kroger, GarfAI, GarfbotRespond)
@ -22,9 +21,11 @@ garfbot = discord.Client(intents=intents)
garf_respond = GarfbotRespond()
garfield = GarfAI()
iputils = IPUtils()
kroger = Kroger()
@garfbot.event
async def on_ready():
try:
@ -37,28 +38,18 @@ async def on_ready():
@garfbot.event
async def on_message(message):
content = message.content.strip()
lower = content.lower()
user = message.author.name
guild = message.guild.name if message.guild else "Direct Message"
guild_id = message.guild.id
# Chats & pics
if message.author == garfbot.user:
return
content = message.content.strip()
lower = content.lower()
user_name = message.author.name
guild_id = message.guild.id
guild_name = message.guild.name if message.guild else "Direct Message"
if lower.startswith("hey garfield") or isinstance(message.channel, discord.DMChannel):
prompt = content[12:] if lower.startswith("hey garfield") else message.content
answer = await garfield.generate_chat(prompt)
logger.info(f"Chat Request - User: {user}, Server: {guild}, Prompt: {prompt}")
await message.channel.send(answer)
if lower.startswith('garfpic '):
prompt = content[8:]
logger.info(f"Image Request - User: {user}, Server: {guild}, Prompt: {prompt}")
await message.channel.send(f"`Please wait... image generation queued: {prompt}`")
await garfield.garfpic(message, prompt)
# IP utils
if message.guild and lower.startswith(("garfping ", "garfdns ", "garfhack ")):
await iputils.scan(message, user_name, guild_name, lower)
# Wikipedia
if lower.startswith('garfwiki '):
@ -80,47 +71,6 @@ async def on_message(message):
logger.error(e)
await message.channel.send(e)
# IP utils
query = message.content.split()
target = query[-1]
if lower.startswith("garfping "):
try:
logger.info(f"Ping Request - User: {user}, Server: {guild}, Target: {target}")
if is_private(target):
rejection = await garfield.generate_chat("Hey Garfield, explain to me why I am dumb for trying to hack your private computer network.")
await message.channel.send(rejection)
else:
result = subprocess.run(['ping', '-c', '4', target], capture_output=True, text=True)
await message.channel.send(f"`Ping result for {target}:`\n```\n{result.stdout}\n```")
except Exception as e:
await message.channel.send(f"`GarfBot Error: {str(e)}`")
if lower.startswith("garfdns "):
try:
logger.info(f"NSLookup Request - User: {user}, Server: {guild}, Target: {target}")
if is_private(target):
rejection = await garfield.generate_chat("Hey Garfield, explain to me why I am dumb for trying to hack your private computer network.")
await message.channel.send(rejection)
else:
result = subprocess.run(['nslookup', target], capture_output=True, text=True)
await message.channel.send(f"`NSLookup result for {target}:`\n```\n{result.stdout}\n```")
except Exception as e:
await message.channel.send(f"`GarfBot Error: {str(e)}`")
if lower.startswith("garfhack "):
try:
logger.info(f"Nmap Request - User: {user}, Server: {guild}, Target: {target}")
if is_private(target):
rejection = await garfield.generate_chat("Hey Garfield, explain to me why I am dumb for trying to hack your private computer network.")
await message.channel.send(rejection)
else:
await message.channel.send(f"`Scanning {target}...`")
result = subprocess.run(['nmap', '-Pn', '-O', '-v', target], capture_output=True, text=True)
await message.channel.send(f"`Ping result for {target}:`\n```\n{result.stdout}\n```")
except Exception as e:
await message.channel.send(f"`GarfBot Error: {str(e)}`")
# Kroger Shopping
if lower.startswith("garfshop "):
try:
@ -147,6 +97,20 @@ async def on_message(message):
await message.channel.send(response)
break
# Chats & pics
elif lower.startswith("hey garfield") or isinstance(message.channel, discord.DMChannel):
prompt = content[12:] if lower.startswith("hey garfield") else message.content
answer = await garfield.generate_chat(prompt)
logger.info(f"Chat Request - User: {user_name}, Server: {guild_name}, Prompt: {prompt}")
await message.channel.send(answer)
elif lower.startswith('garfpic '):
prompt = content[8:]
logger.info(f"Image Request - User: {user_name}, Server: {guild_name}, Prompt: {prompt}")
await message.channel.send(f"`Please wait... image generation queued: {prompt}`")
await garfield.garfpic(message, prompt)
# Run Garfbot
async def garfbot_connect():
while True:

View File

@ -2,9 +2,10 @@
from .log import logger
from .kroger import Kroger
from .iputils import is_private
from .aod import aod_message
from .qr import generate_qr
# from .iputils import scan
from .kroger import Kroger
from .garfai import GarfAI
from .respond import GarfbotRespond
from .respond import GarfbotRespond
from .aod import aod_message
from .qr import generate_qr
from .iputils import IPUtils

View File

@ -1,19 +1,64 @@
import discord
import ipaddress
import subprocess
from garfpy import logger
def is_private(target):
try:
ip_obj = ipaddress.ip_address(target)
if ip_obj.is_private:
return True
except ValueError:
if "crate.lan" in target.lower():
return True
if "crate.zip" in target.lower():
return True
if "memtec.org" in target.lower():
return True
if "crateit.net" in target.lower():
return True
if "garfbot.art" in target.lower():
return True
return False
class IPUtils:
def is_private(self, target):
try:
ip_obj = ipaddress.ip_address(target)
if ip_obj.is_private:
return True
except ValueError:
if "crate.lan" in target.lower():
return True
if "crate.zip" in target.lower():
return True
if "memtec.org" in target.lower():
return True
if "crateit.net" in target.lower():
return True
if "garfbot.art" in target.lower():
return True
return False
async def scan(self, message, user, guild, query):
split = query.split()
target = split[-1]
if self.is_private(target):
return
if query.startswith("garfping "):
try:
logger.info(f"Ping Request - User: {user}, Server: {guild}, Target: {target}")
await message.channel.send(f"`Pinging {target}...`")
result = subprocess.run(['ping', '-c', '4', target], capture_output=True, text=True)
embed = discord.Embed(title=f"Ping result:", color=0x4d4d4d)
embed.add_field(name=target, value=f"```{result.stdout}```")
await message.channel.send(embed=embed)
except Exception as e:
await message.channel.send(f"`GarfBot Error: {str(e)}`")
if query.startswith("garfdns "):
try:
logger.info(f"NSLookup Request - User: {user}, Server: {guild}, Target: {target}")
await message.channel.send(f"`Requesting {target}...`")
result = subprocess.run(['nslookup', target], capture_output=True, text=True)
embed = discord.Embed(title=f"NSLookup result:", color=0x4d4d4d)
embed.add_field(name=target, value=f"```{result.stdout}```")
await message.channel.send(embed=embed)
except Exception as e:
await message.channel.send(f"`GarfBot Error: {str(e)}`")
if query.startswith("garfhack "):
try:
logger.info(f"Nmap Request - User: {user}, Server: {guild}, Target: {target}")
await message.channel.send(f"`Scanning {target}...`")
result = subprocess.run(['nmap', '-Pn', '-O', '-v', target], capture_output=True, text=True)
embed = discord.Embed(title=f"Nmap scan result:", color=0x4d4d4d)
embed.add_field(name=target, value=f"```{result.stdout}```")
embed.set_footer(text="https://nmap.org/")
await message.channel.send(embed=embed)
except Exception as e:
await message.channel.send(f"`GarfBot Error: {str(e)}`")