Compare commits

3 Commits

Author SHA1 Message Date
4880229e26 boy you said it 2026-03-26 16:48:26 -05:00
bfef23eb72 revert URL cleaning and update year on license
All checks were successful
Garfbot CI/CD Deployment / Deploy (push) Successful in 16s
2026-03-14 22:50:23 -05:00
940b6b80d9 yolo
All checks were successful
Garfbot CI/CD Deployment / Deploy (push) Successful in 59s
2026-03-07 14:15:08 -06:00
3 changed files with 61 additions and 1 deletions

View File

@@ -1,6 +1,6 @@
MIT No Attribution
Copyright 2025 Aaron Crate
Copyright 2026 Aaron Crate
Permission is hereby granted, free of charge, to any person obtaining a copy of this
software and associated documentation files (the "Software"), to deal in the Software

View File

@@ -1,7 +1,9 @@
import re
import config
import asyncio
import discord
from discord.ext import commands
from urllib.parse import urlparse, parse_qs
from garfpy import (
help,
@@ -40,6 +42,36 @@ kroger = Kroger()
weather = WeatherAPI()
URL_PATTERNS = [
r'https?://(?:www\.)?youtube\.com/watch\?[^\s]*',
r'https?://youtu\.be/[^\s]*',
r'https?://(?:open\.)?spotify\.com/[^\s]*',
]
def clean_url(url):
try:
parsed = urlparse(url)
if 'youtube.com' in parsed.hostname:
params = parse_qs(parsed.query)
video_id = params.get('v', [None])[0]
if not video_id:
return None
# timestamp = params.get('t', [None])[0]
# if timestamp:
# return f"https://www.youtube.com/watch?v={video_id}&t={timestamp}"
return f"https://www.youtube.com/watch?v={video_id}"
if 'youtu.be' in parsed.hostname:
return f"https://youtu.be{parsed.path}"
if 'spotify.com' in parsed.hostname:
return f"https://open.spotify.com{parsed.path}"
except Exception:
return None
@garfbot.event
async def on_ready():
try:
@@ -151,6 +183,19 @@ async def on_message(message):
content = message.content.strip()
lower = content.lower()
# # Remove tracking stuff from youtube and spotify links
# cleaned_urls = []
# for pattern in URL_PATTERNS:
# for match in re.finditer(pattern, message.content):
# cleaned = clean_url(match.group(0))
# if cleaned and cleaned != match.group(0):
# cleaned_urls.append(cleaned)
# if cleaned_urls:
# links = '\n'.join(cleaned_urls)
# await message.reply(f"🔗 Cleaned link{'s' if len(cleaned_urls) > 1 else ''}:\n{links}")
# Chats & pics
if lower.startswith("hey garfield") or isinstance(
message.channel, discord.DMChannel

View File

@@ -1,4 +1,5 @@
import os
import re
import json
import discord
from garfpy import logger
@@ -121,3 +122,17 @@ async def aod_message(garfbot, message):
for field, values in zip(table_fields, table_columns):
stats_embed.add_field(name=field, value="\n".join(values), inline=True)
await message.channel.send(embed=stats_embed)
# Boy You Said It
words = re.findall(r"[a-zA-Z']+", message.content.lower())
stops = {"a", "an", "the", "and", "or", "but", "is", "it", "in", "on", "at", "to", "of"}
words = [w for w in words if w not in stops]
if words:
firsts = [w[0] for w in words]
commons = max(set(firsts), key=firsts.count)
count = firsts.count(commons)
if count >= 3 or (len(words) >= 2 and count / len(words) >= 0.75):
await message.channel.send("Boy, you said it!")