我遵循了Slack API教程来制作Python slackclient bot。现在我已经到了最后一步,那就是运行app.py
。
问题是它永远运行,什么也没发生
ssl_context
和slack_token
都打印到合理的内容:xoxb-XXXXXXXXXXXX-xxxxxxxxxxxx-XXXXXXXXXXXXXXXXXXXXXXXX
和<ssl.SSLContext object at 0x00000xxxxxxxxxxx>
包含获取客户端和令牌的 .start(( 方法如下所示(包括打印值(:
if __name__ == "__main__":
ssl_context = ssl_lib.create_default_context(cafile=certifi.where())
slack_token = os.environ["SLACK_BOT_TOKEN"]
rtm_client = slack.RTMClient(token=slack_token, ssl=ssl_context)
print ("ssl = %s" % ssl_context)
print ("Token = %s" % slack_token)
rtm_client.start()
其余文件可通过顶部的教程链接访问。
按 Ctrl+C 时,我得到以下回溯
Traceback (most recent call last):
File "app.py", line 133, in <module>
rtm_client.start()
File "C:Usersanna.jenssenAppDataLocalProgramsPythonPython38libsite-packagesslackrtmclient.py", line 198, in start
return self._event_loop.run_until_complete(future)
File "C:Usersanna.jenssenAppDataLocalProgramsPythonPython38libasynciobase_events.py", line 595, in run_until_complete
self.run_forever()
File "C:Usersanna.jenssenAppDataLocalProgramsPythonPython38libasynciowindows_events.py", line 316, in run_forever
super().run_forever()
File "C:Usersanna.jenssenAppDataLocalProgramsPythonPython38libasynciobase_events.py", line 563, in run_forever
self._run_once()
File "C:Usersanna.jenssenAppDataLocalProgramsPythonPython38libasynciobase_events.py", line 1808, in _run_once
event_list = self._selector.select(timeout)
File "C:Usersanna.jenssenAppDataLocalProgramsPythonPython38libasynciowindows_events.py", line 430, in select
self._poll(timeout)
File "C:Usersanna.jenssenAppDataLocalProgramsPythonPython38libasynciowindows_events.py", line 779, in _poll
status = _overlapped.GetQueuedCompletionStatus(self._iocp, ms)
KeyboardInterrupt
^C
RTM 客户端旨在永久运行,因为它的工作是侦听频道中的事件。
如果你想看看RTM客户端在做什么,你可以将以下内容添加到你的主客户端:
# create logger
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
# create console handler and set level to debug
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
# set how logger will format logs
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
# add formatting to logger
ch.setFormatter(formatter)
logger.addHandler(ch)
ssl_context = ssl_lib.create_default_context(cafile=certifi.where())
rtm_client = slack.RTMClient(token=SLACK_BOT_TOKEN, ssl=ssl_context)
rtm_client.start()
不要忘记在您的 py 文件中也import logging
。
然后,您将能够看到它初始化和响应事件。下面是我启动 RTM 客户端并在机器人已添加到的通道中发送消息的示例:
2019-10-20 13:11:15,456 - DEBUG - Using selector: SelectSelector
2019-10-20 13:11:15,458 - DEBUG - Retrieving websocket info.
2019-10-20 13:11:20,052 - DEBUG - The Websocket connection has been opened.
2019-10-20 13:11:20,296 - DEBUG - Running 1 callbacks for event: 'message'
希望有帮助。
此外,附带说明一下,您可能希望编辑问题并删除机器人令牌,因为任何人都可以使用它来收听您在频道中发送的消息。