def handle_bug()

in bugbot/rules/variant_expiration.py [0:0]


    def handle_bug(self, bug, data):
        bugid = str(bug["id"])

        summary_match = VARIANT_BUG_PAT.match(bug["summary"])
        assert summary_match, f"Bug {bugid} has invalid summary: {bug['summary']}"
        variant_name, bug_expiration = summary_match.groups()
        bug_expiration = lmdutils.get_date_ymd(bug_expiration)
        has_patch = self.is_with_patch(bug)

        action = self.get_followup_action(bug, variant_name, bug_expiration, has_patch)
        if not action:
            return None

        data[bugid] = {
            "action": action,
            "variant_name": variant_name,
            "expiration": bug_expiration.strftime("%Y-%m-%d"),
        }

        if action == ExpirationAction.CLOSE_DROPPED:
            self.autofix_changes[bugid] = {
                "status": "RESOLVED",
                "resolution": "FIXED",
                "comment": {
                    "body": f"The variant has been removed from the [variants.yml]({VARIANTS_SEARCHFOX_URL}) file."
                },
                "flags": [
                    {
                        "id": flag_id,
                        "status": "X",
                    }
                    for flag_id in self.get_needinfo_ids(bug)
                ],
            }

        elif action == ExpirationAction.CLOSE_EXTENDED:
            new_date = self.variants[variant_name]["expiration"].strftime("%Y-%m-%d")
            self.autofix_changes[bugid] = {
                "status": "RESOLVED",
                "resolution": "FIXED",
                "comment": {
                    "body": f"The variant expiration date got extended to {new_date}",
                },
                "flags": [
                    {
                        "id": flag_id,
                        "status": "X",
                    }
                    for flag_id in self.get_needinfo_ids(bug)
                ],
            }

        elif action == ExpirationAction.NEEDINFO_TRIAGER:
            self.ni_extra[bugid] = {
                "has_patch": has_patch,
                "expiration_str": self.get_english_expiration_delta(bug_expiration),
            }
            if not self.add_auto_ni(bugid, utils.get_mail_to_ni(bug)):
                data[bugid]["action"] = ExpirationAction.SKIP

        elif action == ExpirationAction.SEND_REMINDER:
            # Escalate gradually
            if not self.add(
                bug["triage_owner"],
                data[bugid],
                expiration_date=bug_expiration,
            ):
                data[bugid]["action"] = ExpirationAction.SKIP

            if not self.has_expired_comment(bug):
                self.autofix_changes[bugid] = {
                    "comment": {
                        "body": EXPIRED_VARIANT_COMMENT,
                    },
                }

        return bug