さてリアルタイムでとりあえずうまくいったので、もう少し違うサンプルコードを試してみる。
参考にしたのはこちら。
https://www.fullstackpython.com/blog/build-first-slack-bot-python.html
ただしこのコードが書かれた当時とSlackのレスポンスが変わっているようなのでそのままでは動かない。
下記は変更後。これによりdoを入力すると別のレスポンスが返ってくるようになった。
import os
import time
import re
from slackclient import SlackClient
# instantiate Slack client
slack_client = SlackClient("xoxp-")
# starterbot's user ID in Slack: value is assigned after the bot starts up
starterbot_id = None
# constants
RTM_READ_DELAY = 1 # 1 second delay between reading from RTM
EXAMPLE_COMMAND = "do"
MENTION_REGEX = "^<@(|[WU].+?)>(.*)"
def parse_bot_commands(slack_events):
print(slack_events)
for event in slack_events:
if event["type"] == "message" and not "subtype" in event:
message = event["text"]
user_id = event["user"]
print(user_id + ":" + starterbot_id)
if user_id == starterbot_id:
return message, event["channel"]
return None, None
def handle_command(command, channel):
# Default response is help text for the user
default_response = "Not sure what you mean. Try *{}*.".format(EXAMPLE_COMMAND)
# Finds and executes the given command, filling in response
response = None
# This is where you start to implement more commands!
if command.startswith(EXAMPLE_COMMAND):
response = "Sure...write some more code then I can do that!"
# Sends the response back to the channel
slack_client.api_call(
"chat.postMessage",
channel=channel,
text=response or default_response
)
if __name__ == "__main__":
if slack_client.rtm_connect(with_team_state=False):
print("Starter Bot connected and running!")
# Read bot's user ID by calling Web API method `auth.test`
starterbot_id = slack_client.api_call("auth.test")["user_id"]
while True:
command, channel = parse_bot_commands(slack_client.rtm_read())
if command:
handle_command(command, channel)
time.sleep(RTM_READ_DELAY)
else:
print("Connection failed. Exception traceback printed above.")