diff options
| author | Pinapelz <yukais@pinapelz.com> | 2026-03-22 23:53:34 -0700 |
|---|---|---|
| committer | Pinapelz <yukais@pinapelz.com> | 2026-03-23 00:17:55 -0700 |
| commit | 5e31d2870f07085e4c837a17572a3e9eedb6df26 (patch) | |
| tree | 3b97c5f1b0c139deb0bc4091595f085d754b14bd /community/wacca_plus.py | |
| parent | 8f859e4786a02fea69ec086814d4f667f2f01d5d (diff) | |
Rename SDVX parser to parse_nabla_news_site
Replace parse_exceed_gear_news_site with parse_nabla_news_site and
update imports and callers in __init__.py and news_feed.py
Diffstat (limited to 'community/wacca_plus.py')
| -rw-r--r-- | community/wacca_plus.py | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/community/wacca_plus.py b/community/wacca_plus.py new file mode 100644 index 0000000..c15bbf7 --- /dev/null +++ b/community/wacca_plus.py @@ -0,0 +1,125 @@ +from datetime import datetime +from dotenv import load_dotenv +from common import create_database_connection +from catboxpy.catbox import CatboxClient +import os +import time +import openai +import json + +from summarizer import generate_headline_and_content_from_images + +load_dotenv() + +def check_is_generation_possible(): + return os.getenv("OPENAI_API_KEY") is not None and os.getenv("DISCORD_AUTHORIZATION") is not None + + +def check_is_announcement_image(img_url: str): + openai.api_key = os.getenv("OPENAI_API_KEY") + + tools = [ + { + "type": "function", + "function": { + "name": "classify_wacca_plus_image", + "description": "Classify if an image is WACCA PLUS announcement, update, or information", + "parameters": { + "type": "object", + "properties": { + "is_wacca_plus_related": { + "type": "boolean", + "description": "Is this image related to WACCA PLUS?", + }, + "category": { + "type": "string", + "enum": ["announcement", "update", "info", "null"], + "description": "Category of image if related; otherwise null.", + }, + }, + "required": ["is_wacca_plus_related", "category"], + }, + } + } + ] + + response = openai.chat.completions.create( + model="gpt-4o", + messages=[ + { + "role": "user", + "content": [ + {"type": "text", "text": "Does this image contain official update, event, or announcement information for the game WACCA PLUS? Ignore unrelated content like gameplay screenshots, score posts, or arcade cabinet photos. Classify accordingly."}, + {"type": "image_url", "image_url": {"url": img_url}}, + ], + } + ], + tools=tools, + tool_choice={"type": "function", "function": {"name": "classify_wacca_plus_image"}}, + ) + + tool_args = response.choices[0].message.tool_calls[0].function.arguments + parsed_result = json.loads(tool_args) + return parsed_result["is_wacca_plus_related"], parsed_result["category"] + + +def _upload_image_to_catbox(image_url: str): + client = CatboxClient() + file_url = client.upload(image_url) + if not file_url or file_url == "": + return image_url + return file_url + +def parse_announcement_messages(message_json: dict): + news_posts = [] + database = create_database_connection() + for message in message_json: + type = None + message_content = message.get("content", "") + if len(message["attachments"]) == 0: + continue + image_attachments = [] + for attachment in message["attachments"]: + if "image" in attachment["content_type"]: + image_attachments.append(attachment) + + if len(image_attachments) == 0: + continue + + filtered_images = [] + image_urls = [] # save the images before they get encoded + for image in image_attachments: + image_urls.append(image["url"]) + entry = database.get_wac_entry(image["id"]) + if entry: + is_related = entry[0] + type = entry[1] + else: + is_related, type = check_is_announcement_image(image["url"]) + database.add_new_wac_entry(key=image["id"], is_news=is_related, post_type=type) + + if not is_related: + continue + filtered_images.append({"image": _upload_image_to_catbox(image["url"]), "url": None}) + + if len(filtered_images) == 0: + continue + + date = message["timestamp"].split("T")[0] + date_obj = datetime.strptime(date, "%Y-%m-%d") + unix_time = int(time.mktime(date_obj.timetuple())) + headline, content = generate_headline_and_content_from_images(image_urls, "WACCA PLUS", message_content) + + news_posts.append({ + "date": date, + "identifier": "WACCA_PLUS", + "type": type.upper(), + "timestamp": unix_time, + "content": content, + "headline": headline, + "url": None, + "images": filtered_images, + 'is_ai_summary': True + }) + database.close() + return news_posts |
