前情提要:在之前的那篇文章我们已经成功做到向Slack发送一条消息,不过Slack除了能发送消息外,其实还能发送文件,本文在上一篇的基础上为你的Slack Bot增加发送文件的功能。

1.为Bot赋予发送文件的权限

回到 https://api.slack.com/apps 选择你的Bot,在左侧的Features中找到OAuth & Permissions

1a.png

向下拉,找到Scopes,添加上files:write权限。

1b.webp

添加新的权限后上方通常会有需要Reinstall app的提示,按指示点一下重新授权就行。

1c.webp

2.修改bot代码

在上一篇文章中,我们写的bot已经能够发送消息。现在,我们为它加上发送文件的代码吧。

将后面从try开始的代码改为

1
2
3
4
5
6
7
8
9
try:
    filepath="./test.txt"
    response = client.files_upload(channels='#random', file=filepath)
    assert response["file"]  # the uploaded file
except SlackApiError as e:
    # You will get a SlackApiError if "ok" is False
    assert e.response["ok"] is False
    assert e.response["error"]  # str like 'invalid_auth', 'channel_not_found'
    print(f"Got an error: {e.response['error']}")

这样就会向随机频道发送一个test.txt文件。

1d.png

3.常见问题

Q1. 运行脚本后提示Got an error: missing_scope,且没有发送出去

A1. Slack Bot 的文件发送权限(files:write,权限称为Scope)没有授予,先看看重新安装Bot(Reinstall App)能否解决,不能检查步骤1是否正确完成

4.参考资料

Slack Python SDK: https://github.com/SlackAPI/python-slack-sdk