Again refactor
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Ekaropolus 2025-07-22 21:24:12 -06:00
parent d6de058777
commit d52dfe75a2

View File

@ -66,89 +66,111 @@ class FacebookService:
def post_comment_on_share(self, page_id, post_id, message, sender_id=None): def post_comment_on_share(self, page_id, post_id, message, sender_id=None):
""" """
Posts a comment on a shared post using the Facebook API. Posts a comment on a shared post and then on the original post.
Fetches post details (description, parent_id) to improve the comment.
If parent_id exists, posts the same comment on the original post.
""" """
# Retrieve the Page Access Token dynamically # 1) Fetch token
page_access_token = self._get_page_access_token(page_id) page_access_token = self._get_page_access_token(page_id)
if not page_access_token: if not page_access_token:
logger.error(f"Unable to retrieve access token for page ID: {page_id}") logger.error(f"Unable to retrieve access token for page ID: {page_id}")
return None return None
# Fetch post details (description, parent_id) # 2) Fetch details
post_details = self._get_post_details(post_id, page_access_token) post_details = self._get_post_details(post_id, page_access_token)
if not post_details: if not post_details:
logger.error(f"Failed to retrieve post details for post ID: {post_id}") logger.error(f"Failed to retrieve post details for post ID: {post_id}")
return None return None
description = post_details.get("parent_message", None) description = post_details.get("parent_message")
parent_id = post_details.get("parent_id", None) parent_id = post_details.get("parent_id")
author_page_id = post_details.get("parent_from_id", None) author_page_id = post_details.get("parent_from_id")
# 3) Load assistant
# Fetch the appropriate OpenAI assistant for the page
try: try:
page_assistant = FacebookPageAssistant.objects.get(page_id=page_id) page_assistant = FacebookPageAssistant.objects.get(page_id=page_id)
openai_assistant_model = page_assistant.assistant openai_assistant_model = page_assistant.assistant
logger.info(f"Using assistant '{openai_assistant_model.name}' for page '{page_assistant.page_name}'")
except ObjectDoesNotExist: except ObjectDoesNotExist:
logger.error(f"No assistant configured for page ID: {page_id}") logger.error(f"No assistant configured for page ID: {page_id}")
return None return None
# Generate a meaningful comment based on available data # 4) Build prompt & get AI response
prompt = self._build_prompt(message, description)
openai_svc = OpenAIService(name=openai_assistant_model.name)
bot_response = openai_svc.handle_message(prompt)
# 5) Post on shared post
shared = self._post_facebook_comment(
post_id,
bot_response,
page_access_token,
sender_id=author_page_id
)
if shared:
self._store_interaction(
page_id,
user_message=description or "Shared post comment",
bot_response=bot_response,
platform="Facebook"
)
# 6) Post on original post
if parent_id and shared:
orig = self._post_facebook_comment(parent_id, bot_response, page_access_token)
if orig:
self._store_interaction(
page_id,
user_message=description or "Original post comment",
bot_response=bot_response,
platform="Facebook (Original Post)"
)
return shared
# ─── Helper: prompt builder ────────────────────────────────────────────
def _build_prompt(self, message: str, description: str) -> str:
"""
Generate the same prompt logic you had inline.
"""
if not message or message.strip() == "": if not message or message.strip() == "":
if description: if description:
prompt = ( return (
f"Dr. Dr. Ekaropolus previously said: '{description}'. " f"Dr. Dr. Ekaropolus previously said: '{description}'. "
"Based on this, write an insightful response in the most appropriate language that engages people in scientific discussion." "Based on this, write an insightful response in the most appropriate language that engages people in scientific discussion."
) )
else: else:
prompt = "Say something truly inspiring about science, a fact or idea that will amaze people." return "Say something truly inspiring about science, a fact or idea that will amaze people."
else: else:
if description: if description:
prompt = ( return (
f"Dr. Dr. Ekaropolus previously said: '{message}', " f"Dr. Dr. Ekaropolus previously said: '{message}', "
f"and the shared post describes: '{description}'. " f"and the shared post describes: '{description}'. "
"Combine these thoughts into an engaging, fun, and insightful response in the most appropriate language." "Combine these thoughts into an engaging, fun, and insightful response in the most appropriate language."
) )
else: else:
prompt = f"Dr. Dr. Ekaropolus said: '{message}'. Expand on this with an insightful scientific thought." return f"Dr. Dr. Ekaropolus said: '{message}'. Expand on this with an insightful scientific thought."
openai_service = OpenAIService(name=openai_assistant_model.name)
bot_response = openai_service.handle_message(prompt)
sender_id = author_page_id def _store_interaction(
# Post a comment on the shared post self,
shared_comment_response = self._post_facebook_comment(post_id, bot_response, page_access_token, sender_id) page_id: str,
user_message: str,
# If the comment on the shared post was successful, store in Neo4j bot_response: str,
if shared_comment_response: platform: str
) -> None:
"""
Encapsulates the repeated Neo4j store_interaction calls.
"""
try:
self.neo4j_db.store_interaction( self.neo4j_db.store_interaction(
user_id=f"fb_bot_{page_id}", user_id = f"fb_bot_{page_id}",
bot_id=f"fb_bot_{page_id}", bot_id = f"fb_bot_{page_id}",
user_message=description if description else "Shared post comment", user_message = user_message,
bot_response=bot_response, bot_response = bot_response,
platform="Facebook" platform = platform
) )
except Exception as e:
logger.error(f"Error logging interaction for page {page_id}: {e}")
# If parent_id exists and the first comment was successful, post the same comment on the original post
if parent_id and shared_comment_response:
logger.info(f"Also commenting on the original post: {parent_id}")
original_comment_response = self._post_facebook_comment(parent_id, bot_response, page_access_token)
# If the comment on the original post was successful, store in Neo4j
if original_comment_response:
self.neo4j_db.store_interaction(
user_id=f"fb_bot_{page_id}",
bot_id=f"fb_bot_{page_id}",
user_message=description if description else "Original post comment",
bot_response=bot_response,
platform="Facebook (Original Post)"
)
return shared_comment_response
def get_system_user_id(self): def get_system_user_id(self):