`extract_team_id` crashes with `TypeError when payload["user"]` is a string (e.g. `member_joined_channel` events)
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 2/5
- Tempo estimado
- 1-3 horas
- Facilidade para iniciantes
- 72/100
Direção de pesquisa
Comece em slack_bolt/request/internals.py, em extract_team_id, e depois inspecione o tratamento existente do tipo de payload["team"]. Reproduza o payload member_joined_channel com um valor string para user e verifique se o processamento da request chega ao listener sem um TypeError. Está concluído quando os campos user com valores string não causarem mais falhas na extração do ID do team e os formatos de payload existentes continuarem funcionando.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Reproducible in:
The slack_bolt version
slack-bolt==1.27.0
slack-sdk==3.39.0
Python runtime version
Python 3.14.0
OS info
ProductName: macOS
ProductVersion: 26.3
BuildVersion: 25D125
Darwin Kernel Version 25.3.0: Wed Jan 28 20:53:05 PST 2026; root:xnu-12377.81.4~5/RELEASE_ARM64_T6020
Steps to reproduce:
- Register a
member_joined_channellistener in a Slack Bolt app:
@app.event("member_joined_channel")
def handle_channel_join(event, client, say):
say("Hello!")
-
Add the bot to any Slack channel.
-
Observe the incoming event payload — Slack sends
"user"as a plain string (the user ID):
{
"type": "member_joined_channel",
"user": "U0123456789",
"channel": "C0123456789",
"team": "T0123456789"
}
Expected result:
The listener is invoked normally.
Actual result:
The request crashes before the listener is reached, with:
TypeError: string indices must be integers, not 'str'
File "slack_bolt/adapter/aws_lambda/handler.py", line 87, in to_bolt_request
return BoltRequest(
File "slack_bolt/request/request.py", line 69, in __init__
self.context = build_context(BoltContext(context if context else {}), self.body)
File "slack_bolt/request/internals.py", line 276, in build_context
team_id = extract_team_id(body)
File "slack_bolt/request/internals.py", line 116, in extract_team_id
return payload["user"]["team_id"]
Root cause
extract_team_id in slack_bolt/request/internals.py assumes payload["user"] is always a dict:
if payload.get("user") is not None:
return payload["user"]["team_id"]
But member_joined_channel sends "user" as a plain string (the user ID). Accessing "U0123456789"["team_id"] raises the TypeError.
The same function already handles payload["team"] correctly with an isinstance check:
if payload.get("team") is not None:
team = payload.get("team")
if isinstance(team, str):
return team
elif team and "id" in team:
return team.get("id")
The same guard is missing for payload["user"]. This pattern (subscribing to member_joined_channel and checking if the joined user is the bot) is what maintainers recommend in #710, so users following that guidance will hit this bug.
- Linguagem predominante
- Python
- Estrelas
- 1.3k
- Forks
- 288
- Merge médio
- 1d 8h
- PRs com merge (30d)
- 10
Guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de slackapi/bolt-python
-
docs enhancement server-side
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 88/100
slackapi/bolt-python#1576 · 1 comentário ·
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 65/100
slackapi/bolt-python#1577 ·
-
area:async auto-triage-skip dependencies
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 65/100
slackapi/bolt-python#1472 · 1 comentário · 1 reação ·
-
auto-triage-skip enhancement
slackapi/bolt-python#1346 · 2 comentários · 1 responsável ·
-
auto-triage-skip discussion
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 45/100
slackapi/bolt-python#1332 · 2 comentários · 1 reação ·
Todas as issues de slackapi/bolt-python
Issues semelhantes
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 88/100
use-agent-os/agent-os#3314 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
BasedHardware/omi#15662 · 1 comentário ·
-
documentation help wanted
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 90/100
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 62/100
AiursoftWeb/AnduinOS-2#19 ·