def register_commands(app: App, middleware: Type[SlackMiddleware]): cmd_uninstall = app.command( command="/teamiclink-uninstall", middleware=[middleware.ctx_client_secret, middleware.ctx_client_id], ) assert cmd_uninstall cmd_uninstall(uninstall) cmd_create_goal = app.command(command="/t-goal") assert cmd_create_goal cmd_create_goal(create_goal) cmd_read_goals = app.command(command="/t-goals", middleware=[middleware.ctx_goal_store]) assert cmd_read_goals cmd_read_goals(read_goals)
"type": "mrkdwn", "text": "You can add a button alongside text in your message. ", }, "accessory": { "type": "button", "action_id": "a", "text": { "type": "plain_text", "text": "Button" }, "value": "click_me_123", }, }]) app.command(re.compile(r"/bolt-.+"))(test_command) @app.shortcut("test-shortcut") def test_shortcut(ack, client: WebClient, logger, payload): logger.info(payload) ack() res = client.views_open( trigger_id=payload["trigger_id"], view={ "type": "modal", "callback_id": "view-id", "title": { "type": "plain_text",
}, "min_query_length": 0, }, "label": { "type": "plain_text", "text": "Search (multi)" }, }, ], }, ) logger.info(res) app.command("/hello-bolt-python")( ack=ack_command, lazy=[post_button_message, open_modal], ) @app.options("es_a") def show_options(ack): ack({ "options": [{ "text": { "type": "plain_text", "text": "Maru" }, "value": "maru" }] })
def respond_to_slack_within_3_seconds(body, ack): if body.get("text") is None: ack(f":x: Usage: {command} (description here)") else: title = body["text"] ack(f"Accepted! (task: {title})") def process_request(respond, body): time.sleep(5) title = body["text"] respond(f"Completed! (task: {title})") app.command(command)(ack=respond_to_slack_within_3_seconds, lazy=[process_request]) SlackRequestHandler.clear_all_log_handlers() logging.basicConfig(format="%(asctime)s %(message)s", level=logging.DEBUG) def handler(event, context): slack_handler = SlackRequestHandler(app=app) return slack_handler.handle(event, context) # export SLACK_SIGNING_SECRET=*** # export SLACK_BOT_TOKEN=xoxb-*** # rm -rf vendor && cp -pr ../../src/* vendor/ # pip install python-lambda
@bolt_app.event("app_mention") def handle_app_mentions(body, say, logger): logger.info(body) say("What's up? I'm a Chalice app :wave:") def respond_to_slack_within_3_seconds(ack): ack("Accepted!") def say_it(say): time.sleep(5) say("Done!") bolt_app.command("/hello-bolt-python-chalice")( ack=respond_to_slack_within_3_seconds, lazy=[say_it]) ChaliceSlackRequestHandler.clear_all_log_handlers() logging.basicConfig(format="%(asctime)s %(message)s", level=logging.DEBUG) # Don't change this variable name "app" app = Chalice(app_name="bolt-python-chalice") slack_handler = ChaliceSlackRequestHandler(app=bolt_app, chalice=app) @app.route( "/slack/events", methods=["POST"], content_types=["application/x-www-form-urlencoded", "application/json"], ) def events() -> Response:
# /kot breakoutのとき elif ctext == "breakout": flag = kotPost(4, slackid) if flag == 99: respond(f" :ng: codeが99です ") else: say(f" <@{slackid}> さん :yasumi: :syuuryou:") else: #url = 'http://checkip.amazonaws.com/' respond(f":ng: :eyes: Usage: /kot 出勤 & 退勤") app.command("/kot")( ack=respond_to_slack_within_3_seconds, # responsible for calling `ack()` lazy=[run_long_process] # unable to call `ack()` / can have multiple functions ) def handler(event, context): slack_handler = SlackRequestHandler(app=app) return slack_handler.handle(event, context) # king of timeへの打刻処理 code=0:自動打刻, code=3:休憩開始, code=4:休憩終了 def kotPost(code, slackid): kotid = getAirTable(slackid) url = "https://api.kingtime.jp/v1.0/daily-workings/timerecord/" + kotid kotToken = os.environ['KOT_TOKEN'] headers = { 'Authorization': "Bearer " + kotToken, 'content-type': "application/json",
def command_man(ack, say, command): command_text = command["text"] command_text_clean = shlex.quote(command_text) ack("Fetching man page...") man_proc = subprocess.Popen( "ssh soda man".split(" ") + [command_text_clean], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE, ) man_response = man_proc.stdout.read().decode() if man_response: text = "man {}\n{}".format(command_text, man_response) else: text = "Couldn't find man page. Got: {}.".format( man_proc.stderr.read()) say(text, response_type="in_channel") if SLACK_BOT_USER_TOKEN and SLACK_SIGNING_SECRET: app = App(token=SLACK_BOT_USER_TOKEN, signing_secret=SLACK_SIGNING_SECRET) app.message("based")(message_based) app.event("message")(event_message) app.command("/man")(command_man) app.command("/philfinger")(command_finger) app.command("/export")(command_export) app.command("/help")(command_help) else: app = None
# flag bot-generated messages @slack_app.middleware def message_filter(payload, context, next): context['is_bot_message'] = payload.get('bot_id') is not None next() @slack_app.event({"type": "message"}) def unmatched_request(logger, body): logger.debug("acknowleding unmatched message") # prepare linkbot slash command slash_cmd = SlashCommand(bot_list=bot_list, logger=logger) slack_app.command("/{}".format(slash_cmd.name))(slash_cmd.command) # prepare slack event endpoint init_endpoint_server(slack_app) if __name__ == '__main__': try: # open metrics exporter endpoint metrics_server(int(os.environ.get('METRICS_PORT', 9100))) # open slack event endpoint endpoint_server(int(os.environ.get("PORT", 3000))) except Exception as e: logger.exception(e) logger.critical(e)