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( pipe.delete(
constants.MESSAGES_QUEUE, constants.MESSAGES_QUEUE,
constants.MESSAGE_CONTENTS_QUEUE, constants.MESSAGE_CONTENTS_QUEUE,
constants.MESSAGES_TO_FLUSH_IDS, constants.MESSAGES_PROPAGATION_MAP,
) )
messages, message_contents, _ = await pipe.execute() 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() await pipe.execute()
+41 -2
View File
@@ -2,8 +2,11 @@ import discord
from tortoise import expressions from tortoise import expressions
import orjson
from payphone.db import models from payphone.db import models
from payphone.core import constants, formatting from payphone.core import constants, formatting
from payphone.core.redis import redis
async def ReplyEmbed( async def ReplyEmbed(
@@ -20,6 +23,43 @@ async def ReplyEmbed(
message. 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 = ( message = (
await models.Message.get_or_none( await models.Message.get_or_none(
expressions.Q(id=reference.message_id) expressions.Q(id=reference.message_id)
@@ -35,8 +75,7 @@ async def ReplyEmbed(
is_this_channel = message.id == reference.message_id is_this_channel = message.id == reference.message_id
last_content: models.MessageContent | None = None if last_content is None:
for content in message.contents: for content in message.contents:
if last_content is None: if last_content is None:
last_content = content last_content = content
+1 -1
View File
@@ -172,7 +172,7 @@ CHANNELS_SEARCH_QUEUE = "channels:searching"
CHANNELS_ONCALL_SET = "channels:on-call" CHANNELS_ONCALL_SET = "channels:on-call"
MESSAGES_QUEUE = "messages" MESSAGES_QUEUE = "messages"
MESSAGE_CONTENTS_QUEUE = "message-contents" MESSAGE_CONTENTS_QUEUE = "message-contents"
MESSAGES_TO_FLUSH_IDS = "message-ids" MESSAGES_PROPAGATION_MAP = "messages-propagation"
BAN_TEMPLATE = "b:%s" BAN_TEMPLATE = "b:%s"
PREFIX_TEMPLATE = "p:%s" PREFIX_TEMPLATE = "p:%s"
+3
View File
@@ -219,6 +219,7 @@ class Message(models.Model):
profile: fields.ForeignKeyRelation["Profile"] = fields.ForeignKeyField( profile: fields.ForeignKeyRelation["Profile"] = fields.ForeignKeyField(
"models.Profile", on_delete=fields.OnDelete.CASCADE "models.Profile", on_delete=fields.OnDelete.CASCADE
) )
profile_id: int
replying_to: fields.ForeignKeyNullableRelation["Message"] = fields.ForeignKeyField( replying_to: fields.ForeignKeyNullableRelation["Message"] = fields.ForeignKeyField(
"models.Message", "models.Message",
related_name="replies", related_name="replies",
@@ -234,6 +235,7 @@ class Message(models.Model):
"models.Channel", related_name="propagated_messages", null=True "models.Channel", related_name="propagated_messages", null=True
) )
) )
propagation_channel_id: int
created_at = fields.DatetimeField(auto_now_add=True) created_at = fields.DatetimeField(auto_now_add=True)
contents: fields.BackwardFKRelation["MessageContent"] contents: fields.BackwardFKRelation["MessageContent"]
@@ -311,6 +313,7 @@ class MessageContent(models.Model):
message = fields.ForeignKeyField( message = fields.ForeignKeyField(
"models.Message", related_name="contents", on_delete=fields.OnDelete.CASCADE "models.Message", related_name="contents", on_delete=fields.OnDelete.CASCADE
) )
message_id: int
content = fields.CharField(max_length=4096) content = fields.CharField(max_length=4096)
was_propagated = fields.BooleanField(default=True) was_propagated = fields.BooleanField(default=True)
created_at = fields.DatetimeField(auto_now_add=True) created_at = fields.DatetimeField(auto_now_add=True)