From 25a9338352bd09873d7d5fc4ffd012bb20ee10fd Mon Sep 17 00:00:00 2001 From: slaveeks Date: Fri, 4 Feb 2022 17:49:07 +0300 Subject: [PATCH 1/6] Added trigger to discussion opened --- github/data_types/discussion.py | 39 +++++++++++++++++ github/events/discussions.py | 78 +++++++++++++++++++++++++++++++++ github/main.py | 4 +- 3 files changed, 120 insertions(+), 1 deletion(-) create mode 100644 github/data_types/discussion.py create mode 100644 github/events/discussions.py diff --git a/github/data_types/discussion.py b/github/data_types/discussion.py new file mode 100644 index 0000000..32ba83c --- /dev/null +++ b/github/data_types/discussion.py @@ -0,0 +1,39 @@ +from data_types.user import User + + +class Discussion: + """ + GitHub Discussions + + Attributes: + id: Discussion id + title: Discussion title + body: Issue body text + html_url: Public URL for discussion on github.com + number: Issue's number in repository + user: Issue opener User object + + created_at: Opening time + """ + + def __init__(self, data): + + # Internal GitHub id + self.id = data.get('id', 0) + + # Title and Body + self.title = data.get('title', '') + + # Public link + self.html_url = data.get('html_url', '') + + # Number in repository + self.number = data.get('number', '') + + # Who created + self.user = None + if 'user' in data: + self.user = User(data['user']) + + # Dates + self.created_at = data.get('created_at', '') \ No newline at end of file diff --git a/github/events/discussions.py b/github/events/discussions.py new file mode 100644 index 0000000..f38058b --- /dev/null +++ b/github/events/discussions.py @@ -0,0 +1,78 @@ +import html + +from data_types.discussion import Discussion +from data_types.repository import Repository +from data_types.user import User +from .base import EventBase + + +class EventDiscussions(EventBase): + + def __init__(self, sdk): + super(EventDiscussions, self).__init__(sdk) + self.discussion = None + self.repository = None + self.sender = None + self.sdk = sdk + + """ + DiscussionsEvent + + Triggered when an discussion is created. + + https://developer.github.com/v3/activity/events/types/#discussionevent + """ + + async def process(self, payload, chat): + """ + Processes Discussions event + :param payload: JSON object with payload + :param chat: current chat object + :return: + """ + + self.sdk.log("Discussions event payload taken") + + try: + self.discussion = Discussion(payload['discussion']) + self.repository = Repository(payload['repository']) + self.sender = User(payload['sender']) + + except Exception as e: + self.sdk.log('Cannot process DiscussionsEvent payload because of {}'.format(e)) + + action = payload['action'] + + available_actions = { + 'created': self.created, + } + + if action not in available_actions: + self.sdk.log('Unsupported Discussions action: {}'.format(action)) + return + + # call action handler + await available_actions[action](chat['chat'], payload) + + async def created(self, chat_id, payload): + """ + Discussion Created action + :param chat_id: Current user chat token + :param payload: GitHub payload + :return: + """ + + message = "✏️ {} created new discussion «{}» [{}]".format( + self.sender.login, + html.escape(self.discussion.title), + self.repository.html_url, + self.repository.name + ) + "\n\n" + + message += self.discussion.html_url + + await self.send( + chat_id, + message, + 'HTML' + ) \ No newline at end of file diff --git a/github/main.py b/github/main.py index 58a67c8..f71873e 100644 --- a/github/main.py +++ b/github/main.py @@ -14,6 +14,7 @@ from events.ping import EventPing from events.push import EventPush from events.issues import EventIssues +from events.discussions import EventDiscussions from events.issue_comment import EventIssueComment from events.pull_request import EventPullRequest from events.pull_request_review import EventPullRequestReview @@ -80,7 +81,8 @@ async def github_callback_handler(self, request): 'issue_comment': EventIssueComment(self.sdk), 'pull_request': EventPullRequest(self.sdk), 'pull_request_review': EventPullRequestReview(self.sdk), - 'repository': EventRepository(self.sdk) + 'repository': EventRepository(self.sdk), + 'discussion': EventDiscussions(self.sdk) } if event_name not in events: From 4e2f31b0950e93b3d685790ffef2d36065c6bf26 Mon Sep 17 00:00:00 2001 From: slaveeks Date: Fri, 4 Feb 2022 18:01:32 +0300 Subject: [PATCH 2/6] Added trigger for deleted discussions --- github/data_types/discussion.py | 3 +-- github/events/discussions.py | 25 ++++++++++++++++++++++++- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/github/data_types/discussion.py b/github/data_types/discussion.py index 32ba83c..739dd92 100644 --- a/github/data_types/discussion.py +++ b/github/data_types/discussion.py @@ -8,7 +8,6 @@ class Discussion: Attributes: id: Discussion id title: Discussion title - body: Issue body text html_url: Public URL for discussion on github.com number: Issue's number in repository user: Issue opener User object @@ -21,7 +20,7 @@ def __init__(self, data): # Internal GitHub id self.id = data.get('id', 0) - # Title and Body + # Title self.title = data.get('title', '') # Public link diff --git a/github/events/discussions.py b/github/events/discussions.py index f38058b..ae0139e 100644 --- a/github/events/discussions.py +++ b/github/events/discussions.py @@ -45,6 +45,7 @@ async def process(self, payload, chat): available_actions = { 'created': self.created, + 'deleted': self.deleted, } if action not in available_actions: @@ -75,4 +76,26 @@ async def created(self, chat_id, payload): chat_id, message, 'HTML' - ) \ No newline at end of file + ) + + async def deleted(self, chat_id, payload): + """ + Discussion deleted action + :param chat_id: Current user chat token + :param payload: GitHub payload + :return: + """ + + message = "✏️ {} deleted discussion «{}» [{}]".format( + self.sender.login, + html.escape(self.discussion.title), + self.repository.html_url, + self.repository.name + ) + "\n\n" + + await self.send( + chat_id, + message, + 'HTML' + ) + From 3728728070804fdbaea3c8a9e684cc4c8598983d Mon Sep 17 00:00:00 2001 From: slaveeks Date: Fri, 4 Feb 2022 18:40:08 +0300 Subject: [PATCH 3/6] Added type category and added it to message --- github/data_types/category.py | 20 ++++++++++++++++++++ github/data_types/discussion.py | 16 +++++++--------- github/events/discussions.py | 5 ++++- 3 files changed, 31 insertions(+), 10 deletions(-) create mode 100644 github/data_types/category.py diff --git a/github/data_types/category.py b/github/data_types/category.py new file mode 100644 index 0000000..5dfa141 --- /dev/null +++ b/github/data_types/category.py @@ -0,0 +1,20 @@ +class Category: + """ + Category + + Attributes: + name: Category name + description: Category description + created_at: Opening time + """ + + def __init__(self, data): + + # Category name + self.name = data.get('name', '') + + # Description + self.description = data.get('description', '') + + # Created date + self.created_at = data.get('created_at', '') diff --git a/github/data_types/discussion.py b/github/data_types/discussion.py index 739dd92..1df4bb7 100644 --- a/github/data_types/discussion.py +++ b/github/data_types/discussion.py @@ -1,5 +1,5 @@ from data_types.user import User - +from data_types.category import Category class Discussion: """ @@ -9,10 +9,8 @@ class Discussion: id: Discussion id title: Discussion title html_url: Public URL for discussion on github.com - number: Issue's number in repository - user: Issue opener User object - - created_at: Opening time + number: Discussion's number in repository + user: Discussion creator User object """ def __init__(self, data): @@ -29,10 +27,10 @@ def __init__(self, data): # Number in repository self.number = data.get('number', '') + # Category + self.category = Category(data['category']) + # Who created self.user = None if 'user' in data: - self.user = User(data['user']) - - # Dates - self.created_at = data.get('created_at', '') \ No newline at end of file + self.user = User(data['user']) \ No newline at end of file diff --git a/github/events/discussions.py b/github/events/discussions.py index ae0139e..e88cecc 100644 --- a/github/events/discussions.py +++ b/github/events/discussions.py @@ -63,7 +63,8 @@ async def created(self, chat_id, payload): :return: """ - message = "✏️ {} created new discussion «{}» [{}]".format( + message = "✏️{}: {} created new discussion «{}» [{}]".format( + self.discussion.category.name, self.sender.login, html.escape(self.discussion.title), self.repository.html_url, @@ -72,6 +73,8 @@ async def created(self, chat_id, payload): message += self.discussion.html_url + message += self.discussion.category.name + await self.send( chat_id, message, From 93cee9676c171325bc668d55f5fe14037ebe001f Mon Sep 17 00:00:00 2001 From: slaveeks Date: Fri, 4 Feb 2022 18:41:52 +0300 Subject: [PATCH 4/6] Fixed message --- github/events/discussions.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/github/events/discussions.py b/github/events/discussions.py index e88cecc..9ea732c 100644 --- a/github/events/discussions.py +++ b/github/events/discussions.py @@ -73,8 +73,6 @@ async def created(self, chat_id, payload): message += self.discussion.html_url - message += self.discussion.category.name - await self.send( chat_id, message, From 73a7803eb466bd18e309e6cb604936ed152e12a8 Mon Sep 17 00:00:00 2001 From: slaveeks Date: Fri, 4 Feb 2022 18:56:12 +0300 Subject: [PATCH 5/6] Changed emoji in messages --- github/events/discussions.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/github/events/discussions.py b/github/events/discussions.py index 9ea732c..f35265a 100644 --- a/github/events/discussions.py +++ b/github/events/discussions.py @@ -63,7 +63,7 @@ async def created(self, chat_id, payload): :return: """ - message = "✏️{}: {} created new discussion «{}» [{}]".format( + message = "🗣{}: {} created new discussion «{}» [{}]".format( self.discussion.category.name, self.sender.login, html.escape(self.discussion.title), @@ -87,7 +87,7 @@ async def deleted(self, chat_id, payload): :return: """ - message = "✏️ {} deleted discussion «{}» [{}]".format( + message = "🤭️ {} deleted discussion «{}» [{}]".format( self.sender.login, html.escape(self.discussion.title), self.repository.html_url, From 77c5aa9f5377e1fa631a6d25b6c50c345571050a Mon Sep 17 00:00:00 2001 From: sirtimrod Date: Tue, 8 Feb 2022 15:59:32 +0300 Subject: [PATCH 6/6] Fixed repo link in assign message --- github/events/issues.py | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/github/events/issues.py b/github/events/issues.py index f1b35a9..e16daf5 100644 --- a/github/events/issues.py +++ b/github/events/issues.py @@ -66,11 +66,11 @@ async def opened(self, chat_id, payload): """ message = "✏️ {} opened new issue «{}» [{}]".format( - self.sender.login, - html.escape(self.issue.title), - self.repository.html_url, - self.repository.name - ) + "\n\n" + self.sender.login, + html.escape(self.issue.title), + self.repository.html_url, + self.repository.name + ) + "\n\n" # if len(self.issue.body): # message += html.escape(self.issue.body) + "\n\n" @@ -119,12 +119,13 @@ async def assigned(self, chat_id, payload): assignee = User(payload['assignee']) message = "📌 {assignee} has been assigned to the issue «{issue_title}» " \ - "by {author} [{repository_name}]".format( - assignee=assignee.login, - author=self.sender.login, - issue_title=html.escape(self.issue.title), - repository_name=self.repository.name - ) + "\n\n" + "by {author} [{repository_name}]".format( + assignee=assignee.login, + author=self.sender.login, + issue_title=html.escape(self.issue.title), + repository_html=self.repository.html_url, + repository_name=self.repository.name + ) + "\n\n" message += self.issue.html_url