Compare commits
14 Commits
338fe2300f
...
master
Author | SHA1 | Date | |
---|---|---|---|
2f68e7e956 | |||
65ea719fd1 | |||
ad6a4447ab | |||
588890b355 | |||
84aafd8a29 | |||
4cf2099a7f | |||
3048488dae | |||
148b46f322 | |||
0d5cf62944 | |||
eeb6ba6e49 | |||
6985255dd9 | |||
06025c3df8 | |||
56df05b38e | |||
b1e56df080 |
11
Dockerfile
Normal file
11
Dockerfile
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
FROM python
|
||||||
|
ADD app.py requirements.txt /app/
|
||||||
|
ENV SLACK_SIGNING_SECRET=***
|
||||||
|
ENV SLACK_BOT_TOKEN=xoxb-***
|
||||||
|
ENV DINGTALK_WEBHOOK='https://oapi.dingtalk.com/robot/send?access_token=这里填写自己钉钉群自定义机器人的token'
|
||||||
|
ENV PORT=3000
|
||||||
|
WORKDIR /app
|
||||||
|
RUN pip install -r requirements.txt
|
||||||
|
RUN chmod +x app.py
|
||||||
|
EXPOSE 3000
|
||||||
|
ENTRYPOINT [ "python", "app.py" ]
|
@ -1,2 +1,9 @@
|
|||||||
# Slack Dingtalk Bridge
|
# Slack Dingtalk Bridge
|
||||||
|
|
||||||
|
## 运行
|
||||||
|
### Docker
|
||||||
|
复制`example.env`到`.env`
|
||||||
|
修改其中的变量
|
||||||
|
`docker-compose up -d`
|
||||||
|
### 直接运行
|
||||||
|
`startup.sh`
|
47
app.py
Normal file → Executable file
47
app.py
Normal file → Executable file
@ -1,54 +1,33 @@
|
|||||||
from dingtalkchatbot.chatbot import DingtalkChatbot
|
from dingtalkchatbot.chatbot import DingtalkChatbot
|
||||||
from slack_bolt.async_app import AsyncApp
|
from slack_bolt import App
|
||||||
from slack_bolt.authorization import AuthorizeResult
|
import re
|
||||||
from slack_sdk.web.async_client import AsyncWebClient
|
|
||||||
import os
|
import os
|
||||||
import logging
|
import logging
|
||||||
logging.basicConfig(level=logging.DEBUG)
|
logging.basicConfig(level=logging.DEBUG)
|
||||||
|
|
||||||
# Import the async app instead of the regular one
|
|
||||||
|
|
||||||
|
|
||||||
async def authorize(enterprise_id, team_id, user_id, client: AsyncWebClient, logger):
|
|
||||||
logger.info(f"{enterprise_id},{team_id},{user_id}")
|
|
||||||
# You can implement your own logic here
|
|
||||||
token = os.environ["SLACK_BOT_TOKEN"]
|
|
||||||
return AuthorizeResult.from_auth_test_response(
|
|
||||||
auth_test_response=await client.auth_test(token=token),
|
|
||||||
bot_token=token,
|
|
||||||
)
|
|
||||||
|
|
||||||
# WebHook地址
|
# WebHook地址
|
||||||
dingtalk_webhook = os.environ["DINGTALK_WEBHOOK"]
|
dingtalk_webhook = os.environ["DINGTALK_WEBHOOK"]
|
||||||
|
|
||||||
dingtalkbot = DingtalkChatbot(dingtalk_webhook)
|
dingtalkbot = DingtalkChatbot(dingtalk_webhook)
|
||||||
app = AsyncApp(
|
app = App(
|
||||||
signing_secret=os.environ["SLACK_SIGNING_SECRET"], authorize=authorize)
|
token=os.environ.get("SLACK_BOT_TOKEN"),
|
||||||
|
signing_secret=os.environ.get("SLACK_SIGNING_SECRET")
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@app.event("app_mention")
|
@app.event({"type": "message", "subtype": None})
|
||||||
async def event_test(body, say, logger):
|
def transfer_warn(body: dict, logger: logging.Logger):
|
||||||
logger.info(body)
|
logger.info(body)
|
||||||
await say("What's up?")
|
dingtalkbot.send_text('测试捕获一般消息\n'+str(body["event"]))
|
||||||
|
|
||||||
|
|
||||||
@app.command("/hello-bolt-python")
|
@app.event({"type": "message", "subtype": "bot_message"})
|
||||||
async def command(ack, body, respond):
|
def transfer_all(body: dict, logger: logging.Logger):
|
||||||
await ack()
|
|
||||||
await respond(f"Hi <@{body['user_id']}>!")
|
|
||||||
|
|
||||||
|
|
||||||
@app.message("Heads Up!*")
|
|
||||||
async def redirect(body, logger):
|
|
||||||
logger.info(body)
|
logger.info(body)
|
||||||
|
dingtalkbot.send_text('测试捕获机器人消息\n'+str(body["event"]))
|
||||||
|
|
||||||
@app.message("")
|
|
||||||
async def logall(body, logger):
|
|
||||||
logger.debug(body)
|
|
||||||
dingtalkbot.send_text(body)
|
|
||||||
|
|
||||||
|
|
||||||
# 启动slack监听
|
# 启动slack监听
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
app.start(3000)
|
app.start(port=int(os.environ.get("PORT", 3000)))
|
||||||
|
13
docker-compose.yml
Normal file
13
docker-compose.yml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
version: '3'
|
||||||
|
services:
|
||||||
|
app:
|
||||||
|
build: .
|
||||||
|
image: slack-dingtalk-bridge
|
||||||
|
network_mode: bridge
|
||||||
|
ports:
|
||||||
|
- 3000:3000
|
||||||
|
environment:
|
||||||
|
- SLACK_BOT_TOKEN
|
||||||
|
- SLACK_SIGNING_SECRET
|
||||||
|
- DINGTALK_WEBHOOK
|
||||||
|
restart: unless-stopped
|
@ -1,4 +1,6 @@
|
|||||||
export SLACK_SIGNING_SECRET=***
|
|
||||||
export SLACK_BOT_TOKEN=xoxb-***
|
export SLACK_BOT_TOKEN=xoxb-***
|
||||||
|
export SLACK_SIGNING_SECRET=***
|
||||||
|
|
||||||
export DINGTALK_WEBHOOK='https://oapi.dingtalk.com/robot/send?access_token=这里填写自己钉钉群自定义机器人的token'
|
export DINGTALK_WEBHOOK='https://oapi.dingtalk.com/robot/send?access_token=这里填写自己钉钉群自定义机器人的token'
|
||||||
|
|
||||||
|
export PORT=3000
|
||||||
|
@ -1,20 +1,2 @@
|
|||||||
astroid==2.4.2
|
DingtalkChatbot
|
||||||
autopep8==1.5.4
|
slack-bolt
|
||||||
certifi==2020.12.5
|
|
||||||
chardet==4.0.0
|
|
||||||
DingtalkChatbot==1.5.2
|
|
||||||
idna==2.10
|
|
||||||
isort==5.7.0
|
|
||||||
lazy-object-proxy==1.4.3
|
|
||||||
mccabe==0.6.1
|
|
||||||
pkg-resources==0.0.0
|
|
||||||
pycodestyle==2.6.0
|
|
||||||
pylint==2.6.0
|
|
||||||
requests==2.25.1
|
|
||||||
six==1.15.0
|
|
||||||
slack-bolt==1.2.3
|
|
||||||
slack-sdk==3.2.0
|
|
||||||
toml==0.10.2
|
|
||||||
typed-ast==1.4.2
|
|
||||||
urllib3==1.26.2
|
|
||||||
wrapt==1.12.1
|
|
||||||
|
0
startup.sh
Normal file → Executable file
0
startup.sh
Normal file → Executable file
Reference in New Issue
Block a user