170 lines
6.9 KiB
Python
170 lines
6.9 KiB
Python
|
import config
|
||
|
# import random
|
||
|
import asyncio
|
||
|
import discord
|
||
|
import subprocess
|
||
|
|
||
|
from garfpy import(
|
||
|
logger, is_private,
|
||
|
kroger_token, find_store, search_product,
|
||
|
picture_time, process_image_requests, generate_chat,
|
||
|
aod_message)
|
||
|
|
||
|
|
||
|
gapikey = config.GIF_TOKEN
|
||
|
garfkey = config.GARFBOT_TOKEN
|
||
|
txtmodel = config.TXT_MODEL
|
||
|
imgmodel = config.IMG_MODEL
|
||
|
|
||
|
intents = discord.Intents.default()
|
||
|
intents.members = True
|
||
|
intents.messages = True
|
||
|
intents.message_content = True
|
||
|
garfbot = discord.Client(intents=intents)
|
||
|
|
||
|
|
||
|
@garfbot.event
|
||
|
async def on_ready():
|
||
|
try:
|
||
|
asyncio.create_task(process_image_requests())
|
||
|
logger.info(f"Logged in as {garfbot.user.name} running {txtmodel} and {imgmodel}.")
|
||
|
except Exception as e:
|
||
|
logger.error(e)
|
||
|
|
||
|
|
||
|
@garfbot.event
|
||
|
async def on_message(message):
|
||
|
if message.author == garfbot.user:
|
||
|
return
|
||
|
|
||
|
if message.content.lower().startswith("hey garfield") or isinstance(message.channel, discord.DMChannel):
|
||
|
question = message.content[12:] if message.content.lower().startswith("hey garfield") else message.content
|
||
|
answer = await generate_chat(question)
|
||
|
await message.channel.send(answer)
|
||
|
|
||
|
if message.content.lower().startswith('garfpic '):
|
||
|
user = message.author.name
|
||
|
server = message.guild.name if message.guild else "Direct Message"
|
||
|
prompt = message.content[8:]
|
||
|
logger.info(f"Image Request - User: {user}, Server: {server}, Prompt: {prompt}")
|
||
|
await message.channel.send(f"`Please wait... image generation queued: {prompt}`")
|
||
|
await picture_time(message, prompt)
|
||
|
|
||
|
# if message.content.lower() == "lasagna":
|
||
|
# await send_gif(message, "garfield lasagna")
|
||
|
|
||
|
# if message.content.lower() == "monday":
|
||
|
# await send_gif(message, "garfield monday")
|
||
|
|
||
|
# if message.content.lower().startswith("garfgif "):
|
||
|
# search_term = message.content[8:]
|
||
|
# await send_gif(message, search_term)
|
||
|
|
||
|
if message.content.lower().startswith("garfping "):
|
||
|
try:
|
||
|
query = message.content.split()
|
||
|
user = message.author.name
|
||
|
server = message.guild.name if message.guild else "Direct Message"
|
||
|
target = query[-1]
|
||
|
logger.info(f"Ping Request - User: {user}, Server: {server}, Target: {target}")
|
||
|
if is_private(target):
|
||
|
rejection = await 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 message.content.lower().startswith("garfdns "):
|
||
|
try:
|
||
|
query = message.content.split()
|
||
|
user = message.author.name
|
||
|
server = message.guild.name if message.guild else "Direct Message"
|
||
|
target = query[-1]
|
||
|
logger.info(f"NSLookup Request - User: {user}, Server: {server}, Target: {target}")
|
||
|
if is_private(target):
|
||
|
rejection = await 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 message.content.lower().startswith("garfhack "):
|
||
|
try:
|
||
|
query = message.content.split()
|
||
|
user = message.author.name
|
||
|
server = message.guild.name if message.guild else "Direct Message"
|
||
|
target = query[-1]
|
||
|
logger.info(f"Nmap Request - User: {user}, Server: {server}, Target: {target}")
|
||
|
if is_private(target):
|
||
|
rejection = await 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 message.content.lower().startswith("garfshop "):
|
||
|
try:
|
||
|
kroken = kroger_token()
|
||
|
kroger_query = message.content.split()
|
||
|
product = " ".join(kroger_query[1:-1])
|
||
|
zipcode = kroger_query[-1]
|
||
|
loc_data = find_store(zipcode, kroken)
|
||
|
loc_id = loc_data['data'][0]['locationId']
|
||
|
store_name = loc_data['data'][0]['name']
|
||
|
product_query = search_product(product, loc_id, kroken)
|
||
|
products = product_query['data']
|
||
|
sorted_products = sorted(products, key=lambda item: item['items'][0]['price']['regular'])
|
||
|
response = f"Prices for `{product}` at `{store_name}` near `{zipcode}`:\n"
|
||
|
for item in sorted_products:
|
||
|
product_name = item['description']
|
||
|
price = item['items'][0]['price']['regular']
|
||
|
response += f"- `${price}`: {product_name} \n"
|
||
|
await message.channel.send(response)
|
||
|
except Exception as e:
|
||
|
await message.channel.send(f"`GarfBot Error: {str(e)}`")
|
||
|
|
||
|
# Army of Dawn Server only!!
|
||
|
if message.guild and message.guild.id == 719605634772893757:
|
||
|
|
||
|
await aod_message(garfbot, message)
|
||
|
|
||
|
|
||
|
# # GarfGifs
|
||
|
# @garfbot.event
|
||
|
# async def send_gif(message, search_term):
|
||
|
# lmt = 50
|
||
|
# ckey = "garfbot"
|
||
|
# r = requests.get(f"https://tenor.googleapis.com/v2/search?q={search_term}&key={gapikey}&client_key={ckey}&limit={lmt}")
|
||
|
# if r.status_code == 200:
|
||
|
# top_50gifs = json.loads(r.content)
|
||
|
# gif_url = random.choice(top_50gifs["results"])["itemurl"]
|
||
|
# logger.info(gif_url)
|
||
|
# # logger.info(gif_url)
|
||
|
# try:
|
||
|
# await message.channel.send(gif_url)
|
||
|
# except KeyError:
|
||
|
# await message.channel.send("Oops, something went wrong.")
|
||
|
# else:
|
||
|
# await message.channel.send(f"`Oops, something went wrong. Error code: {r.status_code}`")
|
||
|
|
||
|
|
||
|
async def garfbot_connect():
|
||
|
while True:
|
||
|
try:
|
||
|
await garfbot.start(garfkey)
|
||
|
except Exception as e:
|
||
|
e = str(e)
|
||
|
logger.error(f"Garfbot couldn't connect! {e}")
|
||
|
await asyncio.sleep(60)
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
asyncio.run(garfbot_connect())
|