├── assets └── logo.png ├── .markdownlint.yaml ├── codegen ├── __main__.py ├── templates │ ├── _types.py.jinja │ ├── __init__.py.jinja │ ├── event.py.jinja │ └── _base.py.jinja └── __init__.py ├── nonebot └── adapters │ └── github │ ├── event │ ├── fork.py │ ├── ping.py │ ├── push.py │ ├── create.py │ ├── delete.py │ ├── gollum.py │ ├── public.py │ ├── status.py │ ├── team_add.py │ ├── meta.py │ ├── page_build.py │ ├── issues_typed.py │ ├── label_edited.py │ ├── member_added.py │ ├── star_created.py │ ├── star_deleted.py │ ├── team_created.py │ ├── team_deleted.py │ ├── team_edited.py │ ├── watch.py │ ├── issues_closed.py │ ├── issues_edited.py │ ├── issues_locked.py │ ├── issues_opened.py │ ├── issues_pinned.py │ ├── label_created.py │ ├── label_deleted.py │ ├── member_edited.py │ ├── issues_deleted.py │ ├── issues_labeled.py │ ├── issues_untyped.py │ ├── member_removed.py │ ├── project_closed.py │ ├── project_edited.py │ ├── release_edited.py │ ├── issues_assigned.py │ ├── issues_reopened.py │ ├── issues_unlocked.py │ ├── issues_unpinned.py │ ├── package_updated.py │ ├── project_created.py │ ├── project_deleted.py │ ├── release_created.py │ ├── release_deleted.py │ ├── check_run_created.py │ ├── deployment.py │ ├── discussion_closed.py │ ├── discussion_edited.py │ ├── discussion_locked.py │ ├── discussion_pinned.py │ ├── issues_milestoned.py │ ├── issues_unassigned.py │ ├── issues_unlabeled.py │ ├── membership_added.py │ ├── milestone_closed.py │ ├── milestone_created.py │ ├── milestone_deleted.py │ ├── milestone_edited.py │ ├── milestone_opened.py │ ├── org_block_blocked.py │ ├── package_published.py │ ├── project_reopened.py │ ├── release_published.py │ ├── release_released.py │ ├── repository_edited.py │ ├── repository_import.py │ ├── workflow_dispatch.py │ ├── check_run_completed.py │ ├── deploy_key_created.py │ ├── deploy_key_deleted.py │ ├── discussion_created.py │ ├── discussion_deleted.py │ ├── discussion_labeled.py │ ├── issues_transferred.py │ ├── membership_removed.py │ ├── org_block_unblocked.py │ ├── project_card_edited.py │ ├── project_card_moved.py │ ├── pull_request_closed.py │ ├── pull_request_edited.py │ ├── pull_request_locked.py │ ├── pull_request_opened.py │ ├── repository_created.py │ ├── repository_deleted.py │ ├── repository_renamed.py │ ├── sponsorship_edited.py │ ├── workflow_job_queued.py │ ├── discussion_answered.py │ ├── discussion_reopened.py │ ├── discussion_unlocked.py │ ├── discussion_unpinned.py │ ├── issues_demilestoned.py │ ├── project_card_created.py │ ├── project_card_deleted.py │ ├── project_column_moved.py │ ├── pull_request_labeled.py │ ├── release_prereleased.py │ ├── release_unpublished.py │ ├── repository_archived.py │ ├── sponsorship_created.py │ ├── workflow_job_waiting.py │ ├── check_run_rerequested.py │ ├── check_suite_completed.py │ ├── check_suite_requested.py │ ├── discussion_unlabeled.py │ ├── installation_created.py │ ├── installation_deleted.py │ ├── installation_suspend.py │ ├── merge_group_destroyed.py │ ├── organization_deleted.py │ ├── organization_renamed.py │ ├── project_column_edited.py │ ├── pull_request_assigned.py │ ├── pull_request_dequeued.py │ ├── pull_request_enqueued.py │ ├── pull_request_reopened.py │ ├── pull_request_unlocked.py │ ├── security_and_analysis.py │ ├── dependabot_alert_fixed.py │ ├── discussion_transferred.py │ ├── discussion_unanswered.py │ ├── installation_unsuspend.py │ ├── project_card_converted.py │ ├── project_column_created.py │ ├── project_column_deleted.py │ ├── projects_v2_item_edited.py │ ├── pull_request_unlabeled.py │ ├── repository_privatized.py │ ├── repository_publicized.py │ ├── repository_transferred.py │ ├── repository_unarchived.py │ ├── sponsorship_cancelled.py │ ├── workflow_job_completed.py │ ├── workflow_run_completed.py │ ├── workflow_run_requested.py │ ├── check_suite_rerequested.py │ ├── custom_property_created.py │ ├── custom_property_deleted.py │ ├── custom_property_updated.py │ ├── dependabot_alert_created.py │ ├── deployment_status.py │ ├── projects_v2_closed.py │ ├── projects_v2_edited.py │ ├── projects_v2_item_created.py │ ├── projects_v2_item_deleted.py │ ├── pull_request_milestoned.py │ ├── pull_request_synchronize.py │ ├── pull_request_unassigned.py │ ├── registry_package_updated.py │ ├── sponsorship_tier_changed.py │ ├── team_added_to_repository.py │ ├── workflow_job_in_progress.py │ ├── workflow_run_in_progress.py │ ├── check_run_requested_action.py │ ├── code_scanning_alert_fixed.py │ ├── dependabot_alert_reopened.py │ ├── discussion_comment_edited.py │ ├── installation_target.py │ ├── organization_member_added.py │ ├── projects_v2_created.py │ ├── projects_v2_deleted.py │ ├── projects_v2_item_archived.py │ ├── projects_v2_item_converted.py │ ├── projects_v2_item_reordered.py │ ├── projects_v2_item_restored.py │ ├── projects_v2_reopened.py │ ├── pull_request_demilestoned.py │ ├── pull_request_review_edited.py │ ├── repository_dispatch.py │ ├── repository_ruleset_edited.py │ ├── security_advisory_updated.py │ ├── sub_issues_sub_issue_added.py │ ├── code_scanning_alert_created.py │ ├── dependabot_alert_dismissed.py │ ├── deployment_review_approved.py │ ├── deployment_review_rejected.py │ ├── discussion_comment_created.py │ ├── discussion_comment_deleted.py │ ├── registry_package_published.py │ ├── repository_ruleset_created.py │ ├── repository_ruleset_deleted.py │ ├── sub_issues_sub_issue_removed.py │ ├── code_scanning_alert_reopened.py │ ├── custom_property_values.py │ ├── deployment_review_requested.py │ ├── discussion_category_changed.py │ ├── merge_group_checks_requested.py │ ├── organization_member_invited.py │ ├── organization_member_removed.py │ ├── pull_request_ready_for_review.py │ ├── secret_scanning_scan.py │ ├── security_advisory_published.py │ ├── security_advisory_withdrawn.py │ ├── sub_issues_parent_issue_added.py │ ├── team_removed_from_repository.py │ ├── branch_protection_rule_edited.py │ ├── dependabot_alert_reintroduced.py │ ├── marketplace_purchase_changed.py │ ├── pull_request_review_dismissed.py │ ├── pull_request_review_submitted.py │ ├── repository_advisory_published.py │ ├── repository_advisory_reported.py │ ├── secret_scanning_alert_created.py │ ├── branch_protection_rule_created.py │ ├── branch_protection_rule_deleted.py │ ├── dependabot_alert_auto_dismissed.py │ ├── dependabot_alert_auto_reopened.py │ ├── github_app_authorization.py │ ├── marketplace_purchase_cancelled.py │ ├── marketplace_purchase_purchased.py │ ├── pull_request_auto_merge_enabled.py │ ├── pull_request_converted_to_draft.py │ ├── secret_scanning_alert_assigned.py │ ├── secret_scanning_alert_reopened.py │ ├── secret_scanning_alert_resolved.py │ ├── secret_scanning_alert_validated.py │ ├── sponsorship_pending_tier_change.py │ ├── sub_issues_parent_issue_removed.py │ ├── installation_repositories_added.py │ ├── projects_v2_status_update_created.py │ ├── projects_v2_status_update_deleted.py │ ├── projects_v2_status_update_edited.py │ ├── pull_request_auto_merge_disabled.py │ ├── secret_scanning_alert_unassigned.py │ ├── code_scanning_alert_closed_by_user.py │ ├── deployment_protection_rule.py │ ├── issue_dependencies_blocking_added.py │ ├── sponsorship_pending_cancellation.py │ ├── code_scanning_alert_reopened_by_user.py │ ├── installation_repositories_removed.py │ ├── issue_dependencies_blocked_by_added.py │ ├── pull_request_review_thread_resolved.py │ ├── issue_dependencies_blocking_removed.py │ ├── marketplace_purchase_pending_change.py │ ├── personal_access_token_request_denied.py │ ├── secret_scanning_alert_location.py │ ├── code_scanning_alert_appeared_in_branch.py │ ├── custom_property_promote_to_enterprise.py │ ├── installation_new_permissions_accepted.py │ ├── issue_dependencies_blocked_by_removed.py │ ├── personal_access_token_request_approved.py │ ├── personal_access_token_request_created.py │ ├── pull_request_review_thread_unresolved.py │ ├── repository_vulnerability_alert_create.py │ ├── repository_vulnerability_alert_reopen.py │ ├── secret_scanning_alert_publicly_leaked.py │ ├── personal_access_token_request_cancelled.py │ ├── repository_vulnerability_alert_dismiss.py │ ├── repository_vulnerability_alert_resolve.py │ ├── branch_protection_configuration_enabled.py │ ├── branch_protection_configuration_disabled.py │ ├── marketplace_purchase_pending_change_cancelled.py │ ├── pull_request_review_requested.py │ ├── pull_request_review_request_removed.py │ ├── issue_comment_edited.py │ ├── issue_comment_deleted.py │ ├── pull_request_review_comment_edited.py │ ├── pull_request_review_comment_deleted.py │ ├── commit_comment.py │ ├── issue_comment_created.py │ ├── pull_request_review_comment_created.py │ ├── _base.py │ └── _types.py │ ├── compat.py │ ├── utils.py │ ├── __init__.py │ ├── exception.py │ ├── config.py │ ├── message.py │ ├── lazy_module.py │ ├── adapter.py │ └── bot.py ├── .github ├── workflows │ ├── ruff.yml │ └── release.yml └── dependabot.yml ├── .pre-commit-config.yaml ├── .editorconfig ├── LICENSE ├── .devcontainer └── devcontainer.json ├── pyproject.toml ├── README.md └── .gitignore /assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nonebot/adapter-github/HEAD/assets/logo.png -------------------------------------------------------------------------------- /.markdownlint.yaml: -------------------------------------------------------------------------------- 1 | MD013: false 2 | MD024: 3 | siblings_only: true 4 | MD033: false 5 | -------------------------------------------------------------------------------- /codegen/__main__.py: -------------------------------------------------------------------------------- 1 | from . import build_event 2 | 3 | if __name__ == "__main__": 4 | build_event() 5 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/fork.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookFork 2 | 3 | from ._base import Event 4 | 5 | 6 | class Fork(Event): 7 | payload: WebhookFork 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/ping.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookPing 2 | 3 | from ._base import Event 4 | 5 | 6 | class Ping(Event): 7 | payload: WebhookPing 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/push.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookPush 2 | 3 | from ._base import Event 4 | 5 | 6 | class Push(Event): 7 | payload: WebhookPush 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/create.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookCreate 2 | 3 | from ._base import Event 4 | 5 | 6 | class Create(Event): 7 | payload: WebhookCreate 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/delete.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookDelete 2 | 3 | from ._base import Event 4 | 5 | 6 | class Delete(Event): 7 | payload: WebhookDelete 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/gollum.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookGollum 2 | 3 | from ._base import Event 4 | 5 | 6 | class Gollum(Event): 7 | payload: WebhookGollum 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/public.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookPublic 2 | 3 | from ._base import Event 4 | 5 | 6 | class Public(Event): 7 | payload: WebhookPublic 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/status.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookStatus 2 | 3 | from ._base import Event 4 | 5 | 6 | class Status(Event): 7 | payload: WebhookStatus 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/team_add.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookTeamAdd 2 | 3 | from ._base import Event 4 | 5 | 6 | class TeamAdd(Event): 7 | payload: WebhookTeamAdd 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/meta.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookMetaDeleted 2 | 3 | from ._base import Event 4 | 5 | 6 | class MetaDeleted(Event): 7 | payload: WebhookMetaDeleted 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/page_build.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookPageBuild 2 | 3 | from ._base import Event 4 | 5 | 6 | class PageBuild(Event): 7 | payload: WebhookPageBuild 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/issues_typed.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookIssuesTyped 2 | 3 | from ._base import Event 4 | 5 | 6 | class IssuesTyped(Event): 7 | payload: WebhookIssuesTyped 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/label_edited.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookLabelEdited 2 | 3 | from ._base import Event 4 | 5 | 6 | class LabelEdited(Event): 7 | payload: WebhookLabelEdited 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/member_added.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookMemberAdded 2 | 3 | from ._base import Event 4 | 5 | 6 | class MemberAdded(Event): 7 | payload: WebhookMemberAdded 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/star_created.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookStarCreated 2 | 3 | from ._base import Event 4 | 5 | 6 | class StarCreated(Event): 7 | payload: WebhookStarCreated 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/star_deleted.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookStarDeleted 2 | 3 | from ._base import Event 4 | 5 | 6 | class StarDeleted(Event): 7 | payload: WebhookStarDeleted 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/team_created.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookTeamCreated 2 | 3 | from ._base import Event 4 | 5 | 6 | class TeamCreated(Event): 7 | payload: WebhookTeamCreated 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/team_deleted.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookTeamDeleted 2 | 3 | from ._base import Event 4 | 5 | 6 | class TeamDeleted(Event): 7 | payload: WebhookTeamDeleted 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/team_edited.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookTeamEdited 2 | 3 | from ._base import Event 4 | 5 | 6 | class TeamEdited(Event): 7 | payload: WebhookTeamEdited 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/watch.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookWatchStarted 2 | 3 | from ._base import Event 4 | 5 | 6 | class WatchStarted(Event): 7 | payload: WebhookWatchStarted 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/issues_closed.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookIssuesClosed 2 | 3 | from ._base import Event 4 | 5 | 6 | class IssuesClosed(Event): 7 | payload: WebhookIssuesClosed 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/issues_edited.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookIssuesEdited 2 | 3 | from ._base import Event 4 | 5 | 6 | class IssuesEdited(Event): 7 | payload: WebhookIssuesEdited 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/issues_locked.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookIssuesLocked 2 | 3 | from ._base import Event 4 | 5 | 6 | class IssuesLocked(Event): 7 | payload: WebhookIssuesLocked 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/issues_opened.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookIssuesOpened 2 | 3 | from ._base import Event 4 | 5 | 6 | class IssuesOpened(Event): 7 | payload: WebhookIssuesOpened 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/issues_pinned.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookIssuesPinned 2 | 3 | from ._base import Event 4 | 5 | 6 | class IssuesPinned(Event): 7 | payload: WebhookIssuesPinned 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/label_created.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookLabelCreated 2 | 3 | from ._base import Event 4 | 5 | 6 | class LabelCreated(Event): 7 | payload: WebhookLabelCreated 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/label_deleted.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookLabelDeleted 2 | 3 | from ._base import Event 4 | 5 | 6 | class LabelDeleted(Event): 7 | payload: WebhookLabelDeleted 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/member_edited.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookMemberEdited 2 | 3 | from ._base import Event 4 | 5 | 6 | class MemberEdited(Event): 7 | payload: WebhookMemberEdited 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/issues_deleted.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookIssuesDeleted 2 | 3 | from ._base import Event 4 | 5 | 6 | class IssuesDeleted(Event): 7 | payload: WebhookIssuesDeleted 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/issues_labeled.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookIssuesLabeled 2 | 3 | from ._base import Event 4 | 5 | 6 | class IssuesLabeled(Event): 7 | payload: WebhookIssuesLabeled 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/issues_untyped.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookIssuesUntyped 2 | 3 | from ._base import Event 4 | 5 | 6 | class IssuesUntyped(Event): 7 | payload: WebhookIssuesUntyped 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/member_removed.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookMemberRemoved 2 | 3 | from ._base import Event 4 | 5 | 6 | class MemberRemoved(Event): 7 | payload: WebhookMemberRemoved 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/project_closed.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookProjectClosed 2 | 3 | from ._base import Event 4 | 5 | 6 | class ProjectClosed(Event): 7 | payload: WebhookProjectClosed 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/project_edited.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookProjectEdited 2 | 3 | from ._base import Event 4 | 5 | 6 | class ProjectEdited(Event): 7 | payload: WebhookProjectEdited 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/release_edited.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookReleaseEdited 2 | 3 | from ._base import Event 4 | 5 | 6 | class ReleaseEdited(Event): 7 | payload: WebhookReleaseEdited 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/issues_assigned.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookIssuesAssigned 2 | 3 | from ._base import Event 4 | 5 | 6 | class IssuesAssigned(Event): 7 | payload: WebhookIssuesAssigned 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/issues_reopened.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookIssuesReopened 2 | 3 | from ._base import Event 4 | 5 | 6 | class IssuesReopened(Event): 7 | payload: WebhookIssuesReopened 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/issues_unlocked.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookIssuesUnlocked 2 | 3 | from ._base import Event 4 | 5 | 6 | class IssuesUnlocked(Event): 7 | payload: WebhookIssuesUnlocked 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/issues_unpinned.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookIssuesUnpinned 2 | 3 | from ._base import Event 4 | 5 | 6 | class IssuesUnpinned(Event): 7 | payload: WebhookIssuesUnpinned 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/package_updated.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookPackageUpdated 2 | 3 | from ._base import Event 4 | 5 | 6 | class PackageUpdated(Event): 7 | payload: WebhookPackageUpdated 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/project_created.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookProjectCreated 2 | 3 | from ._base import Event 4 | 5 | 6 | class ProjectCreated(Event): 7 | payload: WebhookProjectCreated 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/project_deleted.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookProjectDeleted 2 | 3 | from ._base import Event 4 | 5 | 6 | class ProjectDeleted(Event): 7 | payload: WebhookProjectDeleted 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/release_created.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookReleaseCreated 2 | 3 | from ._base import Event 4 | 5 | 6 | class ReleaseCreated(Event): 7 | payload: WebhookReleaseCreated 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/release_deleted.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookReleaseDeleted 2 | 3 | from ._base import Event 4 | 5 | 6 | class ReleaseDeleted(Event): 7 | payload: WebhookReleaseDeleted 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/check_run_created.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookCheckRunCreated 2 | 3 | from ._base import Event 4 | 5 | 6 | class CheckRunCreated(Event): 7 | payload: WebhookCheckRunCreated 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/deployment.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookDeploymentCreated 2 | 3 | from ._base import Event 4 | 5 | 6 | class DeploymentCreated(Event): 7 | payload: WebhookDeploymentCreated 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/discussion_closed.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookDiscussionClosed 2 | 3 | from ._base import Event 4 | 5 | 6 | class DiscussionClosed(Event): 7 | payload: WebhookDiscussionClosed 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/discussion_edited.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookDiscussionEdited 2 | 3 | from ._base import Event 4 | 5 | 6 | class DiscussionEdited(Event): 7 | payload: WebhookDiscussionEdited 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/discussion_locked.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookDiscussionLocked 2 | 3 | from ._base import Event 4 | 5 | 6 | class DiscussionLocked(Event): 7 | payload: WebhookDiscussionLocked 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/discussion_pinned.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookDiscussionPinned 2 | 3 | from ._base import Event 4 | 5 | 6 | class DiscussionPinned(Event): 7 | payload: WebhookDiscussionPinned 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/issues_milestoned.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookIssuesMilestoned 2 | 3 | from ._base import Event 4 | 5 | 6 | class IssuesMilestoned(Event): 7 | payload: WebhookIssuesMilestoned 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/issues_unassigned.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookIssuesUnassigned 2 | 3 | from ._base import Event 4 | 5 | 6 | class IssuesUnassigned(Event): 7 | payload: WebhookIssuesUnassigned 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/issues_unlabeled.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookIssuesUnlabeled 2 | 3 | from ._base import Event 4 | 5 | 6 | class IssuesUnlabeled(Event): 7 | payload: WebhookIssuesUnlabeled 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/membership_added.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookMembershipAdded 2 | 3 | from ._base import Event 4 | 5 | 6 | class MembershipAdded(Event): 7 | payload: WebhookMembershipAdded 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/milestone_closed.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookMilestoneClosed 2 | 3 | from ._base import Event 4 | 5 | 6 | class MilestoneClosed(Event): 7 | payload: WebhookMilestoneClosed 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/milestone_created.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookMilestoneCreated 2 | 3 | from ._base import Event 4 | 5 | 6 | class MilestoneCreated(Event): 7 | payload: WebhookMilestoneCreated 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/milestone_deleted.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookMilestoneDeleted 2 | 3 | from ._base import Event 4 | 5 | 6 | class MilestoneDeleted(Event): 7 | payload: WebhookMilestoneDeleted 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/milestone_edited.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookMilestoneEdited 2 | 3 | from ._base import Event 4 | 5 | 6 | class MilestoneEdited(Event): 7 | payload: WebhookMilestoneEdited 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/milestone_opened.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookMilestoneOpened 2 | 3 | from ._base import Event 4 | 5 | 6 | class MilestoneOpened(Event): 7 | payload: WebhookMilestoneOpened 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/org_block_blocked.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookOrgBlockBlocked 2 | 3 | from ._base import Event 4 | 5 | 6 | class OrgBlockBlocked(Event): 7 | payload: WebhookOrgBlockBlocked 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/package_published.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookPackagePublished 2 | 3 | from ._base import Event 4 | 5 | 6 | class PackagePublished(Event): 7 | payload: WebhookPackagePublished 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/project_reopened.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookProjectReopened 2 | 3 | from ._base import Event 4 | 5 | 6 | class ProjectReopened(Event): 7 | payload: WebhookProjectReopened 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/release_published.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookReleasePublished 2 | 3 | from ._base import Event 4 | 5 | 6 | class ReleasePublished(Event): 7 | payload: WebhookReleasePublished 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/release_released.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookReleaseReleased 2 | 3 | from ._base import Event 4 | 5 | 6 | class ReleaseReleased(Event): 7 | payload: WebhookReleaseReleased 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/repository_edited.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookRepositoryEdited 2 | 3 | from ._base import Event 4 | 5 | 6 | class RepositoryEdited(Event): 7 | payload: WebhookRepositoryEdited 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/repository_import.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookRepositoryImport 2 | 3 | from ._base import Event 4 | 5 | 6 | class RepositoryImport(Event): 7 | payload: WebhookRepositoryImport 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/workflow_dispatch.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookWorkflowDispatch 2 | 3 | from ._base import Event 4 | 5 | 6 | class WorkflowDispatch(Event): 7 | payload: WebhookWorkflowDispatch 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/check_run_completed.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookCheckRunCompleted 2 | 3 | from ._base import Event 4 | 5 | 6 | class CheckRunCompleted(Event): 7 | payload: WebhookCheckRunCompleted 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/deploy_key_created.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookDeployKeyCreated 2 | 3 | from ._base import Event 4 | 5 | 6 | class DeployKeyCreated(Event): 7 | payload: WebhookDeployKeyCreated 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/deploy_key_deleted.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookDeployKeyDeleted 2 | 3 | from ._base import Event 4 | 5 | 6 | class DeployKeyDeleted(Event): 7 | payload: WebhookDeployKeyDeleted 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/discussion_created.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookDiscussionCreated 2 | 3 | from ._base import Event 4 | 5 | 6 | class DiscussionCreated(Event): 7 | payload: WebhookDiscussionCreated 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/discussion_deleted.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookDiscussionDeleted 2 | 3 | from ._base import Event 4 | 5 | 6 | class DiscussionDeleted(Event): 7 | payload: WebhookDiscussionDeleted 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/discussion_labeled.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookDiscussionLabeled 2 | 3 | from ._base import Event 4 | 5 | 6 | class DiscussionLabeled(Event): 7 | payload: WebhookDiscussionLabeled 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/issues_transferred.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookIssuesTransferred 2 | 3 | from ._base import Event 4 | 5 | 6 | class IssuesTransferred(Event): 7 | payload: WebhookIssuesTransferred 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/membership_removed.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookMembershipRemoved 2 | 3 | from ._base import Event 4 | 5 | 6 | class MembershipRemoved(Event): 7 | payload: WebhookMembershipRemoved 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/org_block_unblocked.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookOrgBlockUnblocked 2 | 3 | from ._base import Event 4 | 5 | 6 | class OrgBlockUnblocked(Event): 7 | payload: WebhookOrgBlockUnblocked 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/project_card_edited.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookProjectCardEdited 2 | 3 | from ._base import Event 4 | 5 | 6 | class ProjectCardEdited(Event): 7 | payload: WebhookProjectCardEdited 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/project_card_moved.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookProjectCardMoved 2 | 3 | from ._base import Event 4 | 5 | 6 | class ProjectCardMoved(Event): 7 | payload: WebhookProjectCardMoved 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/pull_request_closed.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookPullRequestClosed 2 | 3 | from ._base import Event 4 | 5 | 6 | class PullRequestClosed(Event): 7 | payload: WebhookPullRequestClosed 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/pull_request_edited.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookPullRequestEdited 2 | 3 | from ._base import Event 4 | 5 | 6 | class PullRequestEdited(Event): 7 | payload: WebhookPullRequestEdited 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/pull_request_locked.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookPullRequestLocked 2 | 3 | from ._base import Event 4 | 5 | 6 | class PullRequestLocked(Event): 7 | payload: WebhookPullRequestLocked 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/pull_request_opened.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookPullRequestOpened 2 | 3 | from ._base import Event 4 | 5 | 6 | class PullRequestOpened(Event): 7 | payload: WebhookPullRequestOpened 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/repository_created.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookRepositoryCreated 2 | 3 | from ._base import Event 4 | 5 | 6 | class RepositoryCreated(Event): 7 | payload: WebhookRepositoryCreated 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/repository_deleted.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookRepositoryDeleted 2 | 3 | from ._base import Event 4 | 5 | 6 | class RepositoryDeleted(Event): 7 | payload: WebhookRepositoryDeleted 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/repository_renamed.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookRepositoryRenamed 2 | 3 | from ._base import Event 4 | 5 | 6 | class RepositoryRenamed(Event): 7 | payload: WebhookRepositoryRenamed 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/sponsorship_edited.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookSponsorshipEdited 2 | 3 | from ._base import Event 4 | 5 | 6 | class SponsorshipEdited(Event): 7 | payload: WebhookSponsorshipEdited 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/workflow_job_queued.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookWorkflowJobQueued 2 | 3 | from ._base import Event 4 | 5 | 6 | class WorkflowJobQueued(Event): 7 | payload: WebhookWorkflowJobQueued 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/discussion_answered.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookDiscussionAnswered 2 | 3 | from ._base import Event 4 | 5 | 6 | class DiscussionAnswered(Event): 7 | payload: WebhookDiscussionAnswered 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/discussion_reopened.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookDiscussionReopened 2 | 3 | from ._base import Event 4 | 5 | 6 | class DiscussionReopened(Event): 7 | payload: WebhookDiscussionReopened 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/discussion_unlocked.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookDiscussionUnlocked 2 | 3 | from ._base import Event 4 | 5 | 6 | class DiscussionUnlocked(Event): 7 | payload: WebhookDiscussionUnlocked 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/discussion_unpinned.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookDiscussionUnpinned 2 | 3 | from ._base import Event 4 | 5 | 6 | class DiscussionUnpinned(Event): 7 | payload: WebhookDiscussionUnpinned 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/issues_demilestoned.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookIssuesDemilestoned 2 | 3 | from ._base import Event 4 | 5 | 6 | class IssuesDemilestoned(Event): 7 | payload: WebhookIssuesDemilestoned 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/project_card_created.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookProjectCardCreated 2 | 3 | from ._base import Event 4 | 5 | 6 | class ProjectCardCreated(Event): 7 | payload: WebhookProjectCardCreated 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/project_card_deleted.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookProjectCardDeleted 2 | 3 | from ._base import Event 4 | 5 | 6 | class ProjectCardDeleted(Event): 7 | payload: WebhookProjectCardDeleted 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/project_column_moved.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookProjectColumnMoved 2 | 3 | from ._base import Event 4 | 5 | 6 | class ProjectColumnMoved(Event): 7 | payload: WebhookProjectColumnMoved 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/pull_request_labeled.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookPullRequestLabeled 2 | 3 | from ._base import Event 4 | 5 | 6 | class PullRequestLabeled(Event): 7 | payload: WebhookPullRequestLabeled 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/release_prereleased.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookReleasePrereleased 2 | 3 | from ._base import Event 4 | 5 | 6 | class ReleasePrereleased(Event): 7 | payload: WebhookReleasePrereleased 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/release_unpublished.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookReleaseUnpublished 2 | 3 | from ._base import Event 4 | 5 | 6 | class ReleaseUnpublished(Event): 7 | payload: WebhookReleaseUnpublished 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/repository_archived.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookRepositoryArchived 2 | 3 | from ._base import Event 4 | 5 | 6 | class RepositoryArchived(Event): 7 | payload: WebhookRepositoryArchived 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/sponsorship_created.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookSponsorshipCreated 2 | 3 | from ._base import Event 4 | 5 | 6 | class SponsorshipCreated(Event): 7 | payload: WebhookSponsorshipCreated 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/workflow_job_waiting.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookWorkflowJobWaiting 2 | 3 | from ._base import Event 4 | 5 | 6 | class WorkflowJobWaiting(Event): 7 | payload: WebhookWorkflowJobWaiting 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/check_run_rerequested.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookCheckRunRerequested 2 | 3 | from ._base import Event 4 | 5 | 6 | class CheckRunRerequested(Event): 7 | payload: WebhookCheckRunRerequested 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/check_suite_completed.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookCheckSuiteCompleted 2 | 3 | from ._base import Event 4 | 5 | 6 | class CheckSuiteCompleted(Event): 7 | payload: WebhookCheckSuiteCompleted 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/check_suite_requested.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookCheckSuiteRequested 2 | 3 | from ._base import Event 4 | 5 | 6 | class CheckSuiteRequested(Event): 7 | payload: WebhookCheckSuiteRequested 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/discussion_unlabeled.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookDiscussionUnlabeled 2 | 3 | from ._base import Event 4 | 5 | 6 | class DiscussionUnlabeled(Event): 7 | payload: WebhookDiscussionUnlabeled 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/installation_created.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookInstallationCreated 2 | 3 | from ._base import Event 4 | 5 | 6 | class InstallationCreated(Event): 7 | payload: WebhookInstallationCreated 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/installation_deleted.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookInstallationDeleted 2 | 3 | from ._base import Event 4 | 5 | 6 | class InstallationDeleted(Event): 7 | payload: WebhookInstallationDeleted 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/installation_suspend.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookInstallationSuspend 2 | 3 | from ._base import Event 4 | 5 | 6 | class InstallationSuspend(Event): 7 | payload: WebhookInstallationSuspend 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/merge_group_destroyed.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookMergeGroupDestroyed 2 | 3 | from ._base import Event 4 | 5 | 6 | class MergeGroupDestroyed(Event): 7 | payload: WebhookMergeGroupDestroyed 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/organization_deleted.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookOrganizationDeleted 2 | 3 | from ._base import Event 4 | 5 | 6 | class OrganizationDeleted(Event): 7 | payload: WebhookOrganizationDeleted 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/organization_renamed.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookOrganizationRenamed 2 | 3 | from ._base import Event 4 | 5 | 6 | class OrganizationRenamed(Event): 7 | payload: WebhookOrganizationRenamed 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/project_column_edited.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookProjectColumnEdited 2 | 3 | from ._base import Event 4 | 5 | 6 | class ProjectColumnEdited(Event): 7 | payload: WebhookProjectColumnEdited 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/pull_request_assigned.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookPullRequestAssigned 2 | 3 | from ._base import Event 4 | 5 | 6 | class PullRequestAssigned(Event): 7 | payload: WebhookPullRequestAssigned 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/pull_request_dequeued.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookPullRequestDequeued 2 | 3 | from ._base import Event 4 | 5 | 6 | class PullRequestDequeued(Event): 7 | payload: WebhookPullRequestDequeued 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/pull_request_enqueued.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookPullRequestEnqueued 2 | 3 | from ._base import Event 4 | 5 | 6 | class PullRequestEnqueued(Event): 7 | payload: WebhookPullRequestEnqueued 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/pull_request_reopened.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookPullRequestReopened 2 | 3 | from ._base import Event 4 | 5 | 6 | class PullRequestReopened(Event): 7 | payload: WebhookPullRequestReopened 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/pull_request_unlocked.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookPullRequestUnlocked 2 | 3 | from ._base import Event 4 | 5 | 6 | class PullRequestUnlocked(Event): 7 | payload: WebhookPullRequestUnlocked 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/security_and_analysis.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookSecurityAndAnalysis 2 | 3 | from ._base import Event 4 | 5 | 6 | class SecurityAndAnalysis(Event): 7 | payload: WebhookSecurityAndAnalysis 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/dependabot_alert_fixed.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookDependabotAlertFixed 2 | 3 | from ._base import Event 4 | 5 | 6 | class DependabotAlertFixed(Event): 7 | payload: WebhookDependabotAlertFixed 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/discussion_transferred.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookDiscussionTransferred 2 | 3 | from ._base import Event 4 | 5 | 6 | class DiscussionTransferred(Event): 7 | payload: WebhookDiscussionTransferred 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/discussion_unanswered.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookDiscussionUnanswered 2 | 3 | from ._base import Event 4 | 5 | 6 | class DiscussionUnanswered(Event): 7 | payload: WebhookDiscussionUnanswered 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/installation_unsuspend.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookInstallationUnsuspend 2 | 3 | from ._base import Event 4 | 5 | 6 | class InstallationUnsuspend(Event): 7 | payload: WebhookInstallationUnsuspend 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/project_card_converted.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookProjectCardConverted 2 | 3 | from ._base import Event 4 | 5 | 6 | class ProjectCardConverted(Event): 7 | payload: WebhookProjectCardConverted 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/project_column_created.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookProjectColumnCreated 2 | 3 | from ._base import Event 4 | 5 | 6 | class ProjectColumnCreated(Event): 7 | payload: WebhookProjectColumnCreated 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/project_column_deleted.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookProjectColumnDeleted 2 | 3 | from ._base import Event 4 | 5 | 6 | class ProjectColumnDeleted(Event): 7 | payload: WebhookProjectColumnDeleted 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/projects_v2_item_edited.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookProjectsV2ItemEdited 2 | 3 | from ._base import Event 4 | 5 | 6 | class ProjectsV2ItemEdited(Event): 7 | payload: WebhookProjectsV2ItemEdited 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/pull_request_unlabeled.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookPullRequestUnlabeled 2 | 3 | from ._base import Event 4 | 5 | 6 | class PullRequestUnlabeled(Event): 7 | payload: WebhookPullRequestUnlabeled 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/repository_privatized.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookRepositoryPrivatized 2 | 3 | from ._base import Event 4 | 5 | 6 | class RepositoryPrivatized(Event): 7 | payload: WebhookRepositoryPrivatized 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/repository_publicized.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookRepositoryPublicized 2 | 3 | from ._base import Event 4 | 5 | 6 | class RepositoryPublicized(Event): 7 | payload: WebhookRepositoryPublicized 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/repository_transferred.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookRepositoryTransferred 2 | 3 | from ._base import Event 4 | 5 | 6 | class RepositoryTransferred(Event): 7 | payload: WebhookRepositoryTransferred 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/repository_unarchived.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookRepositoryUnarchived 2 | 3 | from ._base import Event 4 | 5 | 6 | class RepositoryUnarchived(Event): 7 | payload: WebhookRepositoryUnarchived 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/sponsorship_cancelled.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookSponsorshipCancelled 2 | 3 | from ._base import Event 4 | 5 | 6 | class SponsorshipCancelled(Event): 7 | payload: WebhookSponsorshipCancelled 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/workflow_job_completed.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookWorkflowJobCompleted 2 | 3 | from ._base import Event 4 | 5 | 6 | class WorkflowJobCompleted(Event): 7 | payload: WebhookWorkflowJobCompleted 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/workflow_run_completed.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookWorkflowRunCompleted 2 | 3 | from ._base import Event 4 | 5 | 6 | class WorkflowRunCompleted(Event): 7 | payload: WebhookWorkflowRunCompleted 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/workflow_run_requested.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookWorkflowRunRequested 2 | 3 | from ._base import Event 4 | 5 | 6 | class WorkflowRunRequested(Event): 7 | payload: WebhookWorkflowRunRequested 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/check_suite_rerequested.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookCheckSuiteRerequested 2 | 3 | from ._base import Event 4 | 5 | 6 | class CheckSuiteRerequested(Event): 7 | payload: WebhookCheckSuiteRerequested 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/custom_property_created.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookCustomPropertyCreated 2 | 3 | from ._base import Event 4 | 5 | 6 | class CustomPropertyCreated(Event): 7 | payload: WebhookCustomPropertyCreated 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/custom_property_deleted.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookCustomPropertyDeleted 2 | 3 | from ._base import Event 4 | 5 | 6 | class CustomPropertyDeleted(Event): 7 | payload: WebhookCustomPropertyDeleted 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/custom_property_updated.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookCustomPropertyUpdated 2 | 3 | from ._base import Event 4 | 5 | 6 | class CustomPropertyUpdated(Event): 7 | payload: WebhookCustomPropertyUpdated 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/dependabot_alert_created.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookDependabotAlertCreated 2 | 3 | from ._base import Event 4 | 5 | 6 | class DependabotAlertCreated(Event): 7 | payload: WebhookDependabotAlertCreated 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/deployment_status.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookDeploymentStatusCreated 2 | 3 | from ._base import Event 4 | 5 | 6 | class DeploymentStatusCreated(Event): 7 | payload: WebhookDeploymentStatusCreated 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/projects_v2_closed.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookProjectsV2ProjectClosed 2 | 3 | from ._base import Event 4 | 5 | 6 | class ProjectsV2ProjectClosed(Event): 7 | payload: WebhookProjectsV2ProjectClosed 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/projects_v2_edited.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookProjectsV2ProjectEdited 2 | 3 | from ._base import Event 4 | 5 | 6 | class ProjectsV2ProjectEdited(Event): 7 | payload: WebhookProjectsV2ProjectEdited 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/projects_v2_item_created.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookProjectsV2ItemCreated 2 | 3 | from ._base import Event 4 | 5 | 6 | class ProjectsV2ItemCreated(Event): 7 | payload: WebhookProjectsV2ItemCreated 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/projects_v2_item_deleted.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookProjectsV2ItemDeleted 2 | 3 | from ._base import Event 4 | 5 | 6 | class ProjectsV2ItemDeleted(Event): 7 | payload: WebhookProjectsV2ItemDeleted 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/pull_request_milestoned.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookPullRequestMilestoned 2 | 3 | from ._base import Event 4 | 5 | 6 | class PullRequestMilestoned(Event): 7 | payload: WebhookPullRequestMilestoned 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/pull_request_synchronize.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookPullRequestSynchronize 2 | 3 | from ._base import Event 4 | 5 | 6 | class PullRequestSynchronize(Event): 7 | payload: WebhookPullRequestSynchronize 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/pull_request_unassigned.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookPullRequestUnassigned 2 | 3 | from ._base import Event 4 | 5 | 6 | class PullRequestUnassigned(Event): 7 | payload: WebhookPullRequestUnassigned 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/registry_package_updated.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookRegistryPackageUpdated 2 | 3 | from ._base import Event 4 | 5 | 6 | class RegistryPackageUpdated(Event): 7 | payload: WebhookRegistryPackageUpdated 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/sponsorship_tier_changed.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookSponsorshipTierChanged 2 | 3 | from ._base import Event 4 | 5 | 6 | class SponsorshipTierChanged(Event): 7 | payload: WebhookSponsorshipTierChanged 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/team_added_to_repository.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookTeamAddedToRepository 2 | 3 | from ._base import Event 4 | 5 | 6 | class TeamAddedToRepository(Event): 7 | payload: WebhookTeamAddedToRepository 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/workflow_job_in_progress.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookWorkflowJobInProgress 2 | 3 | from ._base import Event 4 | 5 | 6 | class WorkflowJobInProgress(Event): 7 | payload: WebhookWorkflowJobInProgress 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/workflow_run_in_progress.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookWorkflowRunInProgress 2 | 3 | from ._base import Event 4 | 5 | 6 | class WorkflowRunInProgress(Event): 7 | payload: WebhookWorkflowRunInProgress 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/check_run_requested_action.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookCheckRunRequestedAction 2 | 3 | from ._base import Event 4 | 5 | 6 | class CheckRunRequestedAction(Event): 7 | payload: WebhookCheckRunRequestedAction 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/code_scanning_alert_fixed.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookCodeScanningAlertFixed 2 | 3 | from ._base import Event 4 | 5 | 6 | class CodeScanningAlertFixed(Event): 7 | payload: WebhookCodeScanningAlertFixed 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/dependabot_alert_reopened.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookDependabotAlertReopened 2 | 3 | from ._base import Event 4 | 5 | 6 | class DependabotAlertReopened(Event): 7 | payload: WebhookDependabotAlertReopened 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/discussion_comment_edited.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookDiscussionCommentEdited 2 | 3 | from ._base import Event 4 | 5 | 6 | class DiscussionCommentEdited(Event): 7 | payload: WebhookDiscussionCommentEdited 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/installation_target.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookInstallationTargetRenamed 2 | 3 | from ._base import Event 4 | 5 | 6 | class InstallationTargetRenamed(Event): 7 | payload: WebhookInstallationTargetRenamed 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/organization_member_added.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookOrganizationMemberAdded 2 | 3 | from ._base import Event 4 | 5 | 6 | class OrganizationMemberAdded(Event): 7 | payload: WebhookOrganizationMemberAdded 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/projects_v2_created.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookProjectsV2ProjectCreated 2 | 3 | from ._base import Event 4 | 5 | 6 | class ProjectsV2ProjectCreated(Event): 7 | payload: WebhookProjectsV2ProjectCreated 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/projects_v2_deleted.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookProjectsV2ProjectDeleted 2 | 3 | from ._base import Event 4 | 5 | 6 | class ProjectsV2ProjectDeleted(Event): 7 | payload: WebhookProjectsV2ProjectDeleted 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/projects_v2_item_archived.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookProjectsV2ItemArchived 2 | 3 | from ._base import Event 4 | 5 | 6 | class ProjectsV2ItemArchived(Event): 7 | payload: WebhookProjectsV2ItemArchived 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/projects_v2_item_converted.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookProjectsV2ItemConverted 2 | 3 | from ._base import Event 4 | 5 | 6 | class ProjectsV2ItemConverted(Event): 7 | payload: WebhookProjectsV2ItemConverted 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/projects_v2_item_reordered.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookProjectsV2ItemReordered 2 | 3 | from ._base import Event 4 | 5 | 6 | class ProjectsV2ItemReordered(Event): 7 | payload: WebhookProjectsV2ItemReordered 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/projects_v2_item_restored.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookProjectsV2ItemRestored 2 | 3 | from ._base import Event 4 | 5 | 6 | class ProjectsV2ItemRestored(Event): 7 | payload: WebhookProjectsV2ItemRestored 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/projects_v2_reopened.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookProjectsV2ProjectReopened 2 | 3 | from ._base import Event 4 | 5 | 6 | class ProjectsV2ProjectReopened(Event): 7 | payload: WebhookProjectsV2ProjectReopened 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/pull_request_demilestoned.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookPullRequestDemilestoned 2 | 3 | from ._base import Event 4 | 5 | 6 | class PullRequestDemilestoned(Event): 7 | payload: WebhookPullRequestDemilestoned 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/pull_request_review_edited.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookPullRequestReviewEdited 2 | 3 | from ._base import Event 4 | 5 | 6 | class PullRequestReviewEdited(Event): 7 | payload: WebhookPullRequestReviewEdited 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/repository_dispatch.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookRepositoryDispatchSample 2 | 3 | from ._base import Event 4 | 5 | 6 | class RepositoryDispatchSample(Event): 7 | payload: WebhookRepositoryDispatchSample 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/repository_ruleset_edited.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookRepositoryRulesetEdited 2 | 3 | from ._base import Event 4 | 5 | 6 | class RepositoryRulesetEdited(Event): 7 | payload: WebhookRepositoryRulesetEdited 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/security_advisory_updated.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookSecurityAdvisoryUpdated 2 | 3 | from ._base import Event 4 | 5 | 6 | class SecurityAdvisoryUpdated(Event): 7 | payload: WebhookSecurityAdvisoryUpdated 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/sub_issues_sub_issue_added.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookSubIssuesSubIssueAdded 2 | 3 | from ._base import Event 4 | 5 | 6 | class SubIssuesSubIssueAdded(Event): 7 | payload: WebhookSubIssuesSubIssueAdded 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/code_scanning_alert_created.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookCodeScanningAlertCreated 2 | 3 | from ._base import Event 4 | 5 | 6 | class CodeScanningAlertCreated(Event): 7 | payload: WebhookCodeScanningAlertCreated 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/dependabot_alert_dismissed.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookDependabotAlertDismissed 2 | 3 | from ._base import Event 4 | 5 | 6 | class DependabotAlertDismissed(Event): 7 | payload: WebhookDependabotAlertDismissed 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/deployment_review_approved.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookDeploymentReviewApproved 2 | 3 | from ._base import Event 4 | 5 | 6 | class DeploymentReviewApproved(Event): 7 | payload: WebhookDeploymentReviewApproved 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/deployment_review_rejected.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookDeploymentReviewRejected 2 | 3 | from ._base import Event 4 | 5 | 6 | class DeploymentReviewRejected(Event): 7 | payload: WebhookDeploymentReviewRejected 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/discussion_comment_created.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookDiscussionCommentCreated 2 | 3 | from ._base import Event 4 | 5 | 6 | class DiscussionCommentCreated(Event): 7 | payload: WebhookDiscussionCommentCreated 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/discussion_comment_deleted.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookDiscussionCommentDeleted 2 | 3 | from ._base import Event 4 | 5 | 6 | class DiscussionCommentDeleted(Event): 7 | payload: WebhookDiscussionCommentDeleted 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/registry_package_published.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookRegistryPackagePublished 2 | 3 | from ._base import Event 4 | 5 | 6 | class RegistryPackagePublished(Event): 7 | payload: WebhookRegistryPackagePublished 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/repository_ruleset_created.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookRepositoryRulesetCreated 2 | 3 | from ._base import Event 4 | 5 | 6 | class RepositoryRulesetCreated(Event): 7 | payload: WebhookRepositoryRulesetCreated 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/repository_ruleset_deleted.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookRepositoryRulesetDeleted 2 | 3 | from ._base import Event 4 | 5 | 6 | class RepositoryRulesetDeleted(Event): 7 | payload: WebhookRepositoryRulesetDeleted 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/sub_issues_sub_issue_removed.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookSubIssuesSubIssueRemoved 2 | 3 | from ._base import Event 4 | 5 | 6 | class SubIssuesSubIssueRemoved(Event): 7 | payload: WebhookSubIssuesSubIssueRemoved 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/code_scanning_alert_reopened.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookCodeScanningAlertReopened 2 | 3 | from ._base import Event 4 | 5 | 6 | class CodeScanningAlertReopened(Event): 7 | payload: WebhookCodeScanningAlertReopened 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/custom_property_values.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookCustomPropertyValuesUpdated 2 | 3 | from ._base import Event 4 | 5 | 6 | class CustomPropertyValuesUpdated(Event): 7 | payload: WebhookCustomPropertyValuesUpdated 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/deployment_review_requested.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookDeploymentReviewRequested 2 | 3 | from ._base import Event 4 | 5 | 6 | class DeploymentReviewRequested(Event): 7 | payload: WebhookDeploymentReviewRequested 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/discussion_category_changed.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookDiscussionCategoryChanged 2 | 3 | from ._base import Event 4 | 5 | 6 | class DiscussionCategoryChanged(Event): 7 | payload: WebhookDiscussionCategoryChanged 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/merge_group_checks_requested.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookMergeGroupChecksRequested 2 | 3 | from ._base import Event 4 | 5 | 6 | class MergeGroupChecksRequested(Event): 7 | payload: WebhookMergeGroupChecksRequested 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/organization_member_invited.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookOrganizationMemberInvited 2 | 3 | from ._base import Event 4 | 5 | 6 | class OrganizationMemberInvited(Event): 7 | payload: WebhookOrganizationMemberInvited 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/organization_member_removed.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookOrganizationMemberRemoved 2 | 3 | from ._base import Event 4 | 5 | 6 | class OrganizationMemberRemoved(Event): 7 | payload: WebhookOrganizationMemberRemoved 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/pull_request_ready_for_review.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookPullRequestReadyForReview 2 | 3 | from ._base import Event 4 | 5 | 6 | class PullRequestReadyForReview(Event): 7 | payload: WebhookPullRequestReadyForReview 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/secret_scanning_scan.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookSecretScanningScanCompleted 2 | 3 | from ._base import Event 4 | 5 | 6 | class SecretScanningScanCompleted(Event): 7 | payload: WebhookSecretScanningScanCompleted 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/security_advisory_published.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookSecurityAdvisoryPublished 2 | 3 | from ._base import Event 4 | 5 | 6 | class SecurityAdvisoryPublished(Event): 7 | payload: WebhookSecurityAdvisoryPublished 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/security_advisory_withdrawn.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookSecurityAdvisoryWithdrawn 2 | 3 | from ._base import Event 4 | 5 | 6 | class SecurityAdvisoryWithdrawn(Event): 7 | payload: WebhookSecurityAdvisoryWithdrawn 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/sub_issues_parent_issue_added.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookSubIssuesParentIssueAdded 2 | 3 | from ._base import Event 4 | 5 | 6 | class SubIssuesParentIssueAdded(Event): 7 | payload: WebhookSubIssuesParentIssueAdded 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/team_removed_from_repository.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookTeamRemovedFromRepository 2 | 3 | from ._base import Event 4 | 5 | 6 | class TeamRemovedFromRepository(Event): 7 | payload: WebhookTeamRemovedFromRepository 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/branch_protection_rule_edited.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookBranchProtectionRuleEdited 2 | 3 | from ._base import Event 4 | 5 | 6 | class BranchProtectionRuleEdited(Event): 7 | payload: WebhookBranchProtectionRuleEdited 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/dependabot_alert_reintroduced.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookDependabotAlertReintroduced 2 | 3 | from ._base import Event 4 | 5 | 6 | class DependabotAlertReintroduced(Event): 7 | payload: WebhookDependabotAlertReintroduced 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/marketplace_purchase_changed.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookMarketplacePurchaseChanged 2 | 3 | from ._base import Event 4 | 5 | 6 | class MarketplacePurchaseChanged(Event): 7 | payload: WebhookMarketplacePurchaseChanged 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/pull_request_review_dismissed.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookPullRequestReviewDismissed 2 | 3 | from ._base import Event 4 | 5 | 6 | class PullRequestReviewDismissed(Event): 7 | payload: WebhookPullRequestReviewDismissed 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/pull_request_review_submitted.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookPullRequestReviewSubmitted 2 | 3 | from ._base import Event 4 | 5 | 6 | class PullRequestReviewSubmitted(Event): 7 | payload: WebhookPullRequestReviewSubmitted 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/repository_advisory_published.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookRepositoryAdvisoryPublished 2 | 3 | from ._base import Event 4 | 5 | 6 | class RepositoryAdvisoryPublished(Event): 7 | payload: WebhookRepositoryAdvisoryPublished 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/repository_advisory_reported.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookRepositoryAdvisoryReported 2 | 3 | from ._base import Event 4 | 5 | 6 | class RepositoryAdvisoryReported(Event): 7 | payload: WebhookRepositoryAdvisoryReported 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/secret_scanning_alert_created.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookSecretScanningAlertCreated 2 | 3 | from ._base import Event 4 | 5 | 6 | class SecretScanningAlertCreated(Event): 7 | payload: WebhookSecretScanningAlertCreated 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/branch_protection_rule_created.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookBranchProtectionRuleCreated 2 | 3 | from ._base import Event 4 | 5 | 6 | class BranchProtectionRuleCreated(Event): 7 | payload: WebhookBranchProtectionRuleCreated 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/branch_protection_rule_deleted.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookBranchProtectionRuleDeleted 2 | 3 | from ._base import Event 4 | 5 | 6 | class BranchProtectionRuleDeleted(Event): 7 | payload: WebhookBranchProtectionRuleDeleted 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/dependabot_alert_auto_dismissed.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookDependabotAlertAutoDismissed 2 | 3 | from ._base import Event 4 | 5 | 6 | class DependabotAlertAutoDismissed(Event): 7 | payload: WebhookDependabotAlertAutoDismissed 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/dependabot_alert_auto_reopened.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookDependabotAlertAutoReopened 2 | 3 | from ._base import Event 4 | 5 | 6 | class DependabotAlertAutoReopened(Event): 7 | payload: WebhookDependabotAlertAutoReopened 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/github_app_authorization.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookGithubAppAuthorizationRevoked 2 | 3 | from ._base import Event 4 | 5 | 6 | class GithubAppAuthorizationRevoked(Event): 7 | payload: WebhookGithubAppAuthorizationRevoked 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/marketplace_purchase_cancelled.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookMarketplacePurchaseCancelled 2 | 3 | from ._base import Event 4 | 5 | 6 | class MarketplacePurchaseCancelled(Event): 7 | payload: WebhookMarketplacePurchaseCancelled 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/marketplace_purchase_purchased.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookMarketplacePurchasePurchased 2 | 3 | from ._base import Event 4 | 5 | 6 | class MarketplacePurchasePurchased(Event): 7 | payload: WebhookMarketplacePurchasePurchased 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/pull_request_auto_merge_enabled.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookPullRequestAutoMergeEnabled 2 | 3 | from ._base import Event 4 | 5 | 6 | class PullRequestAutoMergeEnabled(Event): 7 | payload: WebhookPullRequestAutoMergeEnabled 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/pull_request_converted_to_draft.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookPullRequestConvertedToDraft 2 | 3 | from ._base import Event 4 | 5 | 6 | class PullRequestConvertedToDraft(Event): 7 | payload: WebhookPullRequestConvertedToDraft 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/secret_scanning_alert_assigned.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookSecretScanningAlertAssigned 2 | 3 | from ._base import Event 4 | 5 | 6 | class SecretScanningAlertAssigned(Event): 7 | payload: WebhookSecretScanningAlertAssigned 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/secret_scanning_alert_reopened.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookSecretScanningAlertReopened 2 | 3 | from ._base import Event 4 | 5 | 6 | class SecretScanningAlertReopened(Event): 7 | payload: WebhookSecretScanningAlertReopened 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/secret_scanning_alert_resolved.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookSecretScanningAlertResolved 2 | 3 | from ._base import Event 4 | 5 | 6 | class SecretScanningAlertResolved(Event): 7 | payload: WebhookSecretScanningAlertResolved 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/secret_scanning_alert_validated.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookSecretScanningAlertValidated 2 | 3 | from ._base import Event 4 | 5 | 6 | class SecretScanningAlertValidated(Event): 7 | payload: WebhookSecretScanningAlertValidated 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/sponsorship_pending_tier_change.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookSponsorshipPendingTierChange 2 | 3 | from ._base import Event 4 | 5 | 6 | class SponsorshipPendingTierChange(Event): 7 | payload: WebhookSponsorshipPendingTierChange 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/sub_issues_parent_issue_removed.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookSubIssuesParentIssueRemoved 2 | 3 | from ._base import Event 4 | 5 | 6 | class SubIssuesParentIssueRemoved(Event): 7 | payload: WebhookSubIssuesParentIssueRemoved 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/installation_repositories_added.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookInstallationRepositoriesAdded 2 | 3 | from ._base import Event 4 | 5 | 6 | class InstallationRepositoriesAdded(Event): 7 | payload: WebhookInstallationRepositoriesAdded 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/projects_v2_status_update_created.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookProjectsV2StatusUpdateCreated 2 | 3 | from ._base import Event 4 | 5 | 6 | class ProjectsV2StatusUpdateCreated(Event): 7 | payload: WebhookProjectsV2StatusUpdateCreated 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/projects_v2_status_update_deleted.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookProjectsV2StatusUpdateDeleted 2 | 3 | from ._base import Event 4 | 5 | 6 | class ProjectsV2StatusUpdateDeleted(Event): 7 | payload: WebhookProjectsV2StatusUpdateDeleted 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/projects_v2_status_update_edited.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookProjectsV2StatusUpdateEdited 2 | 3 | from ._base import Event 4 | 5 | 6 | class ProjectsV2StatusUpdateEdited(Event): 7 | payload: WebhookProjectsV2StatusUpdateEdited 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/pull_request_auto_merge_disabled.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookPullRequestAutoMergeDisabled 2 | 3 | from ._base import Event 4 | 5 | 6 | class PullRequestAutoMergeDisabled(Event): 7 | payload: WebhookPullRequestAutoMergeDisabled 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/secret_scanning_alert_unassigned.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookSecretScanningAlertUnassigned 2 | 3 | from ._base import Event 4 | 5 | 6 | class SecretScanningAlertUnassigned(Event): 7 | payload: WebhookSecretScanningAlertUnassigned 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/code_scanning_alert_closed_by_user.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookCodeScanningAlertClosedByUser 2 | 3 | from ._base import Event 4 | 5 | 6 | class CodeScanningAlertClosedByUser(Event): 7 | payload: WebhookCodeScanningAlertClosedByUser 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/deployment_protection_rule.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookDeploymentProtectionRuleRequested 2 | 3 | from ._base import Event 4 | 5 | 6 | class DeploymentProtectionRuleRequested(Event): 7 | payload: WebhookDeploymentProtectionRuleRequested 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/issue_dependencies_blocking_added.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookIssueDependenciesBlockingAdded 2 | 3 | from ._base import Event 4 | 5 | 6 | class IssueDependenciesBlockingAdded(Event): 7 | payload: WebhookIssueDependenciesBlockingAdded 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/sponsorship_pending_cancellation.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookSponsorshipPendingCancellation 2 | 3 | from ._base import Event 4 | 5 | 6 | class SponsorshipPendingCancellation(Event): 7 | payload: WebhookSponsorshipPendingCancellation 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/code_scanning_alert_reopened_by_user.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookCodeScanningAlertReopenedByUser 2 | 3 | from ._base import Event 4 | 5 | 6 | class CodeScanningAlertReopenedByUser(Event): 7 | payload: WebhookCodeScanningAlertReopenedByUser 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/installation_repositories_removed.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookInstallationRepositoriesRemoved 2 | 3 | from ._base import Event 4 | 5 | 6 | class InstallationRepositoriesRemoved(Event): 7 | payload: WebhookInstallationRepositoriesRemoved 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/issue_dependencies_blocked_by_added.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookIssueDependenciesBlockedByAdded 2 | 3 | from ._base import Event 4 | 5 | 6 | class IssueDependenciesBlockedByAdded(Event): 7 | payload: WebhookIssueDependenciesBlockedByAdded 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/pull_request_review_thread_resolved.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookPullRequestReviewThreadResolved 2 | 3 | from ._base import Event 4 | 5 | 6 | class PullRequestReviewThreadResolved(Event): 7 | payload: WebhookPullRequestReviewThreadResolved 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/issue_dependencies_blocking_removed.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookIssueDependenciesBlockingRemoved 2 | 3 | from ._base import Event 4 | 5 | 6 | class IssueDependenciesBlockingRemoved(Event): 7 | payload: WebhookIssueDependenciesBlockingRemoved 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/marketplace_purchase_pending_change.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookMarketplacePurchasePendingChange 2 | 3 | from ._base import Event 4 | 5 | 6 | class MarketplacePurchasePendingChange(Event): 7 | payload: WebhookMarketplacePurchasePendingChange 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/personal_access_token_request_denied.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookPersonalAccessTokenRequestDenied 2 | 3 | from ._base import Event 4 | 5 | 6 | class PersonalAccessTokenRequestDenied(Event): 7 | payload: WebhookPersonalAccessTokenRequestDenied 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/secret_scanning_alert_location.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookSecretScanningAlertLocationCreated 2 | 3 | from ._base import Event 4 | 5 | 6 | class SecretScanningAlertLocationCreated(Event): 7 | payload: WebhookSecretScanningAlertLocationCreated 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/code_scanning_alert_appeared_in_branch.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookCodeScanningAlertAppearedInBranch 2 | 3 | from ._base import Event 4 | 5 | 6 | class CodeScanningAlertAppearedInBranch(Event): 7 | payload: WebhookCodeScanningAlertAppearedInBranch 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/custom_property_promote_to_enterprise.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookCustomPropertyPromotedToEnterprise 2 | 3 | from ._base import Event 4 | 5 | 6 | class CustomPropertyPromotedToEnterprise(Event): 7 | payload: WebhookCustomPropertyPromotedToEnterprise 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/installation_new_permissions_accepted.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookInstallationNewPermissionsAccepted 2 | 3 | from ._base import Event 4 | 5 | 6 | class InstallationNewPermissionsAccepted(Event): 7 | payload: WebhookInstallationNewPermissionsAccepted 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/issue_dependencies_blocked_by_removed.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookIssueDependenciesBlockedByRemoved 2 | 3 | from ._base import Event 4 | 5 | 6 | class IssueDependenciesBlockedByRemoved(Event): 7 | payload: WebhookIssueDependenciesBlockedByRemoved 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/personal_access_token_request_approved.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookPersonalAccessTokenRequestApproved 2 | 3 | from ._base import Event 4 | 5 | 6 | class PersonalAccessTokenRequestApproved(Event): 7 | payload: WebhookPersonalAccessTokenRequestApproved 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/personal_access_token_request_created.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookPersonalAccessTokenRequestCreated 2 | 3 | from ._base import Event 4 | 5 | 6 | class PersonalAccessTokenRequestCreated(Event): 7 | payload: WebhookPersonalAccessTokenRequestCreated 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/pull_request_review_thread_unresolved.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookPullRequestReviewThreadUnresolved 2 | 3 | from ._base import Event 4 | 5 | 6 | class PullRequestReviewThreadUnresolved(Event): 7 | payload: WebhookPullRequestReviewThreadUnresolved 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/repository_vulnerability_alert_create.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookRepositoryVulnerabilityAlertCreate 2 | 3 | from ._base import Event 4 | 5 | 6 | class RepositoryVulnerabilityAlertCreate(Event): 7 | payload: WebhookRepositoryVulnerabilityAlertCreate 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/repository_vulnerability_alert_reopen.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookRepositoryVulnerabilityAlertReopen 2 | 3 | from ._base import Event 4 | 5 | 6 | class RepositoryVulnerabilityAlertReopen(Event): 7 | payload: WebhookRepositoryVulnerabilityAlertReopen 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/secret_scanning_alert_publicly_leaked.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookSecretScanningAlertPubliclyLeaked 2 | 3 | from ._base import Event 4 | 5 | 6 | class SecretScanningAlertPubliclyLeaked(Event): 7 | payload: WebhookSecretScanningAlertPubliclyLeaked 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/personal_access_token_request_cancelled.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookPersonalAccessTokenRequestCancelled 2 | 3 | from ._base import Event 4 | 5 | 6 | class PersonalAccessTokenRequestCancelled(Event): 7 | payload: WebhookPersonalAccessTokenRequestCancelled 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/repository_vulnerability_alert_dismiss.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookRepositoryVulnerabilityAlertDismiss 2 | 3 | from ._base import Event 4 | 5 | 6 | class RepositoryVulnerabilityAlertDismiss(Event): 7 | payload: WebhookRepositoryVulnerabilityAlertDismiss 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/repository_vulnerability_alert_resolve.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookRepositoryVulnerabilityAlertResolve 2 | 3 | from ._base import Event 4 | 5 | 6 | class RepositoryVulnerabilityAlertResolve(Event): 7 | payload: WebhookRepositoryVulnerabilityAlertResolve 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/branch_protection_configuration_enabled.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import WebhookBranchProtectionConfigurationEnabled 2 | 3 | from ._base import Event 4 | 5 | 6 | class BranchProtectionConfigurationEnabled(Event): 7 | payload: WebhookBranchProtectionConfigurationEnabled 8 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/branch_protection_configuration_disabled.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import ( 2 | WebhookBranchProtectionConfigurationDisabled, 3 | ) 4 | 5 | from ._base import Event 6 | 7 | 8 | class BranchProtectionConfigurationDisabled(Event): 9 | payload: WebhookBranchProtectionConfigurationDisabled 10 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/marketplace_purchase_pending_change_cancelled.py: -------------------------------------------------------------------------------- 1 | from githubkit.versions.latest.models import ( 2 | WebhookMarketplacePurchasePendingChangeCancelled, 3 | ) 4 | 5 | from ._base import Event 6 | 7 | 8 | class MarketplacePurchasePendingChangeCancelled(Event): 9 | payload: WebhookMarketplacePurchasePendingChangeCancelled 10 | -------------------------------------------------------------------------------- /codegen/templates/_types.py.jinja: -------------------------------------------------------------------------------- 1 | events = { 2 | {% for event, actions in types.items() %} 3 | {% if (actions | first).action %} 4 | "{{ event }}": { 5 | {% for action in actions %} 6 | "{{ action.action }}": "{{ action.class_name }}", 7 | {% endfor %} 8 | }, 9 | {% else %} 10 | "{{ event }}": "{{ (actions | first).class_name }}", 11 | {% endif %} 12 | {% endfor %} 13 | } 14 | -------------------------------------------------------------------------------- /.github/workflows/ruff.yml: -------------------------------------------------------------------------------- 1 | name: Ruff Lint 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | pull_request: 8 | paths: 9 | - "nonebot/**" 10 | - "codegen/**" 11 | - "uv.lock" 12 | - "pyproject.toml" 13 | 14 | jobs: 15 | ruff: 16 | name: Ruff Lint 17 | runs-on: ubuntu-latest 18 | steps: 19 | - uses: actions/checkout@v6 20 | 21 | - name: Run Ruff Lint 22 | uses: chartboost/ruff-action@v1 23 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/pull_request_review_requested.py: -------------------------------------------------------------------------------- 1 | from typing import Union 2 | 3 | from githubkit.versions.latest.models import ( 4 | WebhookPullRequestReviewRequestedOneof0, 5 | WebhookPullRequestReviewRequestedOneof1, 6 | ) 7 | 8 | from ._base import Event 9 | 10 | 11 | class PullRequestReviewRequested(Event): 12 | payload: Union[ 13 | WebhookPullRequestReviewRequestedOneof0, WebhookPullRequestReviewRequestedOneof1 14 | ] 15 | -------------------------------------------------------------------------------- /nonebot/adapters/github/compat.py: -------------------------------------------------------------------------------- 1 | from typing import Literal 2 | 3 | from nonebot.compat import PYDANTIC_V2 4 | 5 | __all__ = ("field_validator",) 6 | 7 | if PYDANTIC_V2: 8 | from pydantic import field_validator as field_validator 9 | else: 10 | from pydantic import validator 11 | 12 | def field_validator( 13 | __field: str, /, *fields: str, mode: Literal["before", "after"] = "after" 14 | ): 15 | return validator(__field, *fields, pre=mode == "before", allow_reuse=True) 16 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/pull_request_review_request_removed.py: -------------------------------------------------------------------------------- 1 | from typing import Union 2 | 3 | from githubkit.versions.latest.models import ( 4 | WebhookPullRequestReviewRequestRemovedOneof0, 5 | WebhookPullRequestReviewRequestRemovedOneof1, 6 | ) 7 | 8 | from ._base import Event 9 | 10 | 11 | class PullRequestReviewRequestRemoved(Event): 12 | payload: Union[ 13 | WebhookPullRequestReviewRequestRemovedOneof0, 14 | WebhookPullRequestReviewRequestRemovedOneof1, 15 | ] 16 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: github-actions 4 | directory: "/" 5 | schedule: 6 | interval: daily 7 | groups: 8 | actions: 9 | patterns: 10 | - "*" 11 | 12 | - package-ecosystem: github-actions 13 | directory: "/.github/actions/setup-python" 14 | schedule: 15 | interval: daily 16 | groups: 17 | actions: 18 | patterns: 19 | - "*" 20 | 21 | - package-ecosystem: devcontainers 22 | directory: "/" 23 | schedule: 24 | interval: daily 25 | groups: 26 | devcontainers: 27 | patterns: 28 | - "*" 29 | -------------------------------------------------------------------------------- /.pre-commit-config.yaml: -------------------------------------------------------------------------------- 1 | default_install_hook_types: [pre-commit, prepare-commit-msg] 2 | ci: 3 | autofix_commit_msg: ":rotating_light: auto fix by pre-commit hooks" 4 | autofix_prs: true 5 | autoupdate_branch: master 6 | autoupdate_schedule: monthly 7 | autoupdate_commit_msg: ":arrow_up: auto update by pre-commit hooks" 8 | repos: 9 | - repo: https://github.com/astral-sh/ruff-pre-commit 10 | rev: v0.14.7 11 | hooks: 12 | - id: ruff 13 | args: [--fix, --exit-non-zero-on-fix] 14 | stages: [pre-commit] 15 | - id: ruff-format 16 | stages: [pre-commit] 17 | 18 | - repo: https://github.com/nonebot/nonemoji 19 | rev: v0.1.4 20 | hooks: 21 | - id: nonemoji 22 | stages: [prepare-commit-msg] 23 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/issue_comment_edited.py: -------------------------------------------------------------------------------- 1 | from functools import cached_property 2 | from typing_extensions import override 3 | 4 | from githubkit.versions.latest.models import WebhookIssueCommentEdited 5 | 6 | from nonebot.compat import PYDANTIC_V2, ConfigDict 7 | 8 | from ..message import Message 9 | from ._base import Event 10 | 11 | 12 | class IssueCommentEdited(Event): 13 | payload: WebhookIssueCommentEdited 14 | 15 | @cached_property 16 | def _message(self): 17 | return Message(self.payload.comment.body) 18 | 19 | @override 20 | def get_message(self): 21 | return self._message 22 | 23 | if PYDANTIC_V2: 24 | model_config = ConfigDict(ignored_types=(cached_property,)) 25 | else: 26 | 27 | class Config: 28 | keep_untouched = (cached_property,) 29 | -------------------------------------------------------------------------------- /codegen/templates/__init__.py.jinja: -------------------------------------------------------------------------------- 1 | from typing import TYPE_CHECKING 2 | 3 | if TYPE_CHECKING: 4 | from ._base import Event as Event 5 | from ._types import events as events 6 | {% for event, actions in types.items() %} 7 | {% for action in actions %} 8 | from .{{ filename(event, action) }} import {{ action.class_name }} as {{ action.class_name }} 9 | {% endfor %} 10 | {% endfor %} 11 | else: 12 | __lazy_vars__ = { 13 | {% for event, actions in types.items() %} 14 | {% for action in actions %} 15 | ".{{ filename(event, action) }}": ( 16 | "{{ action.class_name }}", 17 | ), 18 | {% endfor %} 19 | {% endfor %} 20 | "._base": ( 21 | "Event", 22 | ), 23 | "._types": ( 24 | "events", 25 | ) 26 | } 27 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/issue_comment_deleted.py: -------------------------------------------------------------------------------- 1 | from functools import cached_property 2 | from typing_extensions import override 3 | 4 | from githubkit.versions.latest.models import WebhookIssueCommentDeleted 5 | 6 | from nonebot.compat import PYDANTIC_V2, ConfigDict 7 | 8 | from ..message import Message 9 | from ._base import Event 10 | 11 | 12 | class IssueCommentDeleted(Event): 13 | payload: WebhookIssueCommentDeleted 14 | 15 | @cached_property 16 | def _message(self): 17 | return Message(self.payload.comment.body) 18 | 19 | @override 20 | def get_message(self): 21 | return self._message 22 | 23 | if PYDANTIC_V2: 24 | model_config = ConfigDict(ignored_types=(cached_property,)) 25 | else: 26 | 27 | class Config: 28 | keep_untouched = (cached_property,) 29 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | 12 | # The JSON files contain newlines inconsistently 13 | [*.json] 14 | insert_final_newline = ignore 15 | 16 | # Minified JavaScript files shouldn't be changed 17 | [**.min.js] 18 | indent_style = ignore 19 | insert_final_newline = ignore 20 | 21 | # Makefiles always use tabs for indentation 22 | [Makefile] 23 | indent_style = tab 24 | 25 | # Batch files use tabs for indentation 26 | [*.bat] 27 | indent_style = tab 28 | 29 | [*.md] 30 | trim_trailing_whitespace = false 31 | 32 | # Matches the exact files either package.json or .travis.yml 33 | [{package.json,.travis.yml}] 34 | indent_size = 2 35 | 36 | [{*.py,*.pyi}] 37 | indent_size = 4 38 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/pull_request_review_comment_edited.py: -------------------------------------------------------------------------------- 1 | from functools import cached_property 2 | from typing_extensions import override 3 | 4 | from githubkit.versions.latest.models import WebhookPullRequestReviewCommentEdited 5 | 6 | from nonebot.compat import PYDANTIC_V2, ConfigDict 7 | 8 | from ..message import Message 9 | from ._base import Event 10 | 11 | 12 | class PullRequestReviewCommentEdited(Event): 13 | payload: WebhookPullRequestReviewCommentEdited 14 | 15 | @cached_property 16 | def _message(self): 17 | return Message(self.payload.comment.body) 18 | 19 | @override 20 | def get_message(self): 21 | return self._message 22 | 23 | if PYDANTIC_V2: 24 | model_config = ConfigDict(ignored_types=(cached_property,)) 25 | else: 26 | 27 | class Config: 28 | keep_untouched = (cached_property,) 29 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/pull_request_review_comment_deleted.py: -------------------------------------------------------------------------------- 1 | from functools import cached_property 2 | from typing_extensions import override 3 | 4 | from githubkit.versions.latest.models import WebhookPullRequestReviewCommentDeleted 5 | 6 | from nonebot.compat import PYDANTIC_V2, ConfigDict 7 | 8 | from ..message import Message 9 | from ._base import Event 10 | 11 | 12 | class PullRequestReviewCommentDeleted(Event): 13 | payload: WebhookPullRequestReviewCommentDeleted 14 | 15 | @cached_property 16 | def _message(self): 17 | return Message(self.payload.comment.body) 18 | 19 | @override 20 | def get_message(self): 21 | return self._message 22 | 23 | if PYDANTIC_V2: 24 | model_config = ConfigDict(ignored_types=(cached_property,)) 25 | else: 26 | 27 | class Config: 28 | keep_untouched = (cached_property,) 29 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/commit_comment.py: -------------------------------------------------------------------------------- 1 | from functools import cached_property 2 | from typing_extensions import override 3 | 4 | from githubkit.versions.latest.models import WebhookCommitCommentCreated 5 | 6 | from nonebot.compat import PYDANTIC_V2, ConfigDict 7 | 8 | from ..message import Message 9 | from ._base import Event 10 | 11 | 12 | class CommitCommentCreated(Event): 13 | payload: WebhookCommitCommentCreated 14 | 15 | @override 16 | def get_type(self) -> str: 17 | return "message" 18 | 19 | @cached_property 20 | def _message(self): 21 | return Message(self.payload.comment.body) 22 | 23 | @override 24 | def get_message(self): 25 | return self._message 26 | 27 | if PYDANTIC_V2: 28 | model_config = ConfigDict(ignored_types=(cached_property,)) 29 | else: 30 | 31 | class Config: 32 | keep_untouched = (cached_property,) 33 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/issue_comment_created.py: -------------------------------------------------------------------------------- 1 | from functools import cached_property 2 | from typing_extensions import override 3 | 4 | from githubkit.versions.latest.models import WebhookIssueCommentCreated 5 | 6 | from nonebot.compat import PYDANTIC_V2, ConfigDict 7 | 8 | from ..message import Message 9 | from ._base import Event 10 | 11 | 12 | class IssueCommentCreated(Event): 13 | payload: WebhookIssueCommentCreated 14 | 15 | @override 16 | def get_type(self) -> str: 17 | return "message" 18 | 19 | @cached_property 20 | def _message(self): 21 | return Message(self.payload.comment.body) 22 | 23 | @override 24 | def get_message(self): 25 | return self._message 26 | 27 | if PYDANTIC_V2: 28 | model_config = ConfigDict(ignored_types=(cached_property,)) 29 | else: 30 | 31 | class Config: 32 | keep_untouched = (cached_property,) 33 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/pull_request_review_comment_created.py: -------------------------------------------------------------------------------- 1 | from functools import cached_property 2 | from typing_extensions import override 3 | 4 | from githubkit.versions.latest.models import WebhookPullRequestReviewCommentCreated 5 | 6 | from nonebot.compat import PYDANTIC_V2, ConfigDict 7 | 8 | from ..message import Message 9 | from ._base import Event 10 | 11 | 12 | class PullRequestReviewCommentCreated(Event): 13 | payload: WebhookPullRequestReviewCommentCreated 14 | 15 | @override 16 | def get_type(self) -> str: 17 | return "message" 18 | 19 | @cached_property 20 | def _message(self): 21 | return Message(self.payload.comment.body) 22 | 23 | @override 24 | def get_message(self): 25 | return self._message 26 | 27 | if PYDANTIC_V2: 28 | model_config = ConfigDict(ignored_types=(cached_property,)) 29 | else: 30 | 31 | class Config: 32 | keep_untouched = (cached_property,) 33 | -------------------------------------------------------------------------------- /nonebot/adapters/github/utils.py: -------------------------------------------------------------------------------- 1 | import contextlib 2 | import re 3 | from typing import TYPE_CHECKING, Any 4 | 5 | from nonebot.utils import logger_wrapper 6 | 7 | if TYPE_CHECKING: 8 | from .bot import Bot 9 | 10 | log = logger_wrapper("GitHub") 11 | 12 | 13 | def escape(content: str) -> str: 14 | return re.sub(r"\\|`|\*|_|{|}|\[|\]|\(|\)|#|\+|-|\.|!", r"\\\1", content) 15 | 16 | 17 | def get_attr_or_item(obj: Any, attr: str) -> Any: 18 | with contextlib.suppress(TypeError, KeyError): 19 | return getattr(obj, attr, None) or obj[attr] 20 | 21 | 22 | class APIContext: 23 | __slots__ = ("bot", "parts") 24 | 25 | def __init__(self, bot: "Bot", parts: tuple[str, ...]): 26 | self.bot = bot 27 | self.parts = parts 28 | 29 | def __getattr__(self, name: str) -> "APIContext": 30 | return APIContext(self.bot, (*self.parts, name)) 31 | 32 | async def __call__(self, **kwargs: Any) -> Any: 33 | return await self.bot.call_api(".".join(self.parts), **kwargs) 34 | -------------------------------------------------------------------------------- /nonebot/adapters/github/__init__.py: -------------------------------------------------------------------------------- 1 | from typing import TYPE_CHECKING 2 | 3 | from . import lazy_module 4 | 5 | lazy_module.apply() 6 | 7 | if TYPE_CHECKING: 8 | from .event import * # noqa: F403 9 | else: 10 | from . import event 11 | 12 | def __getattr__(name: str): 13 | try: 14 | return getattr(event, name) 15 | except AttributeError: 16 | raise AttributeError(f"module {__name__!r} has no attribute {name!r}") 17 | 18 | 19 | from .adapter import Adapter as Adapter 20 | from .bot import Bot as Bot 21 | from .bot import GitHubBot as GitHubBot 22 | from .bot import OAuthBot as OAuthBot 23 | from .exception import ActionFailed as ActionFailed 24 | from .exception import ActionTimeout as ActionTimeout 25 | from .exception import GitHubAdapterException as GitHubAdapterException 26 | from .exception import GraphQLError as GraphQLError 27 | from .exception import NetworkError as NetworkError 28 | from .message import Message as Message 29 | from .message import MessageSegment as MessageSegment 30 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 NoneBot 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /nonebot/adapters/github/exception.py: -------------------------------------------------------------------------------- 1 | """OneBot v11 错误类型。 2 | 3 | FrontMatter: 4 | sidebar_position: 8 5 | description: onebot.v11.exception 模块 6 | """ 7 | 8 | from typing import Optional 9 | 10 | from githubkit.exception import GraphQLFailed, RequestFailed, RequestTimeout 11 | 12 | from nonebot.exception import ActionFailed as BaseActionFailed 13 | from nonebot.exception import AdapterException 14 | from nonebot.exception import NetworkError as BaseNetworkError 15 | 16 | 17 | class GitHubAdapterException(AdapterException): 18 | def __init__(self): 19 | super().__init__("GitHub") 20 | 21 | 22 | class NetworkError(BaseNetworkError, GitHubAdapterException): 23 | def __init__(self, msg: Optional[str] = None): 24 | super().__init__() 25 | self.msg: Optional[str] = msg 26 | """错误原因""" 27 | 28 | def __repr__(self): 29 | return f"NetWorkError(message={self.msg!r})" 30 | 31 | 32 | class ActionTimeout(RequestTimeout, NetworkError): ... 33 | 34 | 35 | class ActionFailed(RequestFailed, BaseActionFailed, GitHubAdapterException): ... 36 | 37 | 38 | class GraphQLError(GraphQLFailed, BaseActionFailed, GitHubAdapterException): ... 39 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release 2 | 3 | on: 4 | push: 5 | tags: 6 | - v* 7 | 8 | jobs: 9 | release: 10 | runs-on: ubuntu-latest 11 | permissions: 12 | contents: write 13 | id-token: write 14 | steps: 15 | - uses: actions/checkout@v6 16 | 17 | - name: Install the latest version of uv 18 | uses: astral-sh/setup-uv@v7 19 | 20 | - name: Get Version 21 | id: version 22 | run: | 23 | echo "VERSION=$(uv version --short)" >> $GITHUB_OUTPUT 24 | echo "TAG_VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT 25 | echo "TAG_NAME=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT 26 | 27 | - name: Check Version 28 | if: steps.version.outputs.VERSION != steps.version.outputs.TAG_VERSION 29 | run: exit 1 30 | 31 | - name: Build Package 32 | run: uv build 33 | 34 | - name: Publish package to PyPI 35 | run: uv publish 36 | 37 | - name: Publish package to GitHub 38 | run: | 39 | gh release upload --clobber ${{ steps.version.outputs.TAG_NAME }} dist/*.tar.gz dist/*.whl 40 | env: 41 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 42 | -------------------------------------------------------------------------------- /nonebot/adapters/github/config.py: -------------------------------------------------------------------------------- 1 | from typing import Any, Optional, Union 2 | 3 | from pydantic import BaseModel, Field 4 | 5 | from .compat import field_validator 6 | 7 | 8 | class OAuthApp(BaseModel): 9 | client_id: str 10 | client_secret: str 11 | webhook_secret: Optional[str] = None 12 | 13 | @property 14 | def id(self) -> str: 15 | return self.client_id 16 | 17 | 18 | class GitHubApp(BaseModel): 19 | app_id: str 20 | private_key: str 21 | client_id: Optional[str] = None 22 | client_secret: Optional[str] = None 23 | webhook_secret: Optional[str] = None 24 | 25 | @property 26 | def id(self) -> str: 27 | return self.app_id 28 | 29 | @field_validator("private_key", mode="before") 30 | @classmethod 31 | def concat_key(cls, value: object) -> Any: 32 | return "\n".join(value) if isinstance(value, list) else value 33 | 34 | 35 | class Config(BaseModel): 36 | """GitHub Adapter Config""" 37 | 38 | github_apps: list[Union[GitHubApp, OAuthApp]] = Field(default_factory=list) 39 | """Allowed GitHub App List""" 40 | github_base_url: Optional[str] = None 41 | github_accept_format: Optional[str] = None 42 | github_previews: Optional[list[str]] = None 43 | -------------------------------------------------------------------------------- /nonebot/adapters/github/message.py: -------------------------------------------------------------------------------- 1 | from collections.abc import Iterable 2 | from typing_extensions import override 3 | 4 | from nonebot.adapters import Message as BaseMessage 5 | from nonebot.adapters import MessageSegment as BaseMessageSegment 6 | 7 | 8 | class MessageSegment(BaseMessageSegment["Message"]): 9 | @classmethod 10 | @override 11 | def get_message_class(cls) -> type["Message"]: 12 | return Message 13 | 14 | @override 15 | def __str__(self) -> str: 16 | if self.type == "markdown": 17 | return self.data["text"] 18 | return f"<{self.type}:{','.join(f'{k}={v}' for k, v in self.data.items())}>" 19 | 20 | @override 21 | def is_text(self) -> bool: 22 | return self.type == "markdown" 23 | 24 | @staticmethod 25 | def markdown(text: str) -> "MessageSegment": 26 | return MessageSegment("markdown", {"text": text}) 27 | 28 | 29 | class Message(BaseMessage[MessageSegment]): 30 | @classmethod 31 | @override 32 | def get_segment_class(cls) -> type[MessageSegment]: 33 | return MessageSegment 34 | 35 | @staticmethod 36 | @override 37 | def _construct(msg: str) -> Iterable[MessageSegment]: 38 | yield MessageSegment.markdown(msg) 39 | -------------------------------------------------------------------------------- /codegen/templates/event.py.jinja: -------------------------------------------------------------------------------- 1 | from typing import Union 2 | from functools import cached_property 3 | from typing_extensions import override 4 | 5 | from nonebot.compat import PYDANTIC_V2, ConfigDict 6 | {% for model in action.payload_types %} 7 | from githubkit.versions.latest.models import {{ model }} 8 | {% endfor %} 9 | 10 | from ..message import Message 11 | 12 | from ._base import Event 13 | 14 | class {{ action.class_name }}(Event): 15 | {% if action.payload_types | length > 1 %} 16 | payload: Union[{{ action.payload_types | join(", ") }}] 17 | {% else %} 18 | payload: {{ action.payload_types | first }} 19 | {% endif %} 20 | 21 | {% if action.class_name in message_events %} 22 | @override 23 | def get_type(self) -> str: 24 | return "message" 25 | {% endif %} 26 | 27 | {% if action.class_name in has_message_events %} 28 | @cached_property 29 | def _message(self): 30 | return Message(self.payload.comment.body) 31 | 32 | @override 33 | def get_message(self): 34 | return self._message 35 | 36 | if PYDANTIC_V2: 37 | model_config = ConfigDict(ignored_types=(cached_property,)) 38 | else: 39 | class Config: 40 | keep_untouched = (cached_property,) 41 | 42 | {% endif %} 43 | -------------------------------------------------------------------------------- /.devcontainer/devcontainer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Ubuntu", 3 | "image": "mcr.microsoft.com/devcontainers/base:ubuntu", 4 | "features": { 5 | "ghcr.io/jsburckhardt/devcontainer-features/uv:1": {} 6 | }, 7 | "postCreateCommand": "uv sync && uv run pre-commit install", 8 | "customizations": { 9 | "vscode": { 10 | "settings": { 11 | "python.analysis.diagnosticMode": "workspace", 12 | "[python]": { 13 | "editor.defaultFormatter": "charliermarsh.ruff", 14 | "editor.codeActionsOnSave": { 15 | "source.fixAll.ruff": "explicit", 16 | "source.organizeImports": "explicit" 17 | } 18 | }, 19 | "[javascript]": { 20 | "editor.defaultFormatter": "esbenp.prettier-vscode" 21 | }, 22 | "[html]": { 23 | "editor.defaultFormatter": "esbenp.prettier-vscode" 24 | }, 25 | "[typescript]": { 26 | "editor.defaultFormatter": "esbenp.prettier-vscode" 27 | }, 28 | "[javascriptreact]": { 29 | "editor.defaultFormatter": "esbenp.prettier-vscode" 30 | }, 31 | "[typescriptreact]": { 32 | "editor.defaultFormatter": "esbenp.prettier-vscode" 33 | }, 34 | "files.exclude": { 35 | "**/__pycache__": true 36 | }, 37 | "files.watcherExclude": { 38 | "**/target/**": true, 39 | "**/__pycache__": true 40 | } 41 | }, 42 | "extensions": [ 43 | "ms-python.python", 44 | "ms-python.vscode-pylance", 45 | "charliermarsh.ruff", 46 | "EditorConfig.EditorConfig", 47 | "esbenp.prettier-vscode" 48 | ] 49 | } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /codegen/templates/_base.py.jinja: -------------------------------------------------------------------------------- 1 | from typing import Any 2 | from typing_extensions import override 3 | 4 | from nonebot.utils import escape_tag 5 | 6 | from nonebot.adapters import Event as BaseEvent 7 | 8 | from ..message import Message 9 | from ..utils import get_attr_or_item 10 | 11 | 12 | class Event(BaseEvent): 13 | id: str 14 | name: str 15 | payload: dict[str, Any] 16 | 17 | to_me: bool = False 18 | 19 | @override 20 | def get_type(self) -> str: 21 | return "notice" 22 | 23 | @override 24 | def get_event_name(self) -> str: 25 | return self.name + ( 26 | f".{action}" if (action := get_attr_or_item(self.payload, "action")) else "" 27 | ) 28 | 29 | @override 30 | def get_event_description(self) -> str: 31 | return escape_tag( 32 | f"{self.__class__.__name__} {self.id}" 33 | + ( 34 | f" from sender {sender_name}" 35 | if (sender := get_attr_or_item(self.payload, "sender")) 36 | and (sender_name := get_attr_or_item(sender, "login")) 37 | else "" 38 | ) 39 | + ( 40 | f" in repository {repo_name}" 41 | if (repo := get_attr_or_item(self.payload, "repository")) 42 | and (repo_name := get_attr_or_item(repo, "full_name")) 43 | else "" 44 | ) 45 | ) 46 | 47 | @override 48 | def get_message(self) -> Message: 49 | raise ValueError("Event has no message!") 50 | 51 | @override 52 | def get_user_id(self) -> str: 53 | if sender := get_attr_or_item(self.payload, "sender"): 54 | return sender.login 55 | raise ValueError("Event has no context!") 56 | 57 | @override 58 | def get_session_id(self) -> str: 59 | return self.get_user_id() 60 | 61 | @override 62 | def is_tome(self) -> bool: 63 | return self.to_me 64 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/_base.py: -------------------------------------------------------------------------------- 1 | from typing import Any 2 | from typing_extensions import override 3 | 4 | from nonebot.adapters import Event as BaseEvent 5 | from nonebot.utils import escape_tag 6 | 7 | from ..message import Message 8 | from ..utils import get_attr_or_item 9 | 10 | 11 | class Event(BaseEvent): 12 | id: str 13 | name: str 14 | payload: dict[str, Any] 15 | 16 | to_me: bool = False 17 | 18 | @override 19 | def get_type(self) -> str: 20 | return "notice" 21 | 22 | @override 23 | def get_event_name(self) -> str: 24 | return self.name + ( 25 | f".{action}" if (action := get_attr_or_item(self.payload, "action")) else "" 26 | ) 27 | 28 | @override 29 | def get_event_description(self) -> str: 30 | return escape_tag( 31 | f"{self.__class__.__name__} {self.id}" 32 | + ( 33 | f" from sender {sender_name}" 34 | if (sender := get_attr_or_item(self.payload, "sender")) 35 | and (sender_name := get_attr_or_item(sender, "login")) 36 | else "" 37 | ) 38 | + ( 39 | f" in repository {repo_name}" 40 | if (repo := get_attr_or_item(self.payload, "repository")) 41 | and (repo_name := get_attr_or_item(repo, "full_name")) 42 | else "" 43 | ) 44 | ) 45 | 46 | @override 47 | def get_message(self) -> Message: 48 | raise ValueError("Event has no message!") 49 | 50 | @override 51 | def get_user_id(self) -> str: 52 | if sender := get_attr_or_item(self.payload, "sender"): 53 | return sender.login 54 | raise ValueError("Event has no context!") 55 | 56 | @override 57 | def get_session_id(self) -> str: 58 | return self.get_user_id() 59 | 60 | @override 61 | def is_tome(self) -> bool: 62 | return self.to_me 63 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | name = "nonebot-adapter-github" 3 | version = "0.6.0" 4 | description = "GitHub adapter for nonebot2" 5 | authors = [{ name = "yanyongyu", email = "yyy@nonebot.dev" }] 6 | requires-python = ">=3.9, <4.0" 7 | readme = "README.md" 8 | license = "MIT" 9 | keywords = ["bot", "github", "webhook"] 10 | classifiers = [ 11 | "Development Status :: 5 - Production/Stable", 12 | "Framework :: Robot Framework", 13 | "Framework :: Robot Framework :: Library", 14 | "Operating System :: OS Independent", 15 | "Programming Language :: Python :: 3", 16 | ] 17 | dependencies = [ 18 | "nonebot2>=2.2.0,<3", 19 | "pydantic>=1.10.0,<3.0.0,!=2.5.0,!=2.5.1", 20 | "githubkit[auth-app]>=0.14.0,<0.15.0", 21 | ] 22 | 23 | [project.urls] 24 | Homepage = "https://github.com/nonebot/adapter-github" 25 | Repository = "https://github.com/nonebot/adapter-github" 26 | Documentation = "https://github.com/nonebot/adapter-github" 27 | 28 | [dependency-groups] 29 | dev = [ 30 | "ruff>=0.14.0,<0.15", 31 | "Jinja2>=3.1.2,<4", 32 | "nonemoji>=0.1.2,<0.2", 33 | "pre-commit>=4.3.0,<5", 34 | ] 35 | 36 | [build-system] 37 | requires = ["uv_build>=0.9.1,<0.10.0"] 38 | build-backend = "uv_build" 39 | 40 | [tool.uv.build-backend] 41 | module-name = "nonebot.adapters.github" 42 | module-root = "" 43 | 44 | [tool.ruff] 45 | line-length = 88 46 | target-version = "py39" 47 | 48 | [tool.ruff.format] 49 | line-ending = "lf" 50 | 51 | [tool.ruff.lint] 52 | select = [ 53 | "F", # Pyflakes 54 | "W", # pycodestyle warnings 55 | "E", # pycodestyle errors 56 | "I", # isort 57 | "UP", # pyupgrade 58 | "ASYNC", # flake8-async 59 | "C4", # flake8-comprehensions 60 | "T10", # flake8-debugger 61 | "T20", # flake8-print 62 | "PYI", # flake8-pyi 63 | "PT", # flake8-pytest-style 64 | "Q", # flake8-quotes 65 | "TID", # flake8-tidy-imports 66 | "RUF", # Ruff-specific rules 67 | ] 68 | ignore = [ 69 | "E402", # module-import-not-at-top-of-file 70 | "UP037", # quoted-annotation 71 | "RUF001", # ambiguous-unicode-character-string 72 | "RUF002", # ambiguous-unicode-character-docstring 73 | "RUF003", # ambiguous-unicode-character-comment 74 | "TID252", # pyright reports this as an error 75 | ] 76 | 77 | [tool.ruff.lint.extend-per-file-ignores] 78 | "nonebot/adapters/github/event/*" = ["E501"] 79 | 80 | [tool.ruff.lint.isort] 81 | force-sort-within-sections = true 82 | known-first-party = ["nonebot", "tests/*"] 83 | extra-standard-library = ["typing_extensions"] 84 | 85 | [tool.ruff.lint.flake8-pytest-style] 86 | fixture-parentheses = false 87 | mark-parentheses = false 88 | 89 | [tool.ruff.lint.pyupgrade] 90 | keep-runtime-typing = true 91 | 92 | [tool.pyright] 93 | pythonPlatform = "All" 94 | executionEnvironments = [ 95 | { root = "./codegen", pythonVersion = "3.10", extraPaths = [ 96 | "./", 97 | ] }, 98 | { root = "./", pythonVersion = "3.9" }, 99 | ] 100 | defineConstant = { PYDANTIC_V2 = true } 101 | 102 | typeCheckingMode = "standard" 103 | reportShadowedImports = false 104 | reportIncompatibleVariableOverride = false 105 | disableBytesTypePromotions = true 106 | -------------------------------------------------------------------------------- /codegen/__init__.py: -------------------------------------------------------------------------------- 1 | from dataclasses import dataclass 2 | import inspect 3 | from itertools import chain 4 | from pathlib import Path 5 | import shutil 6 | from typing import Union, cast 7 | from typing_extensions import get_args, get_origin 8 | 9 | from githubkit import GitHubModel 10 | from githubkit.versions.latest.webhooks import webhook_action_types 11 | from jinja2 import Environment, PackageLoader 12 | 13 | MESSAGE_EVENTS = { 14 | "CommitCommentCreated", 15 | "IssueCommentCreated", 16 | "PullRequestReviewCommentCreated", 17 | } 18 | HAS_MESSAGE_EVENTS = { 19 | "CommitCommentCreated", 20 | "IssueCommentCreated", 21 | "IssueCommentDeleted", 22 | "IssueCommentEdited", 23 | "PullRequestReviewCommentCreated", 24 | "PullRequestReviewCommentDeleted", 25 | "PullRequestReviewCommentEdited", 26 | } 27 | 28 | 29 | @dataclass 30 | class Data: 31 | action: str | None 32 | class_name: str 33 | payload_types: list[str] 34 | 35 | 36 | def module_name(event: str, action: Data) -> str: 37 | return f"{event}_{action.action}" if action.action else event 38 | 39 | 40 | def pascal_case(*names: str) -> str: 41 | words = chain.from_iterable(name.split("_") for name in names) 42 | return "".join(word if word.isupper() else word.capitalize() for word in words) 43 | 44 | 45 | def build_event(): 46 | event_types: dict[str, list[Data]] = {} 47 | for event, types in webhook_action_types.items(): 48 | # event has no sub action 49 | if not isinstance(types, dict): 50 | types = cast(type[GitHubModel], types) 51 | event_types[event] = [ 52 | Data( 53 | None, 54 | types.__name__.removeprefix("Webhook"), 55 | [types.__name__], 56 | ) 57 | ] 58 | continue 59 | 60 | action_types: list[Data] = [] 61 | event_types[event] = action_types 62 | for action, model in types.items(): 63 | # action type is a simple model 64 | if inspect.isclass(model) and issubclass(model, GitHubModel): 65 | action_types.append( 66 | Data( 67 | action, model.__name__.removeprefix("Webhook"), [model.__name__] 68 | ) 69 | ) 70 | # action type is a union of models 71 | else: 72 | assert get_origin(model) is Union 73 | action_types.append( 74 | Data( 75 | action, 76 | pascal_case(event, action), 77 | [model.__name__ for model in get_args(model)], 78 | ) 79 | ) 80 | 81 | output_dir = Path("./nonebot/adapters/github/event/") 82 | 83 | if output_dir.exists(): 84 | shutil.rmtree(output_dir) 85 | 86 | output_dir.mkdir(parents=True, exist_ok=True) 87 | 88 | env = Environment(loader=PackageLoader("codegen")) 89 | env.globals["filename"] = module_name 90 | 91 | # generate base model 92 | template = env.get_template("_base.py.jinja") 93 | base_text = template.render() 94 | (output_dir / "_base.py").write_text(base_text) 95 | 96 | # generate types 97 | template = env.get_template("_types.py.jinja") 98 | types_text = template.render(types=event_types) 99 | (output_dir / "_types.py").write_text(types_text) 100 | 101 | # generate event models 102 | template = env.get_template("event.py.jinja") 103 | for event, actions in event_types.items(): 104 | for action in actions: 105 | event_text = template.render( 106 | action=action, 107 | message_events=MESSAGE_EVENTS, 108 | has_message_events=HAS_MESSAGE_EVENTS, 109 | ) 110 | (output_dir / f"{module_name(event, action)}.py").write_text(event_text) 111 | 112 | # generate init file 113 | template = env.get_template("__init__.py.jinja") 114 | init_text = template.render(types=event_types) 115 | (output_dir / "__init__.py").write_text(init_text) 116 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 |

3 | nonebot 4 |

5 | 6 |
7 | 8 | # NoneBot-Adapter-GitHub 9 | 10 | 11 | 12 | 13 | _✨ GitHub 协议适配 ✨_ 14 | 15 | 16 | 17 |
18 | 19 |

20 | 21 | license 22 | 23 | 24 | pypi 25 | 26 | python 27 | 28 | pre-commit 29 | 30 |
31 | 32 | QQ Chat Group 33 | 34 | 35 | QQ Channel 36 | 37 | 38 | Telegram Channel 39 | 40 | 41 | Discord Server 42 | 43 |

44 | 45 | ## 安装 46 | 47 | ```bash 48 | uv add nonebot-adapter-github 49 | # 或者 50 | pip install nonebot-adapter-github 51 | ``` 52 | 53 | ## 加载适配器 54 | 55 | ```python 56 | import nonebot 57 | from nonebot.adapters.github import Adapter 58 | 59 | nonebot.init() 60 | 61 | driver = nonebot.get_driver() 62 | driver.register_adapter(Adapter) 63 | ``` 64 | 65 | ## 配置 66 | 67 | ### 配置 APP 68 | 69 | ```dotenv 70 | GITHUB_APPS=' 71 | [ 72 | { 73 | "app_id": "123456", # GitHub App ID 必填 74 | "private_key": [ 75 | "-----BEGIN RSA PRIVATE KEY-----", 76 | "...", # 将私钥按行输入 77 | "...", 78 | "...", 79 | "-----END RSA PRIVATE KEY-----" 80 | ], # GitHub App 私钥必填 81 | "client_id": "123456", # OAuth App Client ID 必填,GitHub App 可选 82 | "client_secret": "xxxxxx", # OAuth App Client Secret 必填,GitHub App 可选 83 | "webhook_secret": "xxxxxx" # 可选 84 | } 85 | ]' 86 | ``` 87 | 88 | ### 其他配置 89 | 90 | ```dotenv 91 | GITHUB_BASE_URL=https://api.github.com 92 | GITHUB_ACCEPT_FORMAT=full+json 93 | GITHUB_PREVIEWS=["starfox"] 94 | ``` 95 | 96 | ## 使用 97 | 98 | ### WebHook 99 | 100 | URL: `/github/webhooks/` (GitHub APP) / `/github/webhooks/` (OAuth APP) 101 | 102 | 事件格式: 103 | 104 | ```python 105 | class Event(BaseModel): 106 | id: str # 事件 ID 107 | name: str # 事件名称 108 | payload: Dict[str, Any] # 事件内容 109 | 110 | to_me: bool = False # 是否 @ 了机器人或机器人昵称 111 | ``` 112 | 113 | 具体事件类型及内容请参考 [GitHub Developer](https://docs.github.com/en/developers/webhooks-and-events/webhooks/webhook-events-and-payloads) 114 | 115 | ### 调用 API 116 | 117 | 可以直接通过 bot 调用 API,但是请注意 **只能使用异步接口,参数必须是 keyword args**。具体使用方法参考 [githubkit](https://github.com/yanyongyu/githubkit)。 118 | 119 | ```python 120 | async with bot.as_installation(installation_id=1): 121 | resp = await bot.rest.issues.async_get(owner="owner", repo="repo", issue_number=1) 122 | issue = resp.parsed_data 123 | 124 | resp = await bot.async_graphql(query=query) 125 | 126 | async for issue in bot.github.paginate(bot.rest.issues.async_list_for_repo, owner="owner", repo="repo"): 127 | print(issue) 128 | ``` 129 | 130 | 也可以直接使用 `githubkit`,但是将绕过 NoneBot 的 `call api hook`。 131 | 132 | ```python 133 | github = bot.github 134 | ``` 135 | 136 | ## 开发 137 | 138 | 生成事件列表: 139 | 140 | ```bash 141 | python -m codegen && ruff check --fix -e . && ruff format . 142 | ``` 143 | -------------------------------------------------------------------------------- /nonebot/adapters/github/lazy_module.py: -------------------------------------------------------------------------------- 1 | from collections.abc import Sequence 2 | import importlib 3 | from importlib.abc import MetaPathFinder 4 | from importlib.machinery import ModuleSpec, PathFinder, SourceFileLoader 5 | from itertools import chain 6 | import re 7 | import sys 8 | from types import ModuleType 9 | from typing import Any, Optional 10 | 11 | LAZY_MODULES = (r"^nonebot\.adapters\.github\.event$",) 12 | 13 | 14 | class LazyModule(ModuleType): 15 | __lazy_vars__: dict[str, list[str]] 16 | __lazy_vars_validated__: Optional[dict[str, list[str]]] 17 | __lazy_vars_mapping__: dict[str, str] 18 | 19 | @property 20 | def __all__(self) -> tuple[str, ...]: 21 | lazy_vars = self.__lazy_vars_validated__ 22 | if lazy_vars is None: 23 | return () 24 | return tuple(chain.from_iterable(lazy_vars.values())) 25 | 26 | def __dir__(self): 27 | result = list(super().__dir__()) 28 | for attr in self.__all__: 29 | if attr not in result: 30 | result.append(attr) 31 | return result 32 | 33 | def __getattr__(self, name: str) -> Any: 34 | lazy_vars = self.__lazy_vars_validated__ 35 | # module may not initialized or not valid 36 | if lazy_vars is None: 37 | raise AttributeError(f"module '{self.__name__}' has no attribute '{name}'") 38 | 39 | # check if the attribute is a lazy variable 40 | if name in self.__lazy_vars_mapping__: 41 | module = self._get_module(self.__lazy_vars_mapping__[name]) 42 | value = getattr(module, name) 43 | else: 44 | raise AttributeError(f"module '{self.__name__}' has no attribute '{name}'") 45 | 46 | # cache the value 47 | setattr(self, name, value) 48 | return value 49 | 50 | def _get_module(self, module_name: str) -> ModuleType: 51 | try: 52 | return importlib.import_module(module_name, self.__name__) 53 | except Exception as e: 54 | raise RuntimeError( 55 | f"Failed to import {module_name} from {self.__name__}" 56 | ) from e 57 | 58 | def __reduce__(self): 59 | return ( 60 | self.__class__, 61 | (self.__name__, self.__file__, getattr(self, "__lazy_vars__", None)), 62 | ) 63 | 64 | 65 | class LazyModuleLoader(SourceFileLoader): 66 | def create_module(self, spec: ModuleSpec) -> Optional[ModuleType]: 67 | if self.name in sys.modules: 68 | return sys.modules[self.name] 69 | module = LazyModule(spec.name) 70 | # pre-initialize the module to avoid infinite recursion 71 | module.__lazy_vars_validated__ = None 72 | module.__lazy_vars_mapping__ = {} 73 | return module 74 | 75 | def exec_module(self, module: LazyModule) -> None: 76 | super().exec_module(module) 77 | 78 | if getattr(module, "__lazy_vars_validated__", None) is None: 79 | structure = getattr(module, "__lazy_vars__", None) 80 | if isinstance(structure, dict) and all( 81 | isinstance(key, str) and isinstance(value, (list, tuple, set)) 82 | for key, value in structure.items() 83 | ): 84 | module.__lazy_vars_validated__ = structure 85 | module.__lazy_vars_mapping__ = { 86 | var: module 87 | for module, vars in module.__lazy_vars_validated__.items() 88 | for var in vars 89 | } 90 | else: 91 | raise RuntimeError( 92 | f"Invalid lazy module structure for {module.__name__}" 93 | ) 94 | 95 | 96 | class LazyModuleFinder(MetaPathFinder): 97 | def find_spec( 98 | self, 99 | fullname: str, 100 | path: Optional[Sequence[str]], 101 | target: Optional[ModuleType] = None, 102 | ) -> Optional[ModuleSpec]: 103 | if any(re.match(pattern, fullname) for pattern in LAZY_MODULES): 104 | module_spec = PathFinder.find_spec(fullname, path, target) 105 | if not module_spec or not module_spec.origin: 106 | return 107 | 108 | module_spec.loader = LazyModuleLoader(module_spec.name, module_spec.origin) 109 | return module_spec 110 | 111 | 112 | def apply(): 113 | sys.meta_path.insert(0, LazyModuleFinder()) 114 | -------------------------------------------------------------------------------- /nonebot/adapters/github/adapter.py: -------------------------------------------------------------------------------- 1 | import asyncio 2 | from functools import partial 3 | import inspect 4 | import json 5 | from typing import Any, Callable, Optional, Union, cast 6 | from typing_extensions import override 7 | 8 | from githubkit.exception import GraphQLFailed, RequestFailed, RequestTimeout 9 | from githubkit.webhooks import verify 10 | 11 | from nonebot import get_plugin_config 12 | from nonebot.adapters import Adapter as BaseAdapter 13 | from nonebot.compat import type_validate_python 14 | from nonebot.drivers import ( 15 | URL, 16 | Driver, 17 | HTTPServerSetup, 18 | Request, 19 | Response, 20 | ReverseDriver, 21 | ) 22 | 23 | from . import event 24 | from .bot import Bot, GitHubBot, OAuthBot 25 | from .config import Config, GitHubApp, OAuthApp 26 | from .event import Event, events 27 | from .exception import ActionFailed, ActionTimeout, GraphQLError, NetworkError 28 | from .message import Message, MessageSegment 29 | from .utils import log 30 | 31 | 32 | def import_event_model(event_name: str) -> type[Event]: 33 | return getattr(event, event_name) 34 | 35 | 36 | class Adapter(BaseAdapter): 37 | @override 38 | def __init__(self, driver: Driver, **kwargs: Any): 39 | super().__init__(driver, **kwargs) 40 | self.github_config = get_plugin_config(Config) 41 | self.tasks: set["asyncio.Task"] = set() 42 | self._setup() 43 | 44 | @classmethod 45 | @override 46 | def get_name(cls) -> str: 47 | return "GitHub" 48 | 49 | def _setup(self): 50 | if not isinstance(self.driver, ReverseDriver): 51 | log( 52 | "WARNING", 53 | f"Current driver {self.config.driver} is not a ReverseDriver. GitHub" 54 | " Webhook disabled.", 55 | ) 56 | 57 | for app in self.github_config.github_apps: 58 | webhook_route = HTTPServerSetup( 59 | URL("/github/webhooks") / app.id, 60 | "POST", 61 | self.get_name(), 62 | partial(self._handle_webhook, app=app), 63 | ) 64 | self.setup_http_server(webhook_route) 65 | 66 | self.driver.on_startup(self._startup) 67 | 68 | async def _startup(self): 69 | await asyncio.gather( 70 | *(self._startup_app(app) for app in self.github_config.github_apps) 71 | ) 72 | 73 | async def _startup_app(self, app: Union[GitHubApp, OAuthApp]): 74 | if isinstance(app, GitHubApp): 75 | bot = GitHubBot(self, app) 76 | await bot._get_self_info() 77 | else: 78 | bot = OAuthBot(self, app) 79 | self.bot_connect(bot) 80 | 81 | async def _handle_webhook( 82 | self, request: Request, app: Union[GitHubApp, OAuthApp] 83 | ) -> Response: 84 | event_id = request.headers.get("x-github-delivery") 85 | event_name = request.headers.get("x-github-event") 86 | signature = request.headers.get("x-hub-signature-256") 87 | payload = request.content 88 | 89 | if not event_id or not event_name or not payload: 90 | log("WARNING", "Received invalid GitHub Webhook request. Missing Header.") 91 | return Response(400, content="Invalid Request") 92 | 93 | # verify signature 94 | if app.webhook_secret is not None and not ( 95 | signature and verify(app.webhook_secret, payload, signature) 96 | ): 97 | log( 98 | "WARNING", 99 | "Received invalid GitHub Webhook request. Invalid Signature.", 100 | ) 101 | return Response(400, content="Invalid Signature") 102 | 103 | if event := self.payload_to_event(event_id, event_name, payload): 104 | bot = cast(Bot, self.bots[app.id]) 105 | task = asyncio.create_task(bot.handle_event(event)) 106 | task.add_done_callback(self.tasks.discard) 107 | self.tasks.add(task) 108 | 109 | return Response(200, content="OK") 110 | 111 | async def _call_api(self, bot: Bot, api: str, **data: Any) -> Any: 112 | parts = api.split(".") 113 | func: Any = bot.github 114 | for part in parts: 115 | func = getattr(func, part) 116 | if not inspect.isroutine(func) or not inspect.iscoroutinefunction(func): 117 | raise TypeError(f"{api} is invalid.") 118 | 119 | try: 120 | return await func(**data) 121 | except RequestFailed as e: 122 | raise ActionFailed(e.response) from None 123 | except RequestTimeout as e: 124 | raise ActionTimeout(e.request) from None 125 | except GraphQLFailed as e: 126 | raise GraphQLError(e.response) from None 127 | except Exception as e: 128 | raise NetworkError(f"API request failed: {e!r}") from e 129 | 130 | @classmethod 131 | def payload_to_event( 132 | cls, event_id: str, event_name: str, payload: Union[str, bytes] 133 | ) -> Optional[Event]: 134 | event_payload = json.loads(payload) 135 | try: 136 | types = events.get(event_name) 137 | if isinstance(types, dict): 138 | if action := event_payload.get("action"): 139 | return type_validate_python( 140 | import_event_model(types[action]), 141 | { 142 | "id": event_id, 143 | "name": event_name, 144 | "payload": event_payload, 145 | }, 146 | ) 147 | else: 148 | raise ValueError( 149 | f"Payload missing action, either of {', '.join(types)}." 150 | ) 151 | elif types is None: 152 | raise ValueError(f"Unknown event type {event_name}.") 153 | return type_validate_python( 154 | import_event_model(types), 155 | {"id": event_id, "name": event_name, "payload": event_payload}, 156 | ) 157 | except Exception as e: 158 | log("WARNING", f"Failed to parse webhook payload {event_id}", e) 159 | return type_validate_python( 160 | Event, {"id": event_id, "name": event_name, "payload": event_payload} 161 | ) 162 | 163 | @classmethod 164 | def custom_send( 165 | cls, 166 | send_func: Callable[[Bot, Event, Union[str, Message, MessageSegment]], Any], 167 | ): 168 | """自定义 Bot 的回复函数。""" 169 | Bot.send_handler = send_func 170 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # ----- Project ----- 2 | 3 | .idea 4 | .vscode 5 | 6 | # Created by https://www.toptal.com/developers/gitignore/api/python,node,visualstudiocode,jetbrains,macos,windows,linux 7 | # Edit at https://www.toptal.com/developers/gitignore?templates=python,node,visualstudiocode,jetbrains,macos,windows,linux 8 | 9 | ### JetBrains ### 10 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider 11 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 12 | 13 | # User-specific stuff 14 | .idea/**/workspace.xml 15 | .idea/**/tasks.xml 16 | .idea/**/usage.statistics.xml 17 | .idea/**/dictionaries 18 | .idea/**/shelf 19 | 20 | # AWS User-specific 21 | .idea/**/aws.xml 22 | 23 | # Generated files 24 | .idea/**/contentModel.xml 25 | 26 | # Sensitive or high-churn files 27 | .idea/**/dataSources/ 28 | .idea/**/dataSources.ids 29 | .idea/**/dataSources.local.xml 30 | .idea/**/sqlDataSources.xml 31 | .idea/**/dynamic.xml 32 | .idea/**/uiDesigner.xml 33 | .idea/**/dbnavigator.xml 34 | 35 | # Gradle 36 | .idea/**/gradle.xml 37 | .idea/**/libraries 38 | 39 | # Gradle and Maven with auto-import 40 | # When using Gradle or Maven with auto-import, you should exclude module files, 41 | # since they will be recreated, and may cause churn. Uncomment if using 42 | # auto-import. 43 | # .idea/artifacts 44 | # .idea/compiler.xml 45 | # .idea/jarRepositories.xml 46 | # .idea/modules.xml 47 | # .idea/*.iml 48 | # .idea/modules 49 | # *.iml 50 | # *.ipr 51 | 52 | # CMake 53 | cmake-build-*/ 54 | 55 | # Mongo Explorer plugin 56 | .idea/**/mongoSettings.xml 57 | 58 | # File-based project format 59 | *.iws 60 | 61 | # IntelliJ 62 | out/ 63 | 64 | # mpeltonen/sbt-idea plugin 65 | .idea_modules/ 66 | 67 | # JIRA plugin 68 | atlassian-ide-plugin.xml 69 | 70 | # Cursive Clojure plugin 71 | .idea/replstate.xml 72 | 73 | # Crashlytics plugin (for Android Studio and IntelliJ) 74 | com_crashlytics_export_strings.xml 75 | crashlytics.properties 76 | crashlytics-build.properties 77 | fabric.properties 78 | 79 | # Editor-based Rest Client 80 | .idea/httpRequests 81 | 82 | # Android studio 3.1+ serialized cache file 83 | .idea/caches/build_file_checksums.ser 84 | 85 | ### JetBrains Patch ### 86 | # Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 87 | 88 | # *.iml 89 | # modules.xml 90 | # .idea/misc.xml 91 | # *.ipr 92 | 93 | # Sonarlint plugin 94 | # https://plugins.jetbrains.com/plugin/7973-sonarlint 95 | .idea/**/sonarlint/ 96 | 97 | # SonarQube Plugin 98 | # https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin 99 | .idea/**/sonarIssues.xml 100 | 101 | # Markdown Navigator plugin 102 | # https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced 103 | .idea/**/markdown-navigator.xml 104 | .idea/**/markdown-navigator-enh.xml 105 | .idea/**/markdown-navigator/ 106 | 107 | # Cache file creation bug 108 | # See https://youtrack.jetbrains.com/issue/JBR-2257 109 | .idea/$CACHE_FILE$ 110 | 111 | # CodeStream plugin 112 | # https://plugins.jetbrains.com/plugin/12206-codestream 113 | .idea/codestream.xml 114 | 115 | ### Linux ### 116 | *~ 117 | 118 | # temporary files which can be created if a process still has a handle open of a deleted file 119 | .fuse_hidden* 120 | 121 | # KDE directory preferences 122 | .directory 123 | 124 | # Linux trash folder which might appear on any partition or disk 125 | .Trash-* 126 | 127 | # .nfs files are created when an open file is removed but is still being accessed 128 | .nfs* 129 | 130 | ### macOS ### 131 | # General 132 | .DS_Store 133 | .AppleDouble 134 | .LSOverride 135 | 136 | # Icon must end with two \r 137 | Icon 138 | 139 | # Thumbnails 140 | ._* 141 | 142 | # Files that might appear in the root of a volume 143 | .DocumentRevisions-V100 144 | .fseventsd 145 | .Spotlight-V100 146 | .TemporaryItems 147 | .Trashes 148 | .VolumeIcon.icns 149 | .com.apple.timemachine.donotpresent 150 | 151 | # Directories potentially created on remote AFP share 152 | .AppleDB 153 | .AppleDesktop 154 | Network Trash Folder 155 | Temporary Items 156 | .apdisk 157 | 158 | ### Node ### 159 | # Logs 160 | logs 161 | *.log 162 | npm-debug.log* 163 | yarn-debug.log* 164 | yarn-error.log* 165 | lerna-debug.log* 166 | .pnpm-debug.log* 167 | 168 | # Diagnostic reports (https://nodejs.org/api/report.html) 169 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 170 | 171 | # Runtime data 172 | pids 173 | *.pid 174 | *.seed 175 | *.pid.lock 176 | 177 | # Directory for instrumented libs generated by jscoverage/JSCover 178 | lib-cov 179 | 180 | # Coverage directory used by tools like istanbul 181 | coverage 182 | *.lcov 183 | 184 | # nyc test coverage 185 | .nyc_output 186 | 187 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 188 | .grunt 189 | 190 | # Bower dependency directory (https://bower.io/) 191 | bower_components 192 | 193 | # node-waf configuration 194 | .lock-wscript 195 | 196 | # Compiled binary addons (https://nodejs.org/api/addons.html) 197 | build/Release 198 | 199 | # Dependency directories 200 | node_modules/ 201 | jspm_packages/ 202 | 203 | # Snowpack dependency directory (https://snowpack.dev/) 204 | web_modules/ 205 | 206 | # TypeScript cache 207 | *.tsbuildinfo 208 | 209 | # Optional npm cache directory 210 | .npm 211 | 212 | # Optional eslint cache 213 | .eslintcache 214 | 215 | # Microbundle cache 216 | .rpt2_cache/ 217 | .rts2_cache_cjs/ 218 | .rts2_cache_es/ 219 | .rts2_cache_umd/ 220 | 221 | # Optional REPL history 222 | .node_repl_history 223 | 224 | # Output of 'npm pack' 225 | *.tgz 226 | 227 | # Yarn Integrity file 228 | .yarn-integrity 229 | 230 | # dotenv environment variables file 231 | .env 232 | .env.test 233 | .env.production 234 | 235 | # parcel-bundler cache (https://parceljs.org/) 236 | .cache 237 | .parcel-cache 238 | 239 | # Next.js build output 240 | .next 241 | out 242 | 243 | # Nuxt.js build / generate output 244 | .nuxt 245 | dist 246 | 247 | # Gatsby files 248 | .cache/ 249 | # Comment in the public line in if your project uses Gatsby and not Next.js 250 | # https://nextjs.org/blog/next-9-1#public-directory-support 251 | # public 252 | 253 | # vuepress build output 254 | .vuepress/dist 255 | 256 | # Serverless directories 257 | .serverless/ 258 | 259 | # FuseBox cache 260 | .fusebox/ 261 | 262 | # DynamoDB Local files 263 | .dynamodb/ 264 | 265 | # TernJS port file 266 | .tern-port 267 | 268 | # Stores VSCode versions used for testing VSCode extensions 269 | .vscode-test 270 | 271 | # yarn v2 272 | .yarn/cache 273 | .yarn/unplugged 274 | .yarn/build-state.yml 275 | .yarn/install-state.gz 276 | .pnp.* 277 | 278 | ### Node Patch ### 279 | # Serverless Webpack directories 280 | .webpack/ 281 | 282 | # Optional stylelint cache 283 | .stylelintcache 284 | 285 | # SvelteKit build / generate output 286 | .svelte-kit 287 | 288 | ### Python ### 289 | # Byte-compiled / optimized / DLL files 290 | __pycache__/ 291 | *.py[cod] 292 | *$py.class 293 | 294 | # C extensions 295 | *.so 296 | 297 | # Distribution / packaging 298 | .Python 299 | build/ 300 | develop-eggs/ 301 | dist/ 302 | downloads/ 303 | eggs/ 304 | .eggs/ 305 | lib/ 306 | lib64/ 307 | parts/ 308 | sdist/ 309 | var/ 310 | wheels/ 311 | share/python-wheels/ 312 | *.egg-info/ 313 | .installed.cfg 314 | *.egg 315 | MANIFEST 316 | 317 | # PyInstaller 318 | # Usually these files are written by a python script from a template 319 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 320 | *.manifest 321 | *.spec 322 | 323 | # Installer logs 324 | pip-log.txt 325 | pip-delete-this-directory.txt 326 | 327 | # Unit test / coverage reports 328 | htmlcov/ 329 | .tox/ 330 | .nox/ 331 | .coverage 332 | .coverage.* 333 | nosetests.xml 334 | coverage.xml 335 | *.cover 336 | *.py,cover 337 | .hypothesis/ 338 | .pytest_cache/ 339 | cover/ 340 | 341 | # Translations 342 | *.mo 343 | *.pot 344 | 345 | # Django stuff: 346 | local_settings.py 347 | db.sqlite3 348 | db.sqlite3-journal 349 | 350 | # Flask stuff: 351 | instance/ 352 | .webassets-cache 353 | 354 | # Scrapy stuff: 355 | .scrapy 356 | 357 | # Sphinx documentation 358 | docs/_build/ 359 | 360 | # PyBuilder 361 | .pybuilder/ 362 | target/ 363 | 364 | # Jupyter Notebook 365 | .ipynb_checkpoints 366 | 367 | # IPython 368 | profile_default/ 369 | ipython_config.py 370 | 371 | # pyenv 372 | # For a library or package, you might want to ignore these files since the code is 373 | # intended to run in multiple environments; otherwise, check them in: 374 | # .python-version 375 | 376 | # pipenv 377 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 378 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 379 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 380 | # install all needed dependencies. 381 | #Pipfile.lock 382 | 383 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 384 | __pypackages__/ 385 | 386 | # Celery stuff 387 | celerybeat-schedule 388 | celerybeat.pid 389 | 390 | # SageMath parsed files 391 | *.sage.py 392 | 393 | # Environments 394 | .venv 395 | env/ 396 | venv/ 397 | ENV/ 398 | env.bak/ 399 | venv.bak/ 400 | 401 | # Spyder project settings 402 | .spyderproject 403 | .spyproject 404 | 405 | # Rope project settings 406 | .ropeproject 407 | 408 | # mkdocs documentation 409 | /site 410 | 411 | # mypy 412 | .mypy_cache/ 413 | .dmypy.json 414 | dmypy.json 415 | 416 | # Pyre type checker 417 | .pyre/ 418 | 419 | # pytype static type analyzer 420 | .pytype/ 421 | 422 | # Cython debug symbols 423 | cython_debug/ 424 | 425 | ### VisualStudioCode ### 426 | .vscode/* 427 | !.vscode/settings.json 428 | !.vscode/tasks.json 429 | !.vscode/launch.json 430 | !.vscode/extensions.json 431 | *.code-workspace 432 | 433 | # Local History for Visual Studio Code 434 | .history/ 435 | 436 | ### VisualStudioCode Patch ### 437 | # Ignore all local history of files 438 | .history 439 | .ionide 440 | 441 | # Support for Project snippet scope 442 | !.vscode/*.code-snippets 443 | 444 | ### Windows ### 445 | # Windows thumbnail cache files 446 | Thumbs.db 447 | Thumbs.db:encryptable 448 | ehthumbs.db 449 | ehthumbs_vista.db 450 | 451 | # Dump file 452 | *.stackdump 453 | 454 | # Folder config file 455 | [Dd]esktop.ini 456 | 457 | # Recycle Bin used on file shares 458 | $RECYCLE.BIN/ 459 | 460 | # Windows Installer files 461 | *.cab 462 | *.msi 463 | *.msix 464 | *.msm 465 | *.msp 466 | 467 | # Windows shortcuts 468 | *.lnk 469 | 470 | # End of https://www.toptal.com/developers/gitignore/api/python,node,visualstudiocode,jetbrains,macos,windows,linux 471 | -------------------------------------------------------------------------------- /nonebot/adapters/github/bot.py: -------------------------------------------------------------------------------- 1 | from collections.abc import AsyncGenerator 2 | from contextlib import asynccontextmanager 3 | from contextvars import ContextVar 4 | import re 5 | from typing import ( 6 | TYPE_CHECKING, 7 | Any, 8 | Callable, 9 | Generic, 10 | Optional, 11 | TypeVar, 12 | Union, 13 | ) 14 | from typing_extensions import Self, override 15 | 16 | from githubkit import ( 17 | AppAuthStrategy, 18 | BaseAuthStrategy, 19 | GitHub, 20 | OAuthAppAuthStrategy, 21 | TokenAuthStrategy, 22 | ) 23 | from githubkit.utils import UNSET, Unset 24 | 25 | from nonebot.adapters import Bot as BaseBot 26 | from nonebot.message import handle_event 27 | 28 | from .config import GitHubApp, OAuthApp 29 | from .event import CommitCommentCreated, Event 30 | from .message import Message, MessageSegment 31 | from .utils import APIContext, get_attr_or_item 32 | 33 | if TYPE_CHECKING: 34 | from githubkit.versions.latest.types import AppPermissionsType 35 | from githubkit.versions.rest import RestVersionSwitcher 36 | 37 | from .adapter import Adapter 38 | 39 | 40 | A = TypeVar("A", bound=BaseAuthStrategy) 41 | 42 | 43 | def _check_at_me(bot: "GitHubBot", event: Event) -> None: 44 | try: 45 | message = event.get_message() 46 | except Exception: 47 | return 48 | 49 | # ensure message not empty 50 | if not message: 51 | message.append(MessageSegment.markdown("")) 52 | return 53 | 54 | if message[0].type != "markdown": 55 | return 56 | if not bot._app_slug: 57 | return 58 | 59 | seg = message[0] 60 | text = str(seg).lstrip() 61 | if text.startswith(f"@{bot._app_slug}"): 62 | message[0] = MessageSegment.markdown(text[len(bot._app_slug) + 1 :].lstrip()) 63 | event.to_me = True 64 | 65 | 66 | def _check_nickname(bot: "Bot", event: Event) -> None: 67 | try: 68 | message = event.get_message() 69 | except Exception: 70 | return 71 | 72 | # ensure message not empty 73 | if not message: 74 | message.append(MessageSegment.markdown("")) 75 | return 76 | 77 | if message[0].type != "markdown": 78 | return 79 | 80 | if nicknames := {nickname for nickname in bot.config.nickname if nickname}: 81 | # check if the user is calling me with my nickname 82 | text = str(message[0]).lstrip() 83 | nickname_regex = "|".join(nicknames) 84 | if m := re.match(rf"^({nickname_regex})([\s,,]*|$)", text, re.IGNORECASE): 85 | event.to_me = True 86 | message[0] = MessageSegment.markdown(text[m.end() :]) 87 | 88 | 89 | async def send( 90 | bot: "Bot", event: Event, message: Union[str, Message, MessageSegment] 91 | ) -> Any: 92 | msg = message if isinstance(message, Message) else Message(message) 93 | if isinstance(event, CommitCommentCreated): 94 | return await bot.rest.repos.async_create_commit_comment( 95 | owner=event.payload.repository.owner.login, 96 | repo=event.payload.repository.name, 97 | commit_sha=event.payload.comment.commit_id, 98 | body=msg.extract_plain_text(), 99 | ) 100 | 101 | owner: Optional[str] = None 102 | repo: Optional[str] = None 103 | if repository := get_attr_or_item(event.payload, "repository"): 104 | owner_user = get_attr_or_item(repository, "owner") 105 | owner = get_attr_or_item(owner_user, "login") 106 | repo = get_attr_or_item(repository, "name") 107 | 108 | number: Optional[int] = None 109 | if issue := get_attr_or_item(event.payload, "issue"): 110 | number = get_attr_or_item(issue, "number") 111 | elif pull_request := get_attr_or_item(event.payload, "pull_request"): 112 | number = get_attr_or_item(pull_request, "number") 113 | 114 | if owner and repo and number: 115 | return await bot.rest.issues.async_create_comment( 116 | owner=owner, repo=repo, issue_number=number, body=msg.extract_plain_text() 117 | ) 118 | 119 | raise RuntimeError( 120 | f"Cannot guess reply target for event type {event.__class__.__name__}" 121 | ) 122 | 123 | 124 | class Bot(BaseBot, Generic[A]): 125 | adapter: "Adapter" 126 | 127 | send_handler: Callable[["Bot", Event, Union[str, Message, MessageSegment]], Any] = ( 128 | send 129 | ) 130 | 131 | if TYPE_CHECKING: 132 | rest: RestVersionSwitcher 133 | 134 | async def async_graphql( 135 | self, query: str, variables: Optional[dict[str, Any]] = None 136 | ) -> dict[str, Any]: ... 137 | 138 | @override 139 | def __init__(self, adapter: "Adapter", app: Union[GitHubApp, OAuthApp]): 140 | super().__init__(adapter, app.id) 141 | self.app = app 142 | self._github: GitHub[A] 143 | self._ctx_github: ContextVar[Optional[GitHub]] = ContextVar( 144 | "ctx_github", default=None 145 | ) 146 | 147 | def __getattr__(self, name: str) -> APIContext: 148 | return APIContext(self, (name,)) 149 | 150 | @property 151 | def github(self) -> GitHub: 152 | return self._ctx_github.get() or self._github 153 | 154 | async def handle_event(self, event: Event) -> None: 155 | await handle_event(self, event) 156 | 157 | @override 158 | async def send( 159 | self, event: Event, message: Union[str, Message, MessageSegment] 160 | ) -> Any: 161 | return await self.__class__.send_handler(self, event, message) 162 | 163 | 164 | class OAuthBot(Bot[OAuthAppAuthStrategy]): 165 | @override 166 | def __init__(self, adapter: "Adapter", app: OAuthApp): 167 | super().__init__(adapter, app) 168 | self._github = GitHub( 169 | OAuthAppAuthStrategy(app.client_id, app.client_secret), 170 | base_url=self.adapter.github_config.github_base_url, 171 | accept_format=self.adapter.github_config.github_accept_format, 172 | previews=self.adapter.github_config.github_previews, 173 | timeout=self.config.api_timeout, 174 | ) 175 | 176 | @asynccontextmanager 177 | async def as_web_user( 178 | self, code: str, redirect_uri: Optional[str] = None 179 | ) -> AsyncGenerator[Self, None]: 180 | if self._ctx_github.get() is not None: 181 | raise RuntimeError("Can not enter context twice.") 182 | self._ctx_github.set( 183 | g := self._github.with_auth( 184 | self._github.auth.as_web_user(code, redirect_uri) 185 | ) 186 | ) 187 | try: 188 | async with g: 189 | yield self 190 | finally: 191 | self._ctx_github.set(None) 192 | 193 | @asynccontextmanager 194 | async def as_user(self, token: str) -> AsyncGenerator[Self, None]: 195 | if self._ctx_github.get() is not None: 196 | raise RuntimeError("Can not enter context twice.") 197 | self._ctx_github.set(g := self._github.with_auth(TokenAuthStrategy(token))) 198 | try: 199 | async with g: 200 | yield self 201 | finally: 202 | self._ctx_github.set(None) 203 | 204 | @override 205 | async def handle_event(self, event: Event) -> None: 206 | _check_nickname(self, event) 207 | await super().handle_event(event) 208 | 209 | 210 | class GitHubBot(Bot[AppAuthStrategy]): 211 | @override 212 | def __init__(self, adapter: "Adapter", app: GitHubApp): 213 | super().__init__(adapter, app) 214 | self._github = GitHub( 215 | AppAuthStrategy( 216 | app.app_id, app.private_key, app.client_id, app.client_secret 217 | ), 218 | base_url=self.adapter.github_config.github_base_url, 219 | accept_format=self.adapter.github_config.github_accept_format, 220 | previews=self.adapter.github_config.github_previews, 221 | timeout=self.config.api_timeout, 222 | ) 223 | self._app_slug: Optional[str] = None 224 | 225 | async def _get_self_info(self): 226 | res = await self._github.rest.apps.async_get_authenticated() 227 | self._app_slug = ( 228 | slug if isinstance((slug := res.parsed_data.slug), str) else None 229 | ) 230 | 231 | @asynccontextmanager 232 | async def as_oauth_app(self) -> AsyncGenerator[Self, None]: 233 | if self._ctx_github.get() is not None: 234 | raise RuntimeError("Can not enter context twice.") 235 | self._ctx_github.set( 236 | g := self._github.with_auth(self._github.auth.as_oauth_app()) 237 | ) 238 | try: 239 | async with g: 240 | yield self 241 | finally: 242 | self._ctx_github.set(None) 243 | 244 | @asynccontextmanager 245 | async def as_installation( 246 | self, 247 | installation_id: int, 248 | repositories: Union[Unset, list[str]] = UNSET, 249 | repository_ids: Union[Unset, list[int]] = UNSET, 250 | permissions: Union[Unset, "AppPermissionsType"] = UNSET, 251 | ) -> AsyncGenerator[Self, None]: 252 | if self._ctx_github.get() is not None: 253 | raise RuntimeError("Can not enter context twice.") 254 | self._ctx_github.set( 255 | g := self._github.with_auth( 256 | self._github.auth.as_installation( 257 | installation_id, repositories, repository_ids, permissions 258 | ) 259 | ) 260 | ) 261 | try: 262 | async with g: 263 | yield self 264 | finally: 265 | self._ctx_github.set(None) 266 | 267 | @asynccontextmanager 268 | async def as_web_user( 269 | self, code: str, redirect_uri: Optional[str] = None 270 | ) -> AsyncGenerator[Self, None]: 271 | if self._ctx_github.get() is not None: 272 | raise RuntimeError("Can not enter context twice.") 273 | self._ctx_github.set( 274 | g := self._github.with_auth( 275 | self._github.auth.as_oauth_app().as_web_user(code, redirect_uri) 276 | ) 277 | ) 278 | try: 279 | async with g: 280 | yield self 281 | finally: 282 | self._ctx_github.set(None) 283 | 284 | @asynccontextmanager 285 | async def as_user(self, token: str) -> AsyncGenerator[Self, None]: 286 | if self._ctx_github.get() is not None: 287 | raise RuntimeError("Can not enter context twice.") 288 | self._ctx_github.set(g := self._github.with_auth(TokenAuthStrategy(token))) 289 | try: 290 | async with g: 291 | yield self 292 | finally: 293 | self._ctx_github.set(None) 294 | 295 | @override 296 | async def handle_event(self, event: Event) -> None: 297 | _check_at_me(self, event) 298 | _check_nickname(self, event) 299 | await super().handle_event(event) 300 | -------------------------------------------------------------------------------- /nonebot/adapters/github/event/_types.py: -------------------------------------------------------------------------------- 1 | events = { 2 | "branch_protection_configuration": { 3 | "disabled": "BranchProtectionConfigurationDisabled", 4 | "enabled": "BranchProtectionConfigurationEnabled", 5 | }, 6 | "branch_protection_rule": { 7 | "created": "BranchProtectionRuleCreated", 8 | "deleted": "BranchProtectionRuleDeleted", 9 | "edited": "BranchProtectionRuleEdited", 10 | }, 11 | "check_run": { 12 | "completed": "CheckRunCompleted", 13 | "created": "CheckRunCreated", 14 | "requested_action": "CheckRunRequestedAction", 15 | "rerequested": "CheckRunRerequested", 16 | }, 17 | "check_suite": { 18 | "completed": "CheckSuiteCompleted", 19 | "requested": "CheckSuiteRequested", 20 | "rerequested": "CheckSuiteRerequested", 21 | }, 22 | "code_scanning_alert": { 23 | "appeared_in_branch": "CodeScanningAlertAppearedInBranch", 24 | "closed_by_user": "CodeScanningAlertClosedByUser", 25 | "created": "CodeScanningAlertCreated", 26 | "fixed": "CodeScanningAlertFixed", 27 | "reopened": "CodeScanningAlertReopened", 28 | "reopened_by_user": "CodeScanningAlertReopenedByUser", 29 | }, 30 | "commit_comment": "CommitCommentCreated", 31 | "create": "Create", 32 | "custom_property": { 33 | "created": "CustomPropertyCreated", 34 | "deleted": "CustomPropertyDeleted", 35 | "promote_to_enterprise": "CustomPropertyPromotedToEnterprise", 36 | "updated": "CustomPropertyUpdated", 37 | }, 38 | "custom_property_values": "CustomPropertyValuesUpdated", 39 | "delete": "Delete", 40 | "dependabot_alert": { 41 | "auto_dismissed": "DependabotAlertAutoDismissed", 42 | "auto_reopened": "DependabotAlertAutoReopened", 43 | "created": "DependabotAlertCreated", 44 | "dismissed": "DependabotAlertDismissed", 45 | "fixed": "DependabotAlertFixed", 46 | "reintroduced": "DependabotAlertReintroduced", 47 | "reopened": "DependabotAlertReopened", 48 | }, 49 | "deploy_key": { 50 | "created": "DeployKeyCreated", 51 | "deleted": "DeployKeyDeleted", 52 | }, 53 | "deployment": "DeploymentCreated", 54 | "deployment_protection_rule": "DeploymentProtectionRuleRequested", 55 | "deployment_review": { 56 | "approved": "DeploymentReviewApproved", 57 | "rejected": "DeploymentReviewRejected", 58 | "requested": "DeploymentReviewRequested", 59 | }, 60 | "deployment_status": "DeploymentStatusCreated", 61 | "discussion": { 62 | "answered": "DiscussionAnswered", 63 | "category_changed": "DiscussionCategoryChanged", 64 | "closed": "DiscussionClosed", 65 | "created": "DiscussionCreated", 66 | "deleted": "DiscussionDeleted", 67 | "edited": "DiscussionEdited", 68 | "labeled": "DiscussionLabeled", 69 | "locked": "DiscussionLocked", 70 | "pinned": "DiscussionPinned", 71 | "reopened": "DiscussionReopened", 72 | "transferred": "DiscussionTransferred", 73 | "unanswered": "DiscussionUnanswered", 74 | "unlabeled": "DiscussionUnlabeled", 75 | "unlocked": "DiscussionUnlocked", 76 | "unpinned": "DiscussionUnpinned", 77 | }, 78 | "discussion_comment": { 79 | "created": "DiscussionCommentCreated", 80 | "deleted": "DiscussionCommentDeleted", 81 | "edited": "DiscussionCommentEdited", 82 | }, 83 | "fork": "Fork", 84 | "github_app_authorization": "GithubAppAuthorizationRevoked", 85 | "gollum": "Gollum", 86 | "installation": { 87 | "created": "InstallationCreated", 88 | "deleted": "InstallationDeleted", 89 | "new_permissions_accepted": "InstallationNewPermissionsAccepted", 90 | "suspend": "InstallationSuspend", 91 | "unsuspend": "InstallationUnsuspend", 92 | }, 93 | "installation_repositories": { 94 | "added": "InstallationRepositoriesAdded", 95 | "removed": "InstallationRepositoriesRemoved", 96 | }, 97 | "installation_target": "InstallationTargetRenamed", 98 | "issue_comment": { 99 | "created": "IssueCommentCreated", 100 | "deleted": "IssueCommentDeleted", 101 | "edited": "IssueCommentEdited", 102 | }, 103 | "issue_dependencies": { 104 | "blocked_by_added": "IssueDependenciesBlockedByAdded", 105 | "blocked_by_removed": "IssueDependenciesBlockedByRemoved", 106 | "blocking_added": "IssueDependenciesBlockingAdded", 107 | "blocking_removed": "IssueDependenciesBlockingRemoved", 108 | }, 109 | "issues": { 110 | "assigned": "IssuesAssigned", 111 | "closed": "IssuesClosed", 112 | "deleted": "IssuesDeleted", 113 | "demilestoned": "IssuesDemilestoned", 114 | "edited": "IssuesEdited", 115 | "labeled": "IssuesLabeled", 116 | "locked": "IssuesLocked", 117 | "milestoned": "IssuesMilestoned", 118 | "opened": "IssuesOpened", 119 | "pinned": "IssuesPinned", 120 | "reopened": "IssuesReopened", 121 | "transferred": "IssuesTransferred", 122 | "typed": "IssuesTyped", 123 | "unassigned": "IssuesUnassigned", 124 | "unlabeled": "IssuesUnlabeled", 125 | "unlocked": "IssuesUnlocked", 126 | "unpinned": "IssuesUnpinned", 127 | "untyped": "IssuesUntyped", 128 | }, 129 | "label": { 130 | "created": "LabelCreated", 131 | "deleted": "LabelDeleted", 132 | "edited": "LabelEdited", 133 | }, 134 | "marketplace_purchase": { 135 | "cancelled": "MarketplacePurchaseCancelled", 136 | "changed": "MarketplacePurchaseChanged", 137 | "pending_change": "MarketplacePurchasePendingChange", 138 | "pending_change_cancelled": "MarketplacePurchasePendingChangeCancelled", 139 | "purchased": "MarketplacePurchasePurchased", 140 | }, 141 | "member": { 142 | "added": "MemberAdded", 143 | "edited": "MemberEdited", 144 | "removed": "MemberRemoved", 145 | }, 146 | "membership": { 147 | "added": "MembershipAdded", 148 | "removed": "MembershipRemoved", 149 | }, 150 | "merge_group": { 151 | "checks_requested": "MergeGroupChecksRequested", 152 | "destroyed": "MergeGroupDestroyed", 153 | }, 154 | "meta": "MetaDeleted", 155 | "milestone": { 156 | "closed": "MilestoneClosed", 157 | "created": "MilestoneCreated", 158 | "deleted": "MilestoneDeleted", 159 | "edited": "MilestoneEdited", 160 | "opened": "MilestoneOpened", 161 | }, 162 | "org_block": { 163 | "blocked": "OrgBlockBlocked", 164 | "unblocked": "OrgBlockUnblocked", 165 | }, 166 | "organization": { 167 | "deleted": "OrganizationDeleted", 168 | "member_added": "OrganizationMemberAdded", 169 | "member_invited": "OrganizationMemberInvited", 170 | "member_removed": "OrganizationMemberRemoved", 171 | "renamed": "OrganizationRenamed", 172 | }, 173 | "package": { 174 | "published": "PackagePublished", 175 | "updated": "PackageUpdated", 176 | }, 177 | "page_build": "PageBuild", 178 | "personal_access_token_request": { 179 | "approved": "PersonalAccessTokenRequestApproved", 180 | "cancelled": "PersonalAccessTokenRequestCancelled", 181 | "created": "PersonalAccessTokenRequestCreated", 182 | "denied": "PersonalAccessTokenRequestDenied", 183 | }, 184 | "ping": "Ping", 185 | "project_card": { 186 | "converted": "ProjectCardConverted", 187 | "created": "ProjectCardCreated", 188 | "deleted": "ProjectCardDeleted", 189 | "edited": "ProjectCardEdited", 190 | "moved": "ProjectCardMoved", 191 | }, 192 | "project": { 193 | "closed": "ProjectClosed", 194 | "created": "ProjectCreated", 195 | "deleted": "ProjectDeleted", 196 | "edited": "ProjectEdited", 197 | "reopened": "ProjectReopened", 198 | }, 199 | "project_column": { 200 | "created": "ProjectColumnCreated", 201 | "deleted": "ProjectColumnDeleted", 202 | "edited": "ProjectColumnEdited", 203 | "moved": "ProjectColumnMoved", 204 | }, 205 | "projects_v2": { 206 | "closed": "ProjectsV2ProjectClosed", 207 | "created": "ProjectsV2ProjectCreated", 208 | "deleted": "ProjectsV2ProjectDeleted", 209 | "edited": "ProjectsV2ProjectEdited", 210 | "reopened": "ProjectsV2ProjectReopened", 211 | }, 212 | "projects_v2_item": { 213 | "archived": "ProjectsV2ItemArchived", 214 | "converted": "ProjectsV2ItemConverted", 215 | "created": "ProjectsV2ItemCreated", 216 | "deleted": "ProjectsV2ItemDeleted", 217 | "edited": "ProjectsV2ItemEdited", 218 | "reordered": "ProjectsV2ItemReordered", 219 | "restored": "ProjectsV2ItemRestored", 220 | }, 221 | "projects_v2_status_update": { 222 | "created": "ProjectsV2StatusUpdateCreated", 223 | "deleted": "ProjectsV2StatusUpdateDeleted", 224 | "edited": "ProjectsV2StatusUpdateEdited", 225 | }, 226 | "public": "Public", 227 | "pull_request": { 228 | "assigned": "PullRequestAssigned", 229 | "auto_merge_disabled": "PullRequestAutoMergeDisabled", 230 | "auto_merge_enabled": "PullRequestAutoMergeEnabled", 231 | "closed": "PullRequestClosed", 232 | "converted_to_draft": "PullRequestConvertedToDraft", 233 | "demilestoned": "PullRequestDemilestoned", 234 | "dequeued": "PullRequestDequeued", 235 | "edited": "PullRequestEdited", 236 | "enqueued": "PullRequestEnqueued", 237 | "labeled": "PullRequestLabeled", 238 | "locked": "PullRequestLocked", 239 | "milestoned": "PullRequestMilestoned", 240 | "opened": "PullRequestOpened", 241 | "ready_for_review": "PullRequestReadyForReview", 242 | "reopened": "PullRequestReopened", 243 | "review_request_removed": "PullRequestReviewRequestRemoved", 244 | "review_requested": "PullRequestReviewRequested", 245 | "synchronize": "PullRequestSynchronize", 246 | "unassigned": "PullRequestUnassigned", 247 | "unlabeled": "PullRequestUnlabeled", 248 | "unlocked": "PullRequestUnlocked", 249 | }, 250 | "pull_request_review_comment": { 251 | "created": "PullRequestReviewCommentCreated", 252 | "deleted": "PullRequestReviewCommentDeleted", 253 | "edited": "PullRequestReviewCommentEdited", 254 | }, 255 | "pull_request_review": { 256 | "dismissed": "PullRequestReviewDismissed", 257 | "edited": "PullRequestReviewEdited", 258 | "submitted": "PullRequestReviewSubmitted", 259 | }, 260 | "pull_request_review_thread": { 261 | "resolved": "PullRequestReviewThreadResolved", 262 | "unresolved": "PullRequestReviewThreadUnresolved", 263 | }, 264 | "push": "Push", 265 | "registry_package": { 266 | "published": "RegistryPackagePublished", 267 | "updated": "RegistryPackageUpdated", 268 | }, 269 | "release": { 270 | "created": "ReleaseCreated", 271 | "deleted": "ReleaseDeleted", 272 | "edited": "ReleaseEdited", 273 | "prereleased": "ReleasePrereleased", 274 | "published": "ReleasePublished", 275 | "released": "ReleaseReleased", 276 | "unpublished": "ReleaseUnpublished", 277 | }, 278 | "repository_advisory": { 279 | "published": "RepositoryAdvisoryPublished", 280 | "reported": "RepositoryAdvisoryReported", 281 | }, 282 | "repository": { 283 | "archived": "RepositoryArchived", 284 | "created": "RepositoryCreated", 285 | "deleted": "RepositoryDeleted", 286 | "edited": "RepositoryEdited", 287 | "privatized": "RepositoryPrivatized", 288 | "publicized": "RepositoryPublicized", 289 | "renamed": "RepositoryRenamed", 290 | "transferred": "RepositoryTransferred", 291 | "unarchived": "RepositoryUnarchived", 292 | }, 293 | "repository_dispatch": "RepositoryDispatchSample", 294 | "repository_import": "RepositoryImport", 295 | "repository_ruleset": { 296 | "created": "RepositoryRulesetCreated", 297 | "deleted": "RepositoryRulesetDeleted", 298 | "edited": "RepositoryRulesetEdited", 299 | }, 300 | "repository_vulnerability_alert": { 301 | "create": "RepositoryVulnerabilityAlertCreate", 302 | "dismiss": "RepositoryVulnerabilityAlertDismiss", 303 | "reopen": "RepositoryVulnerabilityAlertReopen", 304 | "resolve": "RepositoryVulnerabilityAlertResolve", 305 | }, 306 | "secret_scanning_alert": { 307 | "assigned": "SecretScanningAlertAssigned", 308 | "created": "SecretScanningAlertCreated", 309 | "publicly_leaked": "SecretScanningAlertPubliclyLeaked", 310 | "reopened": "SecretScanningAlertReopened", 311 | "resolved": "SecretScanningAlertResolved", 312 | "unassigned": "SecretScanningAlertUnassigned", 313 | "validated": "SecretScanningAlertValidated", 314 | }, 315 | "secret_scanning_alert_location": "SecretScanningAlertLocationCreated", 316 | "secret_scanning_scan": "SecretScanningScanCompleted", 317 | "security_advisory": { 318 | "published": "SecurityAdvisoryPublished", 319 | "updated": "SecurityAdvisoryUpdated", 320 | "withdrawn": "SecurityAdvisoryWithdrawn", 321 | }, 322 | "security_and_analysis": "SecurityAndAnalysis", 323 | "sponsorship": { 324 | "cancelled": "SponsorshipCancelled", 325 | "created": "SponsorshipCreated", 326 | "edited": "SponsorshipEdited", 327 | "pending_cancellation": "SponsorshipPendingCancellation", 328 | "pending_tier_change": "SponsorshipPendingTierChange", 329 | "tier_changed": "SponsorshipTierChanged", 330 | }, 331 | "star": { 332 | "created": "StarCreated", 333 | "deleted": "StarDeleted", 334 | }, 335 | "status": "Status", 336 | "sub_issues": { 337 | "parent_issue_added": "SubIssuesParentIssueAdded", 338 | "parent_issue_removed": "SubIssuesParentIssueRemoved", 339 | "sub_issue_added": "SubIssuesSubIssueAdded", 340 | "sub_issue_removed": "SubIssuesSubIssueRemoved", 341 | }, 342 | "team_add": "TeamAdd", 343 | "team": { 344 | "added_to_repository": "TeamAddedToRepository", 345 | "created": "TeamCreated", 346 | "deleted": "TeamDeleted", 347 | "edited": "TeamEdited", 348 | "removed_from_repository": "TeamRemovedFromRepository", 349 | }, 350 | "watch": "WatchStarted", 351 | "workflow_dispatch": "WorkflowDispatch", 352 | "workflow_job": { 353 | "completed": "WorkflowJobCompleted", 354 | "in_progress": "WorkflowJobInProgress", 355 | "queued": "WorkflowJobQueued", 356 | "waiting": "WorkflowJobWaiting", 357 | }, 358 | "workflow_run": { 359 | "completed": "WorkflowRunCompleted", 360 | "in_progress": "WorkflowRunInProgress", 361 | "requested": "WorkflowRunRequested", 362 | }, 363 | } 364 | --------------------------------------------------------------------------------