diff --git a/pr_agent/agent/pr_agent.py b/pr_agent/agent/pr_agent.py index 44815f56..9a5ccf36 100644 --- a/pr_agent/agent/pr_agent.py +++ b/pr_agent/agent/pr_agent.py @@ -1,5 +1,7 @@ import re +from pr_agent.tools.pr_code_suggestions import PRCodeSuggestions +from pr_agent.tools.pr_description import PRDescription from pr_agent.tools.pr_questions import PRQuestions from pr_agent.tools.pr_reviewer import PRReviewer @@ -8,17 +10,20 @@ class PRAgent: def __init__(self): pass - async def handle_request(self, pr_url, request): - if 'please review' in request.lower() or 'review' == request.lower().strip() or len(request) == 0: - reviewer = PRReviewer(pr_url) - await reviewer.review() - + async def handle_request(self, pr_url, request) -> bool: + if any(cmd in request for cmd in ["/review", "/review_pr"]): + await PRReviewer(pr_url).review() + elif any(cmd in request for cmd in ["/describe", "/describe_pr"]): + await PRDescription(pr_url).describe() + elif any(cmd in request for cmd in ["/improve", "/improve_code"]): + await PRCodeSuggestions(pr_url).suggest() + elif any(cmd in request for cmd in ["/ask", "/ask_question"]): + pattern = r'(/ask|/ask_question)\s*(.*)' + matches = re.findall(pattern, request, re.IGNORECASE) + if matches: + question = matches[0][1] + await PRQuestions(pr_url, question).answer() else: - if "please answer" in request.lower(): - question = re.split(r'(?i)please answer', request)[1].strip() - elif request.lower().strip().startswith("answer"): - question = re.split(r'(?i)answer', request)[1].strip() - else: - question = request - answerer = PRQuestions(pr_url, question) - await answerer.answer() + return False + + return True diff --git a/pr_agent/servers/github_app.py b/pr_agent/servers/github_app.py index 52425651..21788f22 100644 --- a/pr_agent/servers/github_app.py +++ b/pr_agent/servers/github_app.py @@ -56,7 +56,7 @@ async def handle_request(body): api_url = pull_request.get("url", None) if api_url is None: return {} - await agent.handle_request(api_url, "please review") + await agent.handle_request(api_url, "/review") else: return {} diff --git a/pr_agent/servers/github_polling.py b/pr_agent/servers/github_polling.py index c01bd3f4..c46cf51b 100644 --- a/pr_agent/servers/github_polling.py +++ b/pr_agent/servers/github_polling.py @@ -31,6 +31,7 @@ async def polling_loop(): last_modified = [None] git_provider = get_git_provider()() user_id = git_provider.get_user_id() + agent = PRAgent() try: deployment_type = settings.github.deployment_type token = settings.github.user_token @@ -90,19 +91,8 @@ async def polling_loop(): continue rest_of_comment = comment_body.split(user_tag)[1].strip() - if any(cmd in rest_of_comment for cmd in ["/review", "/review_pr"]): - await PRReviewer(pr_url).review() - elif any(cmd in rest_of_comment for cmd in ["/describe", "/describe_pr"]): - await PRDescription(pr_url).describe() - elif any(cmd in rest_of_comment for cmd in ["/improve", "/improve_code"]): - await PRCodeSuggestions(pr_url).suggest() - elif any(cmd in rest_of_comment for cmd in ["/ask", "/ask_question"]): - pattern = r'(/ask|/ask_question)\s*(.*)' - matches = re.findall(pattern, rest_of_comment, re.IGNORECASE) - if matches: - question = matches[0][1] - await PRQuestions(pr_url, question).answer() - else: + success = await agent.handle_request(pr_url, rest_of_comment) + if not success: git_provider.set_pr(pr_url) git_provider.publish_comment("### How to user PR-Agent\n" + bot_help_text(user_id))