Linebotの既読のフラグの追加

既読のフラグの追加

Firestoreで取得したメッセージを既読に設定するために、取得した後に各メッセージのread属性をTrueに更新する処理を追加

import warnings
from google.cloud import firestore
import datetime
import absl.logging

# 警告を無視する設定
warnings.filterwarnings("ignore", category=UserWarning, module="google.cloud.firestore_v1.base_collection")

# Firestore クライアントの初期化
db = firestore.Client.from_service_account_json("serviceAccountKey.json")

# gRPCの警告を抑制
absl.logging.set_verbosity("info")

def get_user_messages(user_id):
    messages_ref = db.collection("messages")
    now = datetime.datetime.now()
    
    # 24時間以内のメッセージを取得するクエリ
    query = messages_ref.where("user_id", "==", user_id).where("timestamp", ">=", now - datetime.timedelta(days=1))
    # 24時間以上前のメッセージを削除するクエリ
    old_messages_query = messages_ref.where("user_id", "==", user_id).where("timestamp", "<", now - datetime.timedelta(days=1))

    # メッセージを取得してリストに格納
    user_messages = []
    for doc in query.stream():
        user_messages.append(doc.to_dict())
        # メッセージを既読に設定
        doc.reference.update({"read": True})
    
    # 古いメッセージを削除
    for doc in old_messages_query.stream():
        doc.reference.delete()

    return user_messages

# 特定のユーザーIDを指定してメッセージを取得
user_id = ""
messages = get_user_messages(user_id)

for message in messages:
    print(f"メッセージ: {message['text']}, タイムスタンプ: {message['timestamp']}")

以下GPTの解説
メッセージの取得時にそのメッセージをread属性をTrueに設定する処理を追加したことです。

これにより、メッセージを取得すると同時にそれらを既読としてマークし、
次回のクエリではそれらが含まれないようにします。
これは、アプリケーションで未読メッセージを効率的に処理するために有効です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です