fix(bot): 🐛 Replies not working on unflushed messages.

This commit is contained in:
Nyeki.py
2024-10-19 22:47:50 -03:00
parent 5c2df6b782
commit d030d0c63a
4 changed files with 67 additions and 19 deletions
+8 -2
View File
@@ -51,7 +51,7 @@ class Calls(base.Cog):
pipe.delete(
constants.MESSAGES_QUEUE,
constants.MESSAGE_CONTENTS_QUEUE,
constants.MESSAGES_TO_FLUSH_IDS,
constants.MESSAGES_PROPAGATION_MAP,
)
messages, message_contents, _ = await pipe.execute()
@@ -830,7 +830,13 @@ class Calls(base.Cog):
}
),
)
pipe.sadd(constants.MESSAGES_TO_FLUSH_IDS, message.id)
if webhook_message is not None:
pipe.hset(
constants.MESSAGES_PROPAGATION_MAP,
webhook_message.id,
message.id
)
await pipe.execute()
+41 -2
View File
@@ -2,8 +2,11 @@ import discord
from tortoise import expressions
import orjson
from payphone.db import models
from payphone.core import constants, formatting
from payphone.core.redis import redis
async def ReplyEmbed(
@@ -20,6 +23,43 @@ async def ReplyEmbed(
message.
"""
message = None
unflushed_propagation_to_message_id = await redis.hget(
constants.MESSAGES_PROPAGATION_MAP, reference.message_id
)
unflushed_message = None
unflushed_message_content = None
last_content: models.MessageContent | None = None
if unflushed_propagation_to_message_id is not None:
unflushed_message = await redis.hget(
constants.MESSAGES_QUEUE, unflushed_propagation_to_message_id
)
if unflushed_message is not None:
unflushed_message_content = await redis.hget(
constants.MESSAGE_CONTENTS_QUEUE, unflushed_propagation_to_message_id
)
else:
unflushed_message = await redis.hget(
constants.MESSAGES_QUEUE, reference.message_id
)
if unflushed_message is not None:
unflushed_message_content = await redis.hget(
constants.MESSAGE_CONTENTS_QUEUE, reference.message_id
)
if unflushed_message is not None:
message = models.Message(**orjson.loads(unflushed_message))
last_content = models.MessageContent(**orjson.loads(unflushed_message_content))
message.profile = await models.Profile.get(id=message.profile_id)
message.propagation_channel = await models.Channel.get(id=message.propagation_channel_id)
else:
message = (
await models.Message.get_or_none(
expressions.Q(id=reference.message_id)
@@ -35,8 +75,7 @@ async def ReplyEmbed(
is_this_channel = message.id == reference.message_id
last_content: models.MessageContent | None = None
if last_content is None:
for content in message.contents:
if last_content is None:
last_content = content
+1 -1
View File
@@ -172,7 +172,7 @@ CHANNELS_SEARCH_QUEUE = "channels:searching"
CHANNELS_ONCALL_SET = "channels:on-call"
MESSAGES_QUEUE = "messages"
MESSAGE_CONTENTS_QUEUE = "message-contents"
MESSAGES_TO_FLUSH_IDS = "message-ids"
MESSAGES_PROPAGATION_MAP = "messages-propagation"
BAN_TEMPLATE = "b:%s"
PREFIX_TEMPLATE = "p:%s"
+3
View File
@@ -219,6 +219,7 @@ class Message(models.Model):
profile: fields.ForeignKeyRelation["Profile"] = fields.ForeignKeyField(
"models.Profile", on_delete=fields.OnDelete.CASCADE
)
profile_id: int
replying_to: fields.ForeignKeyNullableRelation["Message"] = fields.ForeignKeyField(
"models.Message",
related_name="replies",
@@ -234,6 +235,7 @@ class Message(models.Model):
"models.Channel", related_name="propagated_messages", null=True
)
)
propagation_channel_id: int
created_at = fields.DatetimeField(auto_now_add=True)
contents: fields.BackwardFKRelation["MessageContent"]
@@ -311,6 +313,7 @@ class MessageContent(models.Model):
message = fields.ForeignKeyField(
"models.Message", related_name="contents", on_delete=fields.OnDelete.CASCADE
)
message_id: int
content = fields.CharField(max_length=4096)
was_propagated = fields.BooleanField(default=True)
created_at = fields.DatetimeField(auto_now_add=True)