Skip to content

Commit cb8b72b

Browse files
committed
fixed author case
1 parent 514f30a commit cb8b72b

4 files changed

Lines changed: 77 additions & 67 deletions

File tree

backend/apps/slack/management/commands/slack_sync_messages.py

Lines changed: 36 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -323,64 +323,53 @@ def _create_message_from_data(
323323
) -> Message | None:
324324
"""Create Message instance using from_slack pattern."""
325325
try:
326-
if not (slack_user_id := (message_data.get("user") or message_data.get("bot_id"))):
327-
return None
326+
slack_user_id = message_data.get("user") or message_data.get("bot_id")
327+
author = None
328328

329-
try:
330-
author = Member.objects.get(
331-
slack_user_id=slack_user_id, workspace=conversation.workspace
332-
)
333-
except Member.DoesNotExist:
334-
author = None
335-
retry_count = 0
336-
337-
while retry_count < max_retries:
338-
try:
339-
time.sleep(delay)
329+
if slack_user_id:
330+
try:
331+
author = Member.objects.get(
332+
slack_user_id=slack_user_id, workspace=conversation.workspace
333+
)
334+
except Member.DoesNotExist:
335+
retry_count = 0
336+
while retry_count < max_retries:
337+
try:
338+
time.sleep(delay)
340339

341-
user_info = client.users_info(user=slack_user_id)
342-
self._handle_slack_response(user_info, "users_info")
340+
user_info = client.users_info(user=slack_user_id)
341+
self._handle_slack_response(user_info, "users_info")
343342

344-
author = Member.update_data(
345-
user_info["user"], conversation.workspace, save=True
346-
)
347-
self.stdout.write(
348-
self.style.SUCCESS(f"Created new member: {slack_user_id}")
349-
)
350-
break
351-
except SlackApiError as e:
352-
if e.response["error"] == "ratelimited":
353-
retry_after = int(
354-
e.response.headers.get("Retry-After", delay * (retry_count + 1))
343+
author = Member.update_data(
344+
user_info["user"], conversation.workspace, save=True
355345
)
356-
357-
retry_count += 1
358-
self.stdout.write(
359-
self.style.WARNING(
360-
f"Rate limited on user info. Retrying after {retry_after}s"
361-
)
362-
)
363-
time.sleep(retry_after)
364-
else:
365346
self.stdout.write(
366-
self.style.WARNING(
367-
f"Failed to fetch user data for {slack_user_id}"
368-
)
347+
self.style.SUCCESS(f"Created new member: {slack_user_id}")
369348
)
370-
return None
349+
break
371350

372-
if not author:
373-
self.stdout.write(
374-
self.style.WARNING(
375-
f"Could not fetch user {slack_user_id}, skipping message"
376-
)
377-
)
378-
return None
351+
except SlackApiError as e:
352+
if e.response.get("error") == "ratelimited":
353+
retry_after = int(e.response.headers.get("Retry-After", delay))
354+
retry_count += 1
355+
self.stdout.write(
356+
self.style.WARNING(
357+
f"Rate limited on user info Retrying after {retry_after}s"
358+
)
359+
)
360+
time.sleep(retry_after)
361+
else:
362+
self.stdout.write(
363+
self.style.ERROR(
364+
f"Failed to fetch user data for {slack_user_id}: {e!s}"
365+
)
366+
)
367+
break
379368

380369
return Message.update_data(
381370
data=message_data,
382371
conversation=conversation,
383-
author=author,
372+
author=author if isinstance(author, Member) else None,
384373
parent_message=parent_message,
385374
save=False,
386375
)
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# Generated by Django 5.2.3 on 2025-06-17 15:27
2+
3+
import django.db.models.deletion
4+
from django.db import migrations, models
5+
6+
7+
class Migration(migrations.Migration):
8+
dependencies = [
9+
("slack", "0015_remove_message_is_thread_parent_message_has_replies_and_more"),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name="message",
15+
name="is_bot",
16+
field=models.BooleanField(default=False, verbose_name="Is bot"),
17+
),
18+
migrations.AddField(
19+
model_name="message",
20+
name="raw_data",
21+
field=models.JSONField(default=dict, verbose_name="Raw data"),
22+
),
23+
migrations.AlterField(
24+
model_name="message",
25+
name="author",
26+
field=models.ForeignKey(
27+
blank=True,
28+
null=True,
29+
on_delete=django.db.models.deletion.CASCADE,
30+
related_name="messages",
31+
to="slack.member",
32+
),
33+
),
34+
]

backend/apps/slack/migrations/0016_message_raw_data.py

Lines changed: 0 additions & 17 deletions
This file was deleted.

backend/apps/slack/models/message.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,15 @@ class Meta:
2020

2121
created_at = models.DateTimeField(verbose_name="Created at")
2222
has_replies = models.BooleanField(verbose_name="Has replies", default=False)
23+
is_bot = models.BooleanField(verbose_name="Is bot", default=False)
2324
raw_data = models.JSONField(verbose_name="Raw data", default=dict)
2425
slack_message_id = models.CharField(verbose_name="Slack message ID", max_length=50)
2526
text = models.TextField(verbose_name="Text")
2627

2728
# FKs.
28-
author = models.ForeignKey(Member, on_delete=models.CASCADE, related_name="messages")
29+
author = models.ForeignKey(
30+
Member, on_delete=models.CASCADE, related_name="messages", blank=True, null=True
31+
)
2932
conversation = models.ForeignKey(
3033
Conversation, on_delete=models.CASCADE, related_name="messages"
3134
)
@@ -45,13 +48,14 @@ def from_slack(
4548
self,
4649
message_data: dict,
4750
conversation: Conversation,
48-
author: Member,
51+
author: "Member | None" = None,
4952
*,
5053
parent_message: "Message | None" = None,
5154
) -> None:
5255
"""Update instance based on Slack message data."""
5356
self.created_at = datetime.fromtimestamp(float(message_data["ts"]), tz=UTC)
5457
self.has_replies = message_data.get("reply_count", 0) > 0
58+
self.is_bot = message_data.get("bot_id", "") != ""
5559
self.raw_data = message_data
5660
self.slack_message_id = message_data.get("ts", "")
5761
self.text = message_data.get("text", "")
@@ -69,7 +73,7 @@ def bulk_save(messages: list["Message"], fields=None) -> None:
6973
def update_data(
7074
data: dict,
7175
conversation: Conversation,
72-
author: Member,
76+
author: Member | None = None,
7377
*,
7478
parent_message: "Message | None" = None,
7579
save: bool = True,

0 commit comments

Comments
 (0)