为什么我的python Slack应用程序永远运行而没有任何反应?



我遵循了Slack API教程来制作Python slackclient bot。现在我已经到了最后一步,那就是运行app.py

问题是它永远运行,什么也没发生

ssl_contextslack_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'

希望有帮助。

此外,附带说明一下,您可能希望编辑问题并删除机器人令牌,因为任何人都可以使用它来收听您在频道中发送的消息。

最新更新