Some checks failed
CI / test (push) Failing after 24s
- add reply_to/forwarded_from message fields and chat pinned_message field - add forward and pin APIs plus reply support in message create - wire web actions: Reply, Fwd, Pin and reply composer state - fix spam policy bug: allow repeated identical messages, keep rate limiting
21 lines
752 B
Python
21 lines
752 B
Python
from fastapi import HTTPException, status
|
|
from redis.exceptions import RedisError
|
|
|
|
from app.config.settings import settings
|
|
from app.utils.redis_client import get_redis_client
|
|
|
|
async def enforce_message_spam_policy(*, user_id: int, chat_id: int, text: str | None) -> None:
|
|
redis = get_redis_client()
|
|
rate_key = f"spam:msg_rate:{user_id}:{chat_id}"
|
|
try:
|
|
count = await redis.incr(rate_key)
|
|
if count == 1:
|
|
await redis.expire(rate_key, 60)
|
|
if count > settings.message_rate_limit_per_minute:
|
|
raise HTTPException(
|
|
status_code=status.HTTP_429_TOO_MANY_REQUESTS,
|
|
detail="Message rate limit exceeded for this chat.",
|
|
)
|
|
except RedisError:
|
|
return
|