Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

conversations.list getting caught with ratelimited error in v0.27/v0.28 (v0.26 is fine) #1958

Open
rodrigo-albuquerque opened this issue Dec 5, 2022 · 2 comments

Comments

@rodrigo-albuquerque
Copy link
Contributor

Description

Started opsdroid:

opsdroid_test@opsdroid_test-6ccd79897-7tds7:~$ opsdroid start -f configuration.yaml
Opsdroid has a new configuration format since version 0.17.0. Please read on how to migrate in the documentation at https://docs.opsdroid.dev/en/stable/configuration.html#migrate-to-new-configuration-layout.
[12/05/22 10:28:06] INFO     ========================================                                                                                                                                                                           logging.py:161
                    INFO     Started opsdroid v0.28.0.                                                                                                                                                                                          logging.py:162
                    WARNING  'welcome-message: true/false' is missing in configuration.yaml                                                                                                                                                       utils.py:152
                    WARNING  No databases in configuration. This will cause skills which store things in memory to lose data when opsdroid is restarted.                                                                                         loader.py:359
                    INFO     Opsdroid is now running, press ctrl+c to exit.                                                                                                                                                                        core.py:172
                    INFO     Connecting to Slack.                                                                                                                                                                                             connector.py:101
[12/05/22 10:28:07] INFO     Updating Channels from Slack API at Mon Dec  5 10:28:07 2022.                                                                                                                                                    connector.py:203
                    INFO     A new session (s_8745201999626) has been established                                                                                                                                                              __init__.py:360
                    INFO     Connected successfully with socket mode                                                                                                                                                                          connector.py:134
                    INFO     started web server on http://0.0.0.0:8080

Then, a couple of seconds later conversations.list gets caught by Slack API's ratelimited error :

 File "/home/opsdroid_test/.local/lib/python3.10/site-packages/opsdroid/connector/slack/connector.py", line 208, in _get_channels
    channels = await self.slack_web_client.conversations_list(
  File "/home/opsdroid_test/.local/lib/python3.10/site-packages/slack_sdk/web/async_client.py", line 2463, in conversations_list
    return await self.api_call("conversations.list", http_verb="GET", params=kwargs)
  File "/home/opsdroid_test/.local/lib/python3.10/site-packages/slack_sdk/web/async_base_client.py", line 161, in api_call
    return await self._send(
  File "/home/opsdroid_test/.local/lib/python3.10/site-packages/slack_sdk/web/async_base_client.py", line 201, in _send
    return AsyncSlackResponse(**{**data, **res}).validate()
  File "/home/opsdroid_test/.local/lib/python3.10/site-packages/slack_sdk/web/async_slack_response.py", line 192, in validate
    raise e.SlackApiError(message=msg, response=self)
slack_sdk.errors.SlackApiError: The request to the Slack API failed. (url: https://www.slack.com/api/conversations.list)
The server responded with: {'ok': False, 'error': 'ratelimited'}

Full trace;

Traceback (most recent call last):
  File "/home/opsdroid_test/.local/bin/opsdroid", line 33, in <module>
    sys.exit(load_entry_point('opsdroid==0.28.0', 'console_scripts', 'opsdroid')())
  File "/home/opsdroid_test/.local/lib/python3.10/site-packages/click/core.py", line 1130, in __call__
    return self.main(*args, **kwargs)
  File "/home/opsdroid_test/.local/lib/python3.10/site-packages/click/core.py", line 1055, in main
    rv = self.invoke(ctx)
  File "/home/opsdroid_test/.local/lib/python3.10/site-packages/click/core.py", line 1657, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/opsdroid_test/.local/lib/python3.10/site-packages/click/core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/opsdroid_test/.local/lib/python3.10/site-packages/click/core.py", line 760, in invoke
    return __callback(*args, **kwargs)
  File "/home/opsdroid_test/.local/lib/python3.10/site-packages/opsdroid/cli/start.py", line 43, in start
    opsdroid.run()
  File "/home/opsdroid_test/.local/lib/python3.10/site-packages/opsdroid/core.py", line 176, in run
    self.eventloop.run_until_complete(self.start())
  File "/home/opsdroid_test/.local/lib/python3.10/site-packages/nest_asyncio.py", line 90, in run_until_complete
    return f.result()
  File "/usr/local/lib/python3.10/asyncio/futures.py", line 201, in result
    raise self._exception
  File "/usr/local/lib/python3.10/asyncio/tasks.py", line 234, in __step
    result = coro.throw(exc)
  File "/home/opsdroid_test/.local/lib/python3.10/site-packages/opsdroid/core.py", line 199, in start
    await self._run_tasks()
  File "/home/opsdroid_test/.local/lib/python3.10/site-packages/opsdroid/core.py", line 210, in _run_tasks
    await asyncio.gather(*self.tasks)
  File "/usr/local/lib/python3.10/asyncio/tasks.py", line 304, in __wakeup
    future.result()
  File "/usr/local/lib/python3.10/asyncio/tasks.py", line 232, in __step
    result = coro.send(None)
  File "/home/opsdroid_test/.local/lib/python3.10/site-packages/opsdroid/connector/slack/connector.py", line 208, in _get_channels
    channels = await self.slack_web_client.conversations_list(
  File "/home/opsdroid_test/.local/lib/python3.10/site-packages/slack_sdk/web/async_client.py", line 2463, in conversations_list
    return await self.api_call("conversations.list", http_verb="GET", params=kwargs)
  File "/home/opsdroid_test/.local/lib/python3.10/site-packages/slack_sdk/web/async_base_client.py", line 161, in api_call
    return await self._send(
  File "/home/opsdroid_test/.local/lib/python3.10/site-packages/slack_sdk/web/async_base_client.py", line 201, in _send
    return AsyncSlackResponse(**{**data, **res}).validate()
  File "/home/opsdroid_test/.local/lib/python3.10/site-packages/slack_sdk/web/async_slack_response.py", line 192, in validate
    raise e.SlackApiError(message=msg, response=self)
slack_sdk.errors.SlackApiError: The request to the Slack API failed. (url: https://www.slack.com/api/conversations.list)
The server responded with: {'ok': False, 'error': 'ratelimited'}
ERROR: Unhandled exception in opsdroid, exiting...
{'client_session': <aiohttp.client.ClientSession object at 0x7f426a89d3f0>, 'message': 'Unclosed client session'}
ERROR: Unhandled exception in opsdroid, exiting...
{'task': <Task pending name='Task-25' coro=<parse_crontab() running at /home/opsdroid_test/.local/lib/python3.10/site-packages/opsdroid/parsers/crontab.py:16> wait_for=<Future pending cb=[Task.__wakeup()]> cb=[gather.<locals>._done_callback() at /usr/local/lib/python3.10/asyncio/tasks.py:720]>, 'message': 'Task was destroyed but it is pending!'}
ERROR: Unhandled exception in opsdroid, exiting...
{'task': <Task pending name='Task-21' coro=<SocketModeClient.monitor_current_session() running at /home/opsdroid_test/.local/lib/python3.10/site-packages/slack_sdk/socket_mode/aiohttp/__init__.py:168> wait_for=<Future pending cb=[Task.__wakeup()]>>, 'message': 'Task was destroyed but it is pending!'}
ERROR: Unhandled exception in opsdroid, exiting...
{'task': <Task pending name='Task-22' coro=<SocketModeClient.receive_messages() running at /home/opsdroid_test/.local/lib/python3.10/site-packages/slack_sdk/socket_mode/aiohttp/__init__.py:230> wait_for=<Future pending cb=[Task.__wakeup()]>>, 'message': 'Task was destroyed but it is pending!'}
ERROR: Unhandled exception in opsdroid, exiting...
{'task': <Task pending name='Task-1' coro=<AsyncBaseSocketModeClient.process_messages() running at /home/opsdroid_test/.local/lib/python3.10/site-packages/slack_sdk/socket_mode/async_client.py:112> wait_for=<Future pending cb=[Task.__wakeup()]>>, 'message': 'Task was destroyed but it is pending!'}
Exception ignored in: <coroutine object AsyncBaseSocketModeClient.process_messages at 0x7f426a860190>
Traceback (most recent call last):
  File "/home/opsdroid_test/.local/lib/python3.10/site-packages/slack_sdk/socket_mode/async_client.py", line 119, in process_messages
  File "/usr/local/lib/python3.10/logging/__init__.py", line 1512, in exception
  File "/usr/local/lib/python3.10/logging/__init__.py", line 1506, in error
  File "/usr/local/lib/python3.10/logging/__init__.py", line 1624, in _log
  File "/usr/local/lib/python3.10/logging/__init__.py", line 1634, in handle
  File "/usr/local/lib/python3.10/logging/__init__.py", line 1696, in callHandlers
  File "/usr/local/lib/python3.10/logging/__init__.py", line 968, in handle
  File "/home/opsdroid_test/.local/lib/python3.10/site-packages/rich/logging.py", line 138, in emit
  File "/home/opsdroid_test/.local/lib/python3.10/site-packages/rich/traceback.py", line 292, in from_exception
  File "/home/opsdroid_test/.local/lib/python3.10/site-packages/rich/traceback.py", line 337, in extract
ImportError: sys.meta_path is None, Python is likely shutting down

Steps to Reproduce

opsdroid start -f configuration.yaml

Only in v0.27 and v0.28 (this does not happen in v0.26

@rodrigo-albuquerque
Copy link
Contributor Author

This commit is the culprit: 373d216

When I removed _get_channels and all references to it it works fine. I get no error.

@rodrigo-albuquerque
Copy link
Contributor Author

DEBUG    Sending a request - url: GET https://www.slack.com/api/conversations.list, params: {'cursor': 'dGVhbTpDVEw2MTNQOVI=', 'limit': 100}, files: {}, data: {}, json: {}, proxy: {}, headers:                async_internal_utils.py:99
                            {'Content-Type': 'application/x-www-form-urlencoded', 'Authorization': '(redacted)', 'User-Agent': 'Python/3.10.5 slackclient/3.17.1 Linux/4.15.0-122-generic'}

DEBUG    Received the following response - status: 429, headers: {'Date': 'Tue, 06 Dec 2022 16:14:01 GMT', 'Server': 'Apache', 'x-powered-by': 'HHVM/4.153.1', 'Access-Control-Allow-Origin': '*',             async_internal_utils.py:143
                            'referrer-policy': 'no-referrer', 'x-slack-backend': 'r', 'x-slack-unique-id': 'Y49qSc5X4ysr9jRHKeV8nAAAAAo', 'strict-transport-security': 'max-age=31536000; includeSubDomains; preload',
                            'Access-Control-Allow-Headers': 'slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid, x-b3-sampled, x-b3-flags', 'Access-Control-Expose-Headers': 'x-slack-req-id,
                            retry-after', 'x-oauth-scopes':
                            'incoming-webhook,users:read,channels:history,im:history,chat:write,channels:read,app_mentions:read,files:write,groups:history,groups:read,groups:write,emoji:read,dnd:read,im:read,links:read,links:
                            write,pins:read,reactions:read,reactions:write,reminders:read,reminders:write,remote_files:share,remote_files:write,team:read,users.profile:read,users:read.email,users:write,im:write',
                            'Retry-After': '30', 'Expires': 'Mon, 26 Jul 1997 05:00:00 GMT', 'Cache-Control': 'private, no-cache, no-store, must-revalidate', 'Pragma': 'no-cache', 'x-xss-protection': '0',
                            'x-content-type-options': 'nosniff', 'x-slack-req-id': '8e669e68b732f0f610449afb7f974c91', 'Vary': 'Accept-Encoding', 'Content-Type': 'application/json; charset=utf-8',
                            'x-envoy-upstream-service-time': '87', 'x-backend': 'main_normal main_bedrock_normal_with_overflow main_canary_with_overflow main_bedrock_canary_with_overflow main_control_with_overflow
                            main_bedrock_control_with_overflow', 'x-server': 'slack-www-hhvm-main-iad-kcsp', 'x-slack-shared-secret-outcome': 'no-match', 'Via': 'envoy-www-iad-aljt, envoy-edge-pdx-j9km', 'x-edge-backend':
                            'envoy-www', 'x-slack-edge-shared-secret-outcome': 'no-match', 'Transfer-Encoding': 'chunked'}, body: {'ok': False, 'error': 'ratelimited'}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant