From b9bf695831349d9f45ff225629c87e347e727d2d Mon Sep 17 00:00:00 2001 From: wan Date: Fri, 23 Oct 2020 13:53:53 +0900 Subject: [PATCH] =?UTF-8?q?refs=20#207=20=E3=82=A8=E3=83=A9=E3=83=BC?= =?UTF-8?q?=E3=83=8F=E3=83=B3=E3=83=89=E3=83=AA=E3=83=B3=E3=82=B0=E5=AF=BE?= =?UTF-8?q?=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/redmine_notification.py | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/src/redmine_notification.py b/src/redmine_notification.py index 3156482..35b820b 100644 --- a/src/redmine_notification.py +++ b/src/redmine_notification.py @@ -20,6 +20,7 @@ from redminelib import Redmine from slack import WebClient +from slack.errors import SlackApiError from db import ( init_dbsession, @@ -184,12 +185,14 @@ def send_slack_message(channel, attachments, message): sc = WebClient(API_TOKEN) return sc.api_call( 'chat.postMessage', - channel=channel, - text=message, - as_user="false", - icon_emoji=EMOJI, - username=BOTNAME, - attachments=attachments + json={ + 'channel': channel, + 'text': message, + 'as_user': "false", + 'icon_emoji': EMOJI, + 'username': BOTNAME, + 'attachments': attachments + } ) @@ -199,7 +202,19 @@ def send_slack_message_per_sec(channel, attachments, message): :param channel: Slack channel :param message: """ - response = send_slack_message(channel, attachments, message) + try: + response = send_slack_message(channel, attachments, message) + except SlackApiError as e: + # アーカイブされているチャンネルはスキップ + if e.response.data["error"] == "is_archived": + return + # 通知が失敗なら, responseのrate limit headersをチェック + elif e.response.data["ok"] is False and e.response.headers.get("Retry-After"): + # Retry-After headerがどのくらいのdelayが必要かの数値を持っている + delay = int(e.response.headers["Retry-After"]) + logger.info("Rate limited. Retrying in {} seconds".format(delay)) + time.sleep(delay) + send_slack_message(channel, attachments, message) # メッセージが通知されたかをチェックする # メッセージ通知が成功なら、response["ok"]がTrue @@ -212,14 +227,6 @@ def send_slack_message_per_sec(channel, attachments, message): logger.info( "Message posted successfully: {}".format(time_stamp) ) - # 通知が失敗なら, responseのrate limit headersをチェック - elif response["ok"] is False and getattr(response["headers"], - "Retry-After", None): - # Retry-After headerがどのくらいのdelayが必要かの数値を持っている - delay = int(response["headers"]["Retry-After"]) - logger.info("Rate limited. Retrying in {} seconds".format(delay)) - time.sleep(delay) - send_slack_message(channel, attachments, message) def get_argparser():